angular-odata 0.115.0 → 0.121.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/README.md +4 -2
- package/esm2020/lib/api.mjs +7 -7
- package/esm2020/lib/cache/cache.mjs +3 -3
- package/esm2020/lib/client.mjs +33 -27
- package/esm2020/lib/index.mjs +2 -2
- package/esm2020/lib/loaders.mjs +33 -0
- package/esm2020/lib/models/collection.mjs +79 -48
- package/esm2020/lib/models/model.mjs +35 -9
- package/esm2020/lib/models/options.mjs +99 -39
- package/esm2020/lib/module.mjs +21 -17
- package/esm2020/lib/options.mjs +4 -3
- package/esm2020/lib/resources/path/handlers.mjs +8 -8
- package/esm2020/lib/resources/path/segments.mjs +6 -6
- package/esm2020/lib/resources/query/builder.mjs +1 -1
- package/esm2020/lib/resources/query/expressions/count.mjs +5 -5
- package/esm2020/lib/resources/query/expressions/expand.mjs +18 -18
- package/esm2020/lib/resources/query/handlers.mjs +45 -45
- package/esm2020/lib/resources/query/options.mjs +27 -27
- package/esm2020/lib/resources/request.mjs +1 -1
- package/esm2020/lib/resources/resource.mjs +11 -9
- package/esm2020/lib/resources/responses/annotations.mjs +1 -1
- package/esm2020/lib/resources/types/action.mjs +16 -7
- package/esm2020/lib/resources/types/batch.mjs +135 -31
- package/esm2020/lib/resources/types/count.mjs +4 -4
- package/esm2020/lib/resources/types/entity-set.mjs +5 -7
- package/esm2020/lib/resources/types/entity.mjs +5 -5
- package/esm2020/lib/resources/types/function.mjs +16 -7
- package/esm2020/lib/resources/types/media.mjs +3 -3
- package/esm2020/lib/resources/types/metadata.mjs +3 -3
- package/esm2020/lib/resources/types/navigation-property.mjs +7 -9
- package/esm2020/lib/resources/types/options.mjs +1 -1
- package/esm2020/lib/resources/types/property.mjs +6 -10
- package/esm2020/lib/resources/types/reference.mjs +3 -3
- package/esm2020/lib/resources/types/singleton.mjs +4 -4
- package/esm2020/lib/resources/types/value.mjs +3 -3
- package/esm2020/lib/schema/parsers/edm.mjs +18 -17
- package/esm2020/lib/schema/parsers/enum-type.mjs +1 -1
- package/esm2020/lib/schema/parsers/structured-type.mjs +31 -19
- package/esm2020/lib/schema/structured-type.mjs +7 -1
- package/esm2020/lib/services/factory.mjs +3 -3
- package/esm2020/lib/settings.mjs +2 -2
- package/esm2020/lib/types.mjs +101 -32
- package/esm2020/lib/utils/enums.mjs +20 -20
- package/esm2020/lib/utils/strings.mjs +2 -2
- package/fesm2015/angular-odata.mjs +761 -406
- package/fesm2015/angular-odata.mjs.map +1 -1
- package/fesm2020/angular-odata.mjs +763 -404
- package/fesm2020/angular-odata.mjs.map +1 -1
- package/lib/api.d.ts +3 -3
- package/lib/client.d.ts +8 -7
- package/lib/index.d.ts +1 -1
- package/lib/loaders.d.ts +15 -0
- package/lib/models/collection.d.ts +21 -13
- package/lib/models/model.d.ts +10 -5
- package/lib/models/options.d.ts +20 -7
- package/lib/module.d.ts +12 -6
- package/lib/options.d.ts +6 -2
- package/lib/resources/path/handlers.d.ts +2 -2
- package/lib/resources/path/segments.d.ts +2 -2
- package/lib/resources/query/builder.d.ts +4 -1
- package/lib/resources/query/handlers.d.ts +3 -3
- package/lib/resources/query/options.d.ts +21 -21
- package/lib/resources/request.d.ts +4 -4
- package/lib/resources/resource.d.ts +4 -6
- package/lib/resources/types/action.d.ts +19 -2
- package/lib/resources/types/batch.d.ts +16 -5
- package/lib/resources/types/entity-set.d.ts +8 -8
- package/lib/resources/types/entity.d.ts +5 -5
- package/lib/resources/types/function.d.ts +17 -2
- package/lib/resources/types/navigation-property.d.ts +11 -11
- package/lib/resources/types/options.d.ts +0 -3
- package/lib/resources/types/property.d.ts +4 -4
- package/lib/resources/types/reference.d.ts +5 -5
- package/lib/resources/types/singleton.d.ts +5 -5
- package/lib/schema/parsers/edm.d.ts +2 -2
- package/lib/schema/parsers/enum-type.d.ts +2 -2
- package/lib/schema/parsers/structured-type.d.ts +8 -7
- package/lib/schema/structured-type.d.ts +3 -1
- package/lib/services/entity-set.d.ts +1 -6
- package/lib/settings.d.ts +3 -3
- package/lib/types.d.ts +46 -3
- package/lib/utils/enums.d.ts +18 -6
- package/lib/utils/strings.d.ts +4 -1
- package/package.json +1 -1
- package/esm2020/lib/tokens.mjs +0 -3
- package/lib/tokens.d.ts +0 -3
package/README.md
CHANGED
|
@@ -44,7 +44,9 @@ import { ODataModule } from 'angular-odata';
|
|
|
44
44
|
imports: [
|
|
45
45
|
...
|
|
46
46
|
ODataModule.forRoot({
|
|
47
|
-
|
|
47
|
+
config: {
|
|
48
|
+
serviceRootUrl: 'https://services.odata.org/V4/(S(4m0tuxtnhcfctl4gzem3gr10))/TripPinServiceRW/'
|
|
49
|
+
}
|
|
48
50
|
})
|
|
49
51
|
...
|
|
50
52
|
]
|
|
@@ -68,7 +70,7 @@ import { TripPinConfig, TripPinModule } from './trippin';
|
|
|
68
70
|
@NgModule({
|
|
69
71
|
imports: [
|
|
70
72
|
...
|
|
71
|
-
ODataModule.forRoot(TripPinConfig),
|
|
73
|
+
ODataModule.forRoot({ config: TripPinConfig }),
|
|
72
74
|
TripPinModule
|
|
73
75
|
]
|
|
74
76
|
...
|
package/esm2020/lib/api.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { ODataCollection, ODataModel } from './models/index';
|
|
|
7
7
|
import { ODataApiOptions } from './options';
|
|
8
8
|
import { ODataActionResource, ODataBatchResource, ODataEntityResource, ODataEntitySetResource, ODataFunctionResource, ODataMetadataResource, ODataNavigationPropertyResource, ODataPathSegments, ODataQueryOptions, ODataRequest, ODataResponse, ODataSingletonResource, } from './resources/index';
|
|
9
9
|
import { EDM_PARSERS, ODataSchema, } from './schema';
|
|
10
|
-
import { NONE_PARSER,
|
|
10
|
+
import { NONE_PARSER, PathSegment, } from './types';
|
|
11
11
|
/**
|
|
12
12
|
* Api abstraction for consuming OData services.
|
|
13
13
|
*/
|
|
@@ -61,20 +61,20 @@ export class ODataApi {
|
|
|
61
61
|
const segments = new ODataPathSegments(json.segments);
|
|
62
62
|
const query = new ODataQueryOptions(json.options);
|
|
63
63
|
switch (segments.last()?.name) {
|
|
64
|
-
case
|
|
64
|
+
case PathSegment.entitySet:
|
|
65
65
|
if (segments.last()?.hasKey()) {
|
|
66
66
|
return new ODataEntityResource(this, { segments, query });
|
|
67
67
|
}
|
|
68
68
|
else {
|
|
69
69
|
return new ODataEntitySetResource(this, { segments, query });
|
|
70
70
|
}
|
|
71
|
-
case
|
|
71
|
+
case PathSegment.navigationProperty:
|
|
72
72
|
return new ODataNavigationPropertyResource(this, { segments, query });
|
|
73
|
-
case
|
|
73
|
+
case PathSegment.singleton:
|
|
74
74
|
return new ODataSingletonResource(this, { segments, query });
|
|
75
|
-
case
|
|
75
|
+
case PathSegment.action:
|
|
76
76
|
return new ODataActionResource(this, { segments, query });
|
|
77
|
-
case
|
|
77
|
+
case PathSegment.function:
|
|
78
78
|
return new ODataFunctionResource(this, { segments, query });
|
|
79
79
|
}
|
|
80
80
|
throw new Error('No Resource for json');
|
|
@@ -370,4 +370,4 @@ export class ODataApi {
|
|
|
370
370
|
return options;
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUUvQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLFdBQVcsRUFJWCxXQUFXLEdBRVosTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUdMLFdBQVcsRUFFWCxnQkFBZ0IsR0FFakIsTUFBTSxTQUFTLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQW1CbkIsWUFBWSxNQUFpQjtRQWlPN0IsdUJBQXVCO1FBQ3ZCLFVBQVU7UUFDRixTQUFJLEdBZVI7WUFDRixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLElBQUksR0FBRyxFQUEwQztnQkFDdkQsVUFBVSxFQUFFLElBQUksR0FBRyxF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SSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBORVZFUiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFJbk1lbW9yeUNhY2hlIH0gZnJvbSAnLi9jYWNoZS9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24sIE9EYXRhTW9kZWwsIE9EYXRhTW9kZWxPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMvaW5kZXgnO1xuaW1wb3J0IHsgT0RhdGFBcGlPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7XG4gIE9EYXRhQWN0aW9uUmVzb3VyY2UsXG4gIE9EYXRhQmF0Y2hSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSxcbiAgT0RhdGFGdW5jdGlvblJlc291cmNlLFxuICBPRGF0YU1ldGFkYXRhUmVzb3VyY2UsXG4gIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhT3B0aW9ucyxcbiAgT0RhdGFQYXRoU2VnbWVudHMsXG4gIE9EYXRhUXVlcnlPcHRpb25zLFxuICBPRGF0YVJlcXVlc3QsXG4gIE9EYXRhUmVzb3VyY2UsXG4gIE9EYXRhUmVzcG9uc2UsXG4gIE9EYXRhU2VnbWVudCxcbiAgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSxcbn0gZnJvbSAnLi9yZXNvdXJjZXMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgRURNX1BBUlNFUlMsXG4gIE9EYXRhQ2FsbGFibGUsXG4gIE9EYXRhRW50aXR5U2V0LFxuICBPRGF0YUVudW1UeXBlLFxuICBPRGF0YVNjaGVtYSxcbiAgT0RhdGFTdHJ1Y3R1cmVkVHlwZSxcbn0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHsgT0RhdGFFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9lbnRpdHknO1xuaW1wb3J0IHtcbiAgQXBpQ29uZmlnLFxuICBBcGlPcHRpb25zLFxuICBOT05FX1BBUlNFUixcbiAgUGFyc2VyLFxuICBQYXRoU2VnbWVudE5hbWVzLFxuICBRdWVyeU9wdGlvbk5hbWVzLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBBcGkgYWJzdHJhY3Rpb24gZm9yIGNvbnN1bWluZyBPRGF0YSBzZXJ2aWNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE9EYXRhQXBpIHtcbiAgcmVxdWVzdGVyPzogKHJlcXVlc3Q6IE9EYXRhUmVxdWVzdDxhbnk+KSA9PiBPYnNlcnZhYmxlPGFueT47XG4gIHNlcnZpY2VSb290VXJsOiBzdHJpbmc7XG4gIG1ldGFkYXRhVXJsOiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGVmYXVsdDogYm9vbGVhbjtcbiAgY3JlYXRpb246IERhdGU7XG4gIC8vIE9wdGlvbnNcbiAgb3B0aW9uczogT0RhdGFBcGlPcHRpb25zO1xuICAvLyBDYWNoZVxuICBjYWNoZSE6IE9EYXRhQ2FjaGU7XG4gIC8vIEVycm9yIEhhbmRsZXJcbiAgZXJyb3JIYW5kbGVyPzogKGVycm9yOiBhbnksIGNhdWdodDogT2JzZXJ2YWJsZTxhbnk+KSA9PiBPYnNlcnZhYmxlPG5ldmVyPjtcbiAgLy8gQmFzZSBQYXJzZXJzXG4gIHBhcnNlcnM6IE1hcDxzdHJpbmcsIFBhcnNlcjxhbnk+PjtcbiAgLy8gU2NoZW1hc1xuICBzY2hlbWFzOiBPRGF0YVNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpQ29uZmlnKSB7XG4gICAgdGhpcy5zZXJ2aWNlUm9vdFVybCA9IGNvbmZpZy5zZXJ2aWNlUm9vdFVybDtcbiAgICBpZiAodGhpcy5zZXJ2aWNlUm9vdFVybC5pbmRleE9mKCc/JykgIT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlICdzZXJ2aWNlUm9vdFVybCcgc2hvdWxkIG5vdCBjb250YWluIHF1ZXJ5IHN0cmluZy4gUGxlYXNlIHVzZSAncGFyYW1zJyB0byBhZGQgZXh0cmEgcGFyYW1ldGVyc1wiXG4gICAgICApO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlUm9vdFVybC5lbmRzV2l0aCgnLycpKSB0aGlzLnNlcnZpY2VSb290VXJsICs9ICcvJztcbiAgICB0aGlzLm1ldGFkYXRhVXJsID0gYCR7dGhpcy5zZXJ2aWNlUm9vdFVybH0kbWV0YWRhdGFgO1xuICAgIHRoaXMubmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTjtcbiAgICB0aGlzLmRlZmF1bHQgPSBjb25maWcuZGVmYXVsdCB8fCBmYWxzZTtcbiAgICB0aGlzLmNyZWF0aW9uID0gY29uZmlnLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3IE9EYXRhQXBpT3B0aW9ucyhcbiAgICAgIE9iamVjdC5hc3NpZ24oPEFwaU9wdGlvbnM+eyB2ZXJzaW9uOiB0aGlzLnZlcnNpb24gfSwgY29uZmlnLm9wdGlvbnMgfHwge30pXG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGUgPSAoY29uZmlnLmNhY2hlIGFzIE9EYXRhQ2FjaGUpIHx8IG5ldyBPRGF0YUluTWVtb3J5Q2FjaGUoKTtcbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGNvbmZpZy5lcnJvckhhbmRsZXI7XG5cbiAgICB0aGlzLnBhcnNlcnMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGNvbmZpZy5wYXJzZXJzIHx8IEVETV9QQVJTRVJTKSk7XG5cbiAgICB0aGlzLnNjaGVtYXMgPSAoY29uZmlnLnNjaGVtYXMgfHwgW10pLm1hcChcbiAgICAgIChzY2hlbWEpID0+IG5ldyBPRGF0YVNjaGVtYShzY2hlbWEsIHRoaXMpXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpZ3VyZShcbiAgICBzZXR0aW5nczoge1xuICAgICAgcmVxdWVzdGVyPzogKHJlcXVlc3Q6IE9EYXRhUmVxdWVzdDxhbnk+KSA9PiBPYnNlcnZhYmxlPGFueT47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIHRoaXMucmVxdWVzdGVyID0gc2V0dGluZ3MucmVxdWVzdGVyO1xuICAgIHRoaXMuc2NoZW1hcy5mb3JFYWNoKChzY2hlbWEpID0+IHtcbiAgICAgIHNjaGVtYS5jb25maWd1cmUoe1xuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMucGFyc2VyT3B0aW9ucyxcbiAgICAgICAgcGFyc2VyRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5wYXJzZXJGb3JUeXBlKHR5cGUpLFxuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmcm9tSlNPTjxQLCBSPihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KTogT0RhdGFBY3Rpb25SZXNvdXJjZTxQLCBSPiB8IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPjtcbiAgZnJvbUpTT048RT4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6XG4gICAgfCBPRGF0YUVudGl0eVJlc291cmNlPEU+XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPEU+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPEU+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPEU+O1xuICBmcm9tSlNPTihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBuZXcgT0RhdGFQYXRoU2VnbWVudHMoanNvbi5zZWdtZW50cyk7XG4gICAgY29uc3QgcXVlcnkgPSBuZXcgT0RhdGFRdWVyeU9wdGlvbnMoanNvbi5vcHRpb25zKTtcbiAgICBzd2l0Y2ggKHNlZ21lbnRzLmxhc3QoKT8ubmFtZSBhcyBQYXRoU2VnbWVudE5hbWVzKSB7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZW50aXR5U2V0OlxuICAgICAgICBpZiAoc2VnbWVudHMubGFzdCgpPy5oYXNLZXkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlSZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5U2V0UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5uYXZpZ2F0aW9uUHJvcGVydHk6XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5zaW5nbGV0b246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5hY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFBY3Rpb25SZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnROYW1lcy5mdW5jdGlvbjpcbiAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gUmVzb3VyY2UgZm9yIGpzb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIG1ldGFkYXRhIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YU1ldGFkYXRhUmVzb3VyY2VcbiAgICovXG4gIG1ldGFkYXRhKCk6IE9EYXRhTWV0YWRhdGFSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhTWV0YWRhdGFSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgYmF0Y2ggcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIE9EYXRhQmF0Y2hSZXNvdXJjZVxuICAgKi9cbiAgYmF0Y2goKTogT0RhdGFCYXRjaFJlc291cmNlIHtcbiAgICByZXR1cm4gT0RhdGFCYXRjaFJlc291cmNlLmZhY3RvcnkodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBzaW5nbGV0b24gcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwYXRoIE5hbWUgb2YgdGhlIHNpbmdsZXRvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc2luZ2xldG9uPFQ+KHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGVudGl0eVNldCA9IHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShwYXRoKTtcbiAgICBjb25zdCBzY2hlbWEgPVxuICAgICAgZW50aXR5U2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4oZW50aXR5U2V0LmVudGl0eVR5cGUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBPRGF0YVNpbmdsZXRvblJlc291cmNlLmZhY3Rvcnk8VD4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW4gZW50aXR5IHNldCByZXNvdXJjZS5cbiAgICogQHBhcmFtIHBhdGggTmFtZSBvZiB0aGUgZW50aXR5IHNldFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZW50aXR5U2V0PFQ+KHBhdGg6IHN0cmluZyk6IE9EYXRhRW50aXR5U2V0UmVzb3VyY2U8VD4ge1xuICAgIGNvbnN0IGVudGl0eVNldCA9IHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShwYXRoKTtcbiAgICBjb25zdCBzY2hlbWEgPVxuICAgICAgZW50aXR5U2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4oZW50aXR5U2V0LmVudGl0eVR5cGUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBPRGF0YUVudGl0eVNldFJlc291cmNlLmZhY3Rvcnk8VD4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5ib3VuZCBBY3Rpb25cbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoP1xuICAgKiBAcmV0dXJucyBPRGF0YUFjdGlvblJlc291cmNlXG4gICAqL1xuICBhY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKTogT0RhdGFBY3Rpb25SZXNvdXJjZTxQLCBSPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgpO1xuICAgIHJldHVybiBPRGF0YUFjdGlvblJlc291cmNlLmZhY3Rvcnk8UCwgUj4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5ib3VuZCBGdW5jdGlvblxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGg/XG4gICAqIEByZXR1cm5zIE9EYXRhRnVuY3Rpb25SZXNvdXJjZVxuICAgKi9cbiAgZnVuY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKTogT0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmZpbmRDYWxsYWJsZUZvclR5cGU8Uj4ocGF0aCk7XG4gICAgcmV0dXJuIE9EYXRhRnVuY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLy9yZXF1ZXN0KHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXF1ZXN0PFQ+KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgYm9keT86IGFueTtcbiAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICByZXNwb25zZVR5cGU/OlxuICAgICAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgfCAnYmxvYidcbiAgICAgICAgfCAnanNvbidcbiAgICAgICAgfCAndGV4dCdcbiAgICAgICAgfCAndmFsdWUnXG4gICAgICAgIHwgJ3Byb3BlcnR5J1xuICAgICAgICB8ICdlbnRpdHknXG4gICAgICAgIHwgJ2VudGl0aWVzJztcbiAgICAgIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHJlcSA9IE9EYXRhUmVxdWVzdC5mYWN0b3J5KHRoaXMsIG1ldGhvZCwgcmVzb3VyY2UsIHtcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGV0YWc6IG9wdGlvbnMuZXRhZyxcbiAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICByZXNwb25zZVR5cGU6IG9wdGlvbnMucmVzcG9uc2VUeXBlLFxuICAgICAgb2JzZXJ2ZTogKG9wdGlvbnMub2JzZXJ2ZSA9PT0gJ2V2ZW50cycgPyAnZXZlbnRzJyA6ICdyZXNwb25zZScpIGFzXG4gICAgICAgIHwgJ2V2ZW50cydcbiAgICAgICAgfCAncmVzcG9uc2UnLFxuICAgICAgd2l0aENvdW50OiBvcHRpb25zLndpdGhDb3VudCxcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM6IG9wdGlvbnMuYm9keVF1ZXJ5T3B0aW9ucyxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBvcHRpb25zLnJlcG9ydFByb2dyZXNzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnMuZmV0Y2hQb2xpY3ksXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzLFxuICAgIH0pO1xuXG4gICAgbGV0IHJlcyQgPSB0aGlzLnJlcXVlc3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5yZXF1ZXN0ZXIocmVxKSA6IE5FVkVSO1xuXG4gICAgcmVzJCA9IHJlcyQucGlwZShcbiAgICAgIG1hcCgocmVzOiBIdHRwRXZlbnQ8YW55PikgPT5cbiAgICAgICAgcmVzLnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2VcbiAgICAgICAgICA/IE9EYXRhUmVzcG9uc2UuZnJvbUh0dHBSZXNwb25zZTxhbnk+KHJlcSwgcmVzKVxuICAgICAgICAgIDogcmVzXG4gICAgICApXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmVzJCA9IHJlcyQucGlwZShjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyKSk7XG5cbiAgICBpZiAob3B0aW9ucy5vYnNlcnZlID09PSAnZXZlbnRzJykge1xuICAgICAgcmV0dXJuIHJlcyQ7XG4gICAgfVxuXG4gICAgcmVzJCA9IHRoaXMuY2FjaGUuaGFuZGxlUmVxdWVzdChyZXEsIHJlcyQpO1xuXG4gICAgc3dpdGNoIChvcHRpb25zLm9ic2VydmUgfHwgJ2JvZHknKSB7XG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2VudGl0aWVzJzpcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5lbnRpdGllcygpKSk7XG4gICAgICAgICAgY2FzZSAnZW50aXR5JzpcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5lbnRpdHkoKSkpO1xuICAgICAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5wcm9wZXJ0eSgpKSk7XG4gICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgcmV0dXJuIHJlcyQucGlwZShtYXAoKHJlczogT0RhdGFSZXNwb25zZTxUPikgPT4gcmVzLnZhbHVlKCkgYXMgVCkpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBPdGhlciByZXNwb25zZVR5cGVzIChhcnJheWJ1ZmZlciwgYmxvYiwganNvbiwgdGV4dCkgcmV0dXJuIGJvZHlcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5ib2R5KSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3Jlc3BvbnNlJzpcbiAgICAgICAgLy8gVGhlIHJlc3BvbnNlIHN0cmVhbSB3YXMgcmVxdWVzdGVkIGRpcmVjdGx5LCBzbyByZXR1cm4gaXQuXG4gICAgICAgIHJldHVybiByZXMkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBuZXcgZnV0dXJlIG9ic2VydmUgdHlwZXMgYmVpbmcgYWRkZWQuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtvcHRpb25zLm9ic2VydmV9fWBcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyMgcmVnaW9uIEZpbmQgYnkgVHlwZVxuICAvLyBNZW1vaXplXG4gIHByaXZhdGUgbWVtbzoge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBzdHJ1Y3R1cmVkOiBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+O1xuICAgICAgY2FsbGFibGU6IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBlbnRpdHlTZXQ6IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPjtcbiAgICAgIHBhcnNlcjogTWFwPHN0cmluZywgUGFyc2VyPGFueT4+O1xuICAgICAgb3B0aW9uczogTWFwPHN0cmluZywgT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgfTtcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBzdHJ1Y3R1cmVkOiBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+O1xuICAgICAgY2FsbGFibGU6IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBlbnRpdHlTZXQ6IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPjtcbiAgICB9O1xuICB9ID0ge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBzdHJ1Y3R1cmVkOiBuZXcgTWFwPHN0cmluZywgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpLFxuICAgICAgY2FsbGFibGU6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBlbnRpdHlTZXQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIHBhcnNlcjogbmV3IE1hcDxzdHJpbmcsIFBhcnNlcjxhbnk+PigpLFxuICAgICAgb3B0aW9uczogbmV3IE1hcDxzdHJpbmcsIE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgfSxcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBzdHJ1Y3R1cmVkOiBuZXcgTWFwPHN0cmluZywgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpLFxuICAgICAgY2FsbGFibGU6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBlbnRpdHlTZXQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZD4oKSxcbiAgICB9LFxuICB9O1xuXG4gIHByaXZhdGUgZmluZFNjaGVtYUZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NoZW1hcyA9IHRoaXMuc2NoZW1hcy5maWx0ZXIoKHMpID0+IHMuaXNOYW1lc3BhY2VPZih0eXBlKSk7XG4gICAgaWYgKHNjaGVtYXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHNjaGVtYXNbMF07XG4gICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgIC5zb3J0KChzMSwgczIpID0+IHMxLm5hbWVzcGFjZS5sZW5ndGggLSBzMi5uYW1lc3BhY2UubGVuZ3RoKVxuICAgICAgLnBvcCgpO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubWVtby5mb3JUeXBlLmVudW0uaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW51bS5nZXQodHlwZSkgYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW51bVR5cGUgPSB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIHRoaXMubWVtby5mb3JUeXBlLmVudW0uc2V0KHR5cGUsIGVudW1UeXBlKTtcbiAgICByZXR1cm4gZW51bVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZC5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkLmdldCh0eXBlKSBhc1xuICAgICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0cnVjdHVyZWRUeXBlID1cbiAgICAgIHRoaXMuZmluZFNjaGVtYUZvclR5cGUodHlwZSk/LmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZC5zZXQodHlwZSwgc3RydWN0dXJlZFR5cGUpO1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuY2FsbGFibGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZS5nZXQoa2V5KSBhc1xuICAgICAgICB8IE9EYXRhQ2FsbGFibGU8VD5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbGxhYmxlID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZENhbGxhYmxlRm9yVHlwZTxUPihcbiAgICAgIHR5cGUsXG4gICAgICBiaW5kaW5nVHlwZVxuICAgICk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuY2FsbGFibGUuc2V0KGtleSwgY2FsbGFibGUpO1xuICAgIHJldHVybiBjYWxsYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0Lmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldC5nZXQodHlwZSkgYXNcbiAgICAgICAgfCBPRGF0YUVudGl0eVNldFxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW50aXR5U2V0ID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudGl0eVNldEZvclR5cGUodHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LnNldCh0eXBlLCBlbnRpdHlTZXQpO1xuICAgIHJldHVybiBlbnRpdHlTZXQ7XG4gIH1cblxuICBwdWJsaWMgZmluZE1vZGVsRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/Lm1vZGVsO1xuICB9XG5cbiAgcHVibGljIG1vZGVsRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgTW9kZWwgPSB0aGlzLmZpbmRNb2RlbEZvclR5cGUodHlwZSk7XG4gICAgaWYgKE1vZGVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEJ1aWxkIEFkLWhvYyBtb2RlbFxuICAgICAgbGV0IHNjaGVtYSA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpO1xuICAgICAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gc2NoZW1hIGZvciAke3R5cGV9YCk7XG4gICAgICBNb2RlbCA9IGNsYXNzIGV4dGVuZHMgT0RhdGFNb2RlbDxhbnk+IHt9IGFzIHR5cGVvZiBPRGF0YU1vZGVsO1xuICAgICAgLy8gQnVpbGQgTWV0YVxuICAgICAgTW9kZWwuYnVpbGRNZXRhKHsgc2NoZW1hIH0pO1xuICAgICAgLy8gQ29uZmlndXJlXG4gICAgICBNb2RlbC5tZXRhLmNvbmZpZ3VyZSh7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucy5wYXJzZXJPcHRpb25zLFxuICAgICAgICBwYXJzZXJGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB0aGlzLnBhcnNlckZvclR5cGUodHlwZSksXG4gICAgICAgIGZpbmRPcHRpb25zRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5maW5kT3B0aW9uc0ZvclR5cGUodHlwZSksXG4gICAgICB9KTtcbiAgICAgIC8vIFN0b3JlIE5ldyBNb2RlbCBmb3IgbmV4dCB0aW1lXG4gICAgICBzY2hlbWEubW9kZWwgPSBNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIE1vZGVsO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/LmNvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IENvbGxlY3Rpb24gPSB0aGlzLmZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlKTtcbiAgICBpZiAoQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKCcnKTtcbiAgICAgIENvbGxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxcbiAgICAgICAgYW55LFxuICAgICAgICBPRGF0YU1vZGVsPGFueT5cbiAgICAgID4ge30gYXMgdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICAgIENvbGxlY3Rpb24ubW9kZWwgPSB0aGlzLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICAgIC8vIFN0b3JlIE5ldyBDb2xsZWN0aW9uIGZvciBuZXh0IHRpbWVcbiAgICAgIHNjaGVtYS5jb2xsZWN0aW9uID0gQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIENvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXQuaGFzKGVudGl0eVR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LmdldChlbnRpdHlUeXBlKSBhc1xuICAgICAgICB8IE9EYXRhRW50aXR5U2V0XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0eVNldHNdLFxuICAgICAgICA8T0RhdGFFbnRpdHlTZXRbXT5bXVxuICAgICAgKVxuICAgICAgLmZpbmQoKGUpID0+IGUuZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LnNldChlbnRpdHlUeXBlLCBlbnRpdHlTZXQpO1xuICAgIHJldHVybiBlbnRpdHlTZXQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5lbnVtLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuZW51bS5nZXQobmFtZSkgYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW51bVR5cGUgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudW1zXSxcbiAgICAgICAgPE9EYXRhRW51bVR5cGU8VD5bXT5bXVxuICAgICAgKVxuICAgICAgLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgdGhpcy5tZW1vLmJ5TmFtZS5lbnVtLnNldChuYW1lLCBlbnVtVHlwZSk7XG4gICAgcmV0dXJuIGVudW1UeXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuc3RydWN0dXJlZC5nZXQobmFtZSkgYXNcbiAgICAgICAgfCBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzdHJ1Y3R1cmVkVHlwZSA9IHRoaXMuc2NoZW1hc1xuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXRpZXNdLFxuICAgICAgICA8T0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPltdPltdXG4gICAgICApXG4gICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQuc2V0KG5hbWUsIHN0cnVjdHVyZWRUeXBlKTtcbiAgICByZXR1cm4gc3RydWN0dXJlZFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZENhbGxhYmxlQnlOYW1lPFQ+KG5hbWU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7bmFtZX1gIDogbmFtZTtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuZ2V0KGtleSkgYXMgT0RhdGFDYWxsYWJsZTxUPiB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2FsbGFibGUgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmNhbGxhYmxlc10sXG4gICAgICAgIDxPRGF0YUNhbGxhYmxlPFQ+W10+W11cbiAgICAgIClcbiAgICAgIC5maW5kKFxuICAgICAgICAoYykgPT5cbiAgICAgICAgICBjLm5hbWUgPT09IG5hbWUgJiZcbiAgICAgICAgICAoYmluZGluZ1R5cGUgPT09IHVuZGVmaW5lZCB8fCBjLmJpbmRpbmcoKT8udHlwZSA9PT0gYmluZGluZ1R5cGUpXG4gICAgICApO1xuICAgIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuc2V0KGtleSwgY2FsbGFibGUpO1xuICAgIHJldHVybiBjYWxsYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0QnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldC5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldC5nZXQobmFtZSkgYXMgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuc2NoZW1hc1xuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgIDxPRGF0YUVudGl0eVNldFtdPltdXG4gICAgICApXG4gICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICB0aGlzLm1lbW8uYnlOYW1lLmVudGl0eVNldC5zZXQobmFtZSwgc2NoZW1hKTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHVibGljIGZpbmRNb2RlbEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8YW55PihuYW1lKT8ubW9kZWwgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhTW9kZWxcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxhbnk+KG5hbWUpPy5jb2xsZWN0aW9uIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUNvbGxlY3Rpb25cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTZXJ2aWNlQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUobmFtZSk/LnNlcnZpY2UgYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhRW50aXR5U2VydmljZVxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VyRm9yVHlwZTxUPih0eXBlOiBzdHJpbmcsIGJpbmRpbmdUeXBlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCA/IGAke2JpbmRpbmdUeXBlfS8ke3R5cGV9YCA6IHR5cGU7XG4gICAgaWYgKHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5nZXQoa2V5KSBhcyBQYXJzZXI8VD47XG4gICAgfVxuICAgIC8vIE5vbmUgUGFyc2VyIGJ5IGRlZmF1bHRcbiAgICBsZXQgcGFyc2VyOiBQYXJzZXI8VD4gPSBOT05FX1BBUlNFUjtcbiAgICBpZiAodGhpcy5wYXJzZXJzLmhhcyh0eXBlKSkge1xuICAgICAgLy8gRWRtLCBCYXNlIFBhcnNlcnNcbiAgICAgIHBhcnNlciA9IHRoaXMucGFyc2Vycy5nZXQodHlwZSkgYXMgUGFyc2VyPFQ+O1xuICAgIH0gZWxzZSBpZiAoIXR5cGUuc3RhcnRzV2l0aCgnRWRtLicpKSB7XG4gICAgICAvLyBFbnVtVHlwZSwgQ29tcGxleFR5cGUgYW5kIEVudGl0eVR5cGUgUGFyc2Vyc1xuICAgICAgbGV0IHZhbHVlID1cbiAgICAgICAgdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGUsIGJpbmRpbmdUeXBlKSB8fFxuICAgICAgICB0aGlzLmZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZSkgfHxcbiAgICAgICAgdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgICAgcGFyc2VyID0gdmFsdWU/LnBhcnNlciBhcyBQYXJzZXI8VD47XG4gICAgfVxuICAgIC8vIFNldCBQYXJzZXIgZm9yIG5leHQgdGltZVxuICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlci5zZXQoa2V5LCBwYXJzZXIpO1xuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBwdWJsaWMgZmluZE9wdGlvbnNGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIC8vIFN0cnVjdXRyZWQgT3B0aW9uc1xuICAgIGlmICh0aGlzLm1lbW8uZm9yVHlwZS5vcHRpb25zLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuZ2V0KHR5cGUpIGFzXG4gICAgICAgIHwgT0RhdGFNb2RlbE9wdGlvbnM8VD5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0ID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzdD8ubW9kZWw/Lm1ldGE7XG4gICAgLy8gU2V0IE9wdGlvbnMgZm9yIG5leHQgdGltZVxuICAgIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuc2V0KHR5cGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59XG4iXX0=
|
|
373
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUUvQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLFdBQVcsRUFJWCxXQUFXLEdBRVosTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUlMLFdBQVcsRUFFWCxXQUFXLEdBRVosTUFBTSxTQUFTLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQW1CbkIsWUFBWSxNQUFpQjtRQWlPN0IsdUJBQXVCO1FBQ3ZCLFVBQVU7UUFDRixTQUFJLEdBZVI7WUFDRixPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLElBQUksR0FBRyxFQUEwQztnQkFDdkQsVUFBVSxFQUFFLElBQUksR0FBRyxFQUFn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TyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE5FVkVSLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUNhY2hlLCBPRGF0YUluTWVtb3J5Q2FjaGUgfSBmcm9tICcuL2NhY2hlL2luZGV4JztcbmltcG9ydCB7IERFRkFVTFRfVkVSU0lPTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhQ29sbGVjdGlvbiwgT0RhdGFNb2RlbCwgT0RhdGFNb2RlbE9wdGlvbnMgfSBmcm9tICcuL21vZGVscy9pbmRleCc7XG5pbXBvcnQgeyBPRGF0YUFwaU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHtcbiAgT0RhdGFBY3Rpb25SZXNvdXJjZSxcbiAgT0RhdGFCYXRjaFJlc291cmNlLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YUVudGl0eVNldFJlc291cmNlLFxuICBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UsXG4gIE9EYXRhTWV0YWRhdGFSZXNvdXJjZSxcbiAgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFPcHRpb25zLFxuICBPRGF0YVBhdGhTZWdtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIE9EYXRhUmVxdWVzdCxcbiAgT0RhdGFSZXNvdXJjZSxcbiAgT0RhdGFSZXNwb25zZSxcbiAgT0RhdGFTZWdtZW50LFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQge1xuICBFRE1fUEFSU0VSUyxcbiAgT0RhdGFDYWxsYWJsZSxcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhRW51bVR5cGUsXG4gIE9EYXRhU2NoZW1hLFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlLFxufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2VudGl0eSc7XG5pbXBvcnQge1xuICBBcGlDb25maWcsXG4gIEFwaU9wdGlvbnMsXG4gIEVkbVR5cGUsXG4gIE5PTkVfUEFSU0VSLFxuICBQYXJzZXIsXG4gIFBhdGhTZWdtZW50LFxuICBRdWVyeU9wdGlvbixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogQXBpIGFic3RyYWN0aW9uIGZvciBjb25zdW1pbmcgT0RhdGEgc2VydmljZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBPRGF0YUFwaSB7XG4gIHJlcXVlc3Rlcj86IChyZXF1ZXN0OiBPRGF0YVJlcXVlc3Q8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICBzZXJ2aWNlUm9vdFVybDogc3RyaW5nO1xuICBtZXRhZGF0YVVybDogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRlZmF1bHQ6IGJvb2xlYW47XG4gIGNyZWF0aW9uOiBEYXRlO1xuICAvLyBPcHRpb25zXG4gIG9wdGlvbnM6IE9EYXRhQXBpT3B0aW9ucztcbiAgLy8gQ2FjaGVcbiAgY2FjaGUhOiBPRGF0YUNhY2hlO1xuICAvLyBFcnJvciBIYW5kbGVyXG4gIGVycm9ySGFuZGxlcj86IChlcnJvcjogYW55LCBjYXVnaHQ6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxuZXZlcj47XG4gIC8vIEJhc2UgUGFyc2Vyc1xuICBwYXJzZXJzOiBNYXA8c3RyaW5nLCBQYXJzZXI8YW55Pj47XG4gIC8vIFNjaGVtYXNcbiAgc2NoZW1hczogT0RhdGFTY2hlbWFbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFwaUNvbmZpZykge1xuICAgIHRoaXMuc2VydmljZVJvb3RVcmwgPSBjb25maWcuc2VydmljZVJvb3RVcmw7XG4gICAgaWYgKHRoaXMuc2VydmljZVJvb3RVcmwuaW5kZXhPZignPycpICE9IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSAnc2VydmljZVJvb3RVcmwnIHNob3VsZCBub3QgY29udGFpbiBxdWVyeSBzdHJpbmcuIFBsZWFzZSB1c2UgJ3BhcmFtcycgdG8gYWRkIGV4dHJhIHBhcmFtZXRlcnNcIlxuICAgICAgKTtcbiAgICBpZiAoIXRoaXMuc2VydmljZVJvb3RVcmwuZW5kc1dpdGgoJy8nKSkgdGhpcy5zZXJ2aWNlUm9vdFVybCArPSAnLyc7XG4gICAgdGhpcy5tZXRhZGF0YVVybCA9IGAke3RoaXMuc2VydmljZVJvb3RVcmx9JG1ldGFkYXRhYDtcbiAgICB0aGlzLm5hbWUgPSBjb25maWcubmFtZTtcbiAgICB0aGlzLnZlcnNpb24gPSBjb25maWcudmVyc2lvbiB8fCBERUZBVUxUX1ZFUlNJT047XG4gICAgdGhpcy5kZWZhdWx0ID0gY29uZmlnLmRlZmF1bHQgfHwgZmFsc2U7XG4gICAgdGhpcy5jcmVhdGlvbiA9IGNvbmZpZy5jcmVhdGlvbiB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMub3B0aW9ucyA9IG5ldyBPRGF0YUFwaU9wdGlvbnMoXG4gICAgICBPYmplY3QuYXNzaWduKDxBcGlPcHRpb25zPnsgdmVyc2lvbjogdGhpcy52ZXJzaW9uIH0sIGNvbmZpZy5vcHRpb25zIHx8IHt9KVxuICAgICk7XG5cbiAgICB0aGlzLmNhY2hlID0gKGNvbmZpZy5jYWNoZSBhcyBPRGF0YUNhY2hlKSB8fCBuZXcgT0RhdGFJbk1lbW9yeUNhY2hlKCk7XG4gICAgdGhpcy5lcnJvckhhbmRsZXIgPSBjb25maWcuZXJyb3JIYW5kbGVyO1xuXG4gICAgdGhpcy5wYXJzZXJzID0gbmV3IE1hcChPYmplY3QuZW50cmllcyhjb25maWcucGFyc2VycyB8fCBFRE1fUEFSU0VSUykpO1xuXG4gICAgdGhpcy5zY2hlbWFzID0gKGNvbmZpZy5zY2hlbWFzIHx8IFtdKS5tYXAoXG4gICAgICAoc2NoZW1hKSA9PiBuZXcgT0RhdGFTY2hlbWEoc2NoZW1hLCB0aGlzKVxuICAgICk7XG4gIH1cblxuICBjb25maWd1cmUoXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHJlcXVlc3Rlcj86IChyZXF1ZXN0OiBPRGF0YVJlcXVlc3Q8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICAgIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLnJlcXVlc3RlciA9IHNldHRpbmdzLnJlcXVlc3RlcjtcbiAgICB0aGlzLnNjaGVtYXMuZm9yRWFjaCgoc2NoZW1hKSA9PiB7XG4gICAgICBzY2hlbWEuY29uZmlndXJlKHtcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLnBhcnNlck9wdGlvbnMsXG4gICAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcgfCBFZG1UeXBlKSA9PiB0aGlzLnBhcnNlckZvclR5cGUodHlwZSksXG4gICAgICAgIGZpbmRPcHRpb25zRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5maW5kT3B0aW9uc0ZvclR5cGUodHlwZSksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZyb21KU09OPFAsIFI+KGpzb246IHtcbiAgICBzZWdtZW50czogT0RhdGFTZWdtZW50W107XG4gICAgb3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIH0pOiBPRGF0YUFjdGlvblJlc291cmNlPFAsIFI+IHwgT0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+O1xuICBmcm9tSlNPTjxFPihqc29uOiB7XG4gICAgc2VnbWVudHM6IE9EYXRhU2VnbWVudFtdO1xuICAgIG9wdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9KTpcbiAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8RT5cbiAgICB8IE9EYXRhRW50aXR5U2V0UmVzb3VyY2U8RT5cbiAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8RT5cbiAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8RT47XG4gIGZyb21KU09OKGpzb246IHtcbiAgICBzZWdtZW50czogT0RhdGFTZWdtZW50W107XG4gICAgb3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIH0pIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IG5ldyBPRGF0YVBhdGhTZWdtZW50cyhqc29uLnNlZ21lbnRzKTtcbiAgICBjb25zdCBxdWVyeSA9IG5ldyBPRGF0YVF1ZXJ5T3B0aW9ucyhqc29uLm9wdGlvbnMpO1xuICAgIHN3aXRjaCAoc2VnbWVudHMubGFzdCgpPy5uYW1lIGFzIFBhdGhTZWdtZW50KSB7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50LmVudGl0eVNldDpcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxhc3QoKT8uaGFzS2V5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0eVNldFJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG4gICAgICBjYXNlIFBhdGhTZWdtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eTpcbiAgICAgICAgcmV0dXJuIG5ldyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgICAgY2FzZSBQYXRoU2VnbWVudC5zaW5nbGV0b246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICAgIGNhc2UgUGF0aFNlZ21lbnQuYWN0aW9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhQWN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50LmZ1bmN0aW9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhRnVuY3Rpb25SZXNvdXJjZSh0aGlzLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBSZXNvdXJjZSBmb3IganNvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgbWV0YWRhdGEgcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIE9EYXRhTWV0YWRhdGFSZXNvdXJjZVxuICAgKi9cbiAgbWV0YWRhdGEoKTogT0RhdGFNZXRhZGF0YVJlc291cmNlIHtcbiAgICByZXR1cm4gT0RhdGFNZXRhZGF0YVJlc291cmNlLmZhY3RvcnkodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBiYXRjaCByZXNvdXJjZS5cbiAgICogQHJldHVybnMgT0RhdGFCYXRjaFJlc291cmNlXG4gICAqL1xuICBiYXRjaCgpOiBPRGF0YUJhdGNoUmVzb3VyY2Uge1xuICAgIHJldHVybiBPRGF0YUJhdGNoUmVzb3VyY2UuZmFjdG9yeSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHNpbmdsZXRvbiByZXNvdXJjZS5cbiAgICogQHBhcmFtIHBhdGggTmFtZSBvZiB0aGUgc2luZ2xldG9uXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzaW5nbGV0b248VD4ocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgZW50aXR5U2V0ID0gdGhpcy5maW5kRW50aXR5U2V0QnlOYW1lKHBhdGgpO1xuICAgIGNvbnN0IHNjaGVtYSA9XG4gICAgICBlbnRpdHlTZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPihlbnRpdHlTZXQuZW50aXR5VHlwZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9EYXRhU2luZ2xldG9uUmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBlbnRpdHkgc2V0IHJlc291cmNlLlxuICAgKiBAcGFyYW0gcGF0aCBOYW1lIG9mIHRoZSBlbnRpdHkgc2V0XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBlbnRpdHlTZXQ8VD4ocGF0aDogc3RyaW5nKTogT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxUPiB7XG4gICAgY29uc3QgZW50aXR5U2V0ID0gdGhpcy5maW5kRW50aXR5U2V0QnlOYW1lKHBhdGgpO1xuICAgIGNvbnN0IHNjaGVtYSA9XG4gICAgICBlbnRpdHlTZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPihlbnRpdHlTZXQuZW50aXR5VHlwZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJvdW5kIEFjdGlvblxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGg/XG4gICAqIEByZXR1cm5zIE9EYXRhQWN0aW9uUmVzb3VyY2VcbiAgICovXG4gIGFjdGlvbjxQLCBSPihwYXRoOiBzdHJpbmcpOiBPRGF0YUFjdGlvblJlc291cmNlPFAsIFI+IHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmZpbmRDYWxsYWJsZUZvclR5cGU8Uj4ocGF0aCk7XG4gICAgcmV0dXJuIE9EYXRhQWN0aW9uUmVzb3VyY2UuZmFjdG9yeTxQLCBSPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJvdW5kIEZ1bmN0aW9uXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aD9cbiAgICogQHJldHVybnMgT0RhdGFGdW5jdGlvblJlc291cmNlXG4gICAqL1xuICBmdW5jdGlvbjxQLCBSPihwYXRoOiBzdHJpbmcpOiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZmluZENhbGxhYmxlRm9yVHlwZTxSPihwYXRoKTtcbiAgICByZXR1cm4gT0RhdGFGdW5jdGlvblJlc291cmNlLmZhY3Rvcnk8UCwgUj4odGhpcywgeyBwYXRoLCBzY2hlbWEgfSk7XG4gIH1cblxuICAvL3JlcXVlc3QocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gIHJlcXVlc3Q8VD4oXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBib2R5PzogYW55O1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICAgIHwgJ2FycmF5YnVmZmVyJ1xuICAgICAgICB8ICdibG9iJ1xuICAgICAgICB8ICdqc29uJ1xuICAgICAgICB8ICd0ZXh0J1xuICAgICAgICB8ICd2YWx1ZSdcbiAgICAgICAgfCAncHJvcGVydHknXG4gICAgICAgIHwgJ2VudGl0eSdcbiAgICAgICAgfCAnZW50aXRpZXMnO1xuICAgICAgb2JzZXJ2ZT86ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHJlcSA9IE9EYXRhUmVxdWVzdC5mYWN0b3J5KHRoaXMsIG1ldGhvZCwgcmVzb3VyY2UsIHtcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGV0YWc6IG9wdGlvbnMuZXRhZyxcbiAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICByZXNwb25zZVR5cGU6IG9wdGlvbnMucmVzcG9uc2VUeXBlLFxuICAgICAgb2JzZXJ2ZTogKG9wdGlvbnMub2JzZXJ2ZSA9PT0gJ2V2ZW50cycgPyAnZXZlbnRzJyA6ICdyZXNwb25zZScpIGFzXG4gICAgICAgIHwgJ2V2ZW50cydcbiAgICAgICAgfCAncmVzcG9uc2UnLFxuICAgICAgd2l0aENvdW50OiBvcHRpb25zLndpdGhDb3VudCxcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM6IG9wdGlvbnMuYm9keVF1ZXJ5T3B0aW9ucyxcbiAgICAgIHJlcG9ydFByb2dyZXNzOiBvcHRpb25zLnJlcG9ydFByb2dyZXNzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnMuZmV0Y2hQb2xpY3ksXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzLFxuICAgIH0pO1xuXG4gICAgbGV0IHJlcyQgPSB0aGlzLnJlcXVlc3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5yZXF1ZXN0ZXIocmVxKSA6IE5FVkVSO1xuXG4gICAgcmVzJCA9IHJlcyQucGlwZShcbiAgICAgIG1hcCgocmVzOiBIdHRwRXZlbnQ8YW55PikgPT5cbiAgICAgICAgcmVzLnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2VcbiAgICAgICAgICA/IE9EYXRhUmVzcG9uc2UuZnJvbUh0dHBSZXNwb25zZTxhbnk+KHJlcSwgcmVzKVxuICAgICAgICAgIDogcmVzXG4gICAgICApXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmVzJCA9IHJlcyQucGlwZShjYXRjaEVycm9yKHRoaXMuZXJyb3JIYW5kbGVyKSk7XG5cbiAgICBpZiAob3B0aW9ucy5vYnNlcnZlID09PSAnZXZlbnRzJykge1xuICAgICAgcmV0dXJuIHJlcyQ7XG4gICAgfVxuXG4gICAgcmVzJCA9IHRoaXMuY2FjaGUuaGFuZGxlUmVxdWVzdChyZXEsIHJlcyQpO1xuXG4gICAgc3dpdGNoIChvcHRpb25zLm9ic2VydmUgfHwgJ2JvZHknKSB7XG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgICAgc3dpdGNoIChvcHRpb25zLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2VudGl0aWVzJzpcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5lbnRpdGllcygpKSk7XG4gICAgICAgICAgY2FzZSAnZW50aXR5JzpcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5lbnRpdHkoKSkpO1xuICAgICAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5wcm9wZXJ0eSgpKSk7XG4gICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgcmV0dXJuIHJlcyQucGlwZShtYXAoKHJlczogT0RhdGFSZXNwb25zZTxUPikgPT4gcmVzLnZhbHVlKCkgYXMgVCkpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBPdGhlciByZXNwb25zZVR5cGVzIChhcnJheWJ1ZmZlciwgYmxvYiwganNvbiwgdGV4dCkgcmV0dXJuIGJvZHlcbiAgICAgICAgICAgIHJldHVybiByZXMkLnBpcGUobWFwKChyZXM6IE9EYXRhUmVzcG9uc2U8VD4pID0+IHJlcy5ib2R5KSk7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3Jlc3BvbnNlJzpcbiAgICAgICAgLy8gVGhlIHJlc3BvbnNlIHN0cmVhbSB3YXMgcmVxdWVzdGVkIGRpcmVjdGx5LCBzbyByZXR1cm4gaXQuXG4gICAgICAgIHJldHVybiByZXMkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBuZXcgZnV0dXJlIG9ic2VydmUgdHlwZXMgYmVpbmcgYWRkZWQuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtvcHRpb25zLm9ic2VydmV9fWBcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyMgcmVnaW9uIEZpbmQgYnkgVHlwZVxuICAvLyBNZW1vaXplXG4gIHByaXZhdGUgbWVtbzoge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBzdHJ1Y3R1cmVkOiBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+O1xuICAgICAgY2FsbGFibGU6IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBlbnRpdHlTZXQ6IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPjtcbiAgICAgIHBhcnNlcjogTWFwPHN0cmluZywgUGFyc2VyPGFueT4+O1xuICAgICAgb3B0aW9uczogTWFwPHN0cmluZywgT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgfTtcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IE1hcDxzdHJpbmcsIE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBzdHJ1Y3R1cmVkOiBNYXA8c3RyaW5nLCBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ+O1xuICAgICAgY2FsbGFibGU6IE1hcDxzdHJpbmcsIE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZD47XG4gICAgICBlbnRpdHlTZXQ6IE1hcDxzdHJpbmcsIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkPjtcbiAgICB9O1xuICB9ID0ge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBzdHJ1Y3R1cmVkOiBuZXcgTWFwPHN0cmluZywgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpLFxuICAgICAgY2FsbGFibGU6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBlbnRpdHlTZXQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZD4oKSxcbiAgICAgIHBhcnNlcjogbmV3IE1hcDxzdHJpbmcsIFBhcnNlcjxhbnk+PigpLFxuICAgICAgb3B0aW9uczogbmV3IE1hcDxzdHJpbmcsIE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgfSxcbiAgICBieU5hbWU6IHtcbiAgICAgIGVudW06IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudW1UeXBlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBzdHJ1Y3R1cmVkOiBuZXcgTWFwPHN0cmluZywgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpLFxuICAgICAgY2FsbGFibGU6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQ+KCksXG4gICAgICBlbnRpdHlTZXQ6IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZD4oKSxcbiAgICB9LFxuICB9O1xuXG4gIHByaXZhdGUgZmluZFNjaGVtYUZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NoZW1hcyA9IHRoaXMuc2NoZW1hcy5maWx0ZXIoKHMpID0+IHMuaXNOYW1lc3BhY2VPZih0eXBlKSk7XG4gICAgaWYgKHNjaGVtYXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHNjaGVtYXNbMF07XG4gICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgIC5zb3J0KChzMSwgczIpID0+IHMxLm5hbWVzcGFjZS5sZW5ndGggLSBzMi5uYW1lc3BhY2UubGVuZ3RoKVxuICAgICAgLnBvcCgpO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubWVtby5mb3JUeXBlLmVudW0uaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW51bS5nZXQodHlwZSkgYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW51bVR5cGUgPSB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIHRoaXMubWVtby5mb3JUeXBlLmVudW0uc2V0KHR5cGUsIGVudW1UeXBlKTtcbiAgICByZXR1cm4gZW51bVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZC5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkLmdldCh0eXBlKSBhc1xuICAgICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0cnVjdHVyZWRUeXBlID1cbiAgICAgIHRoaXMuZmluZFNjaGVtYUZvclR5cGUodHlwZSk/LmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuc3RydWN0dXJlZC5zZXQodHlwZSwgc3RydWN0dXJlZFR5cGUpO1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuY2FsbGFibGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZS5nZXQoa2V5KSBhc1xuICAgICAgICB8IE9EYXRhQ2FsbGFibGU8VD5cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbGxhYmxlID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZENhbGxhYmxlRm9yVHlwZTxUPihcbiAgICAgIHR5cGUsXG4gICAgICBiaW5kaW5nVHlwZVxuICAgICk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuY2FsbGFibGUuc2V0KGtleSwgY2FsbGFibGUpO1xuICAgIHJldHVybiBjYWxsYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0Lmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldC5nZXQodHlwZSkgYXNcbiAgICAgICAgfCBPRGF0YUVudGl0eVNldFxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW50aXR5U2V0ID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudGl0eVNldEZvclR5cGUodHlwZSk7XG4gICAgdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LnNldCh0eXBlLCBlbnRpdHlTZXQpO1xuICAgIHJldHVybiBlbnRpdHlTZXQ7XG4gIH1cblxuICBwdWJsaWMgZmluZE1vZGVsRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/Lm1vZGVsO1xuICB9XG5cbiAgcHVibGljIG1vZGVsRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgTW9kZWwgPSB0aGlzLmZpbmRNb2RlbEZvclR5cGUodHlwZSk7XG4gICAgaWYgKE1vZGVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEJ1aWxkIEFkLWhvYyBtb2RlbFxuICAgICAgbGV0IHNjaGVtYSA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpO1xuICAgICAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gc2NoZW1hIGZvciAke3R5cGV9YCk7XG4gICAgICBNb2RlbCA9IGNsYXNzIGV4dGVuZHMgT0RhdGFNb2RlbDxhbnk+IHt9IGFzIHR5cGVvZiBPRGF0YU1vZGVsO1xuICAgICAgLy8gQnVpbGQgTWV0YVxuICAgICAgTW9kZWwuYnVpbGRNZXRhKHsgc2NoZW1hIH0pO1xuICAgICAgLy8gQ29uZmlndXJlXG4gICAgICBNb2RlbC5tZXRhLmNvbmZpZ3VyZSh7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucy5wYXJzZXJPcHRpb25zLFxuICAgICAgICBwYXJzZXJGb3JUeXBlOiAodHlwZTogc3RyaW5nIHwgRWRtVHlwZSkgPT4gdGhpcy5wYXJzZXJGb3JUeXBlKHR5cGUpLFxuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgfSk7XG4gICAgICAvLyBTdG9yZSBOZXcgTW9kZWwgZm9yIG5leHQgdGltZVxuICAgICAgc2NoZW1hLm1vZGVsID0gTW9kZWw7XG4gICAgfVxuICAgIHJldHVybiBNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpPy5jb2xsZWN0aW9uO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3Rpb25Gb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGxldCBDb2xsZWN0aW9uID0gdGhpcy5maW5kQ29sbGVjdGlvbkZvclR5cGUodHlwZSk7XG4gICAgaWYgKENvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHNjaGVtYSA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpO1xuICAgICAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcignJyk7XG4gICAgICBDb2xsZWN0aW9uID0gY2xhc3MgZXh0ZW5kcyBPRGF0YUNvbGxlY3Rpb248XG4gICAgICAgIGFueSxcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+XG4gICAgICA+IHt9IGFzIHR5cGVvZiBPRGF0YUNvbGxlY3Rpb247XG4gICAgICBDb2xsZWN0aW9uLm1vZGVsID0gdGhpcy5tb2RlbEZvclR5cGUodHlwZSk7XG4gICAgICAvLyBTdG9yZSBOZXcgQ29sbGVjdGlvbiBmb3IgbmV4dCB0aW1lXG4gICAgICBzY2hlbWEuY29sbGVjdGlvbiA9IENvbGxlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBDb2xsZWN0aW9uO1xuICB9XG5cbiAgcHVibGljIGZpbmRTZXJ2aWNlRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlKT8uc2VydmljZSBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFFbnRpdHlTZXJ2aWNlXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZShlbnRpdHlUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0LmhhcyhlbnRpdHlUeXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldC5nZXQoZW50aXR5VHlwZSkgYXNcbiAgICAgICAgfCBPRGF0YUVudGl0eVNldFxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW50aXR5U2V0ID0gdGhpcy5zY2hlbWFzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnRpdHlTZXRzXSxcbiAgICAgICAgPE9EYXRhRW50aXR5U2V0W10+W11cbiAgICAgIClcbiAgICAgIC5maW5kKChlKSA9PiBlLmVudGl0eVR5cGUgPT09IGVudGl0eVR5cGUpO1xuICAgIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldC5zZXQoZW50aXR5VHlwZSwgZW50aXR5U2V0KTtcbiAgICByZXR1cm4gZW50aXR5U2V0O1xuICB9XG5cbiAgcHVibGljIGZpbmRTZXJ2aWNlRm9yRW50aXR5VHlwZShlbnRpdHlUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZShlbnRpdHlUeXBlKT8uc2VydmljZSBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFFbnRpdHlTZXJ2aWNlXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW51bVR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubWVtby5ieU5hbWUuZW51bS5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudW0uZ2V0KG5hbWUpIGFzIE9EYXRhRW51bVR5cGU8VD4gfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGVudW1UeXBlID0gdGhpcy5zY2hlbWFzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnVtc10sXG4gICAgICAgIDxPRGF0YUVudW1UeXBlPFQ+W10+W11cbiAgICAgIClcbiAgICAgIC5maW5kKChlKSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIHRoaXMubWVtby5ieU5hbWUuZW51bS5zZXQobmFtZSwgZW51bVR5cGUpO1xuICAgIHJldHVybiBlbnVtVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubWVtby5ieU5hbWUuc3RydWN0dXJlZC5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQuZ2V0KG5hbWUpIGFzXG4gICAgICAgIHwgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3RydWN0dXJlZFR5cGUgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0aWVzXSxcbiAgICAgICAgPE9EYXRhU3RydWN0dXJlZFR5cGU8VD5bXT5bXVxuICAgICAgKVxuICAgICAgLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkLnNldChuYW1lLCBzdHJ1Y3R1cmVkVHlwZSk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRUeXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcsIGJpbmRpbmdUeXBlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCA/IGAke2JpbmRpbmdUeXBlfS8ke25hbWV9YCA6IG5hbWU7XG4gICAgaWYgKHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmNhbGxhYmxlLmdldChrZXkpIGFzIE9EYXRhQ2FsbGFibGU8VD4gfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbGxhYmxlID0gdGhpcy5zY2hlbWFzXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5jYWxsYWJsZXNdLFxuICAgICAgICA8T0RhdGFDYWxsYWJsZTxUPltdPltdXG4gICAgICApXG4gICAgICAuZmluZChcbiAgICAgICAgKGMpID0+XG4gICAgICAgICAgYy5uYW1lID09PSBuYW1lICYmXG4gICAgICAgICAgKGJpbmRpbmdUeXBlID09PSB1bmRlZmluZWQgfHwgYy5iaW5kaW5nKCk/LnR5cGUgPT09IGJpbmRpbmdUeXBlKVxuICAgICAgKTtcbiAgICB0aGlzLm1lbW8uYnlOYW1lLmNhbGxhYmxlLnNldChrZXksIGNhbGxhYmxlKTtcbiAgICByZXR1cm4gY2FsbGFibGU7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXQuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXQuZ2V0KG5hbWUpIGFzIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLnNjaGVtYXNcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0eVNldHNdLFxuICAgICAgICA8T0RhdGFFbnRpdHlTZXRbXT5bXVxuICAgICAgKVxuICAgICAgLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXQuc2V0KG5hbWUsIHNjaGVtYSk7XG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kTW9kZWxCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlQnlOYW1lPGFueT4obmFtZSk/Lm1vZGVsIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YU1vZGVsXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQ29sbGVjdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8YW55PihuYW1lKT8uY29sbGVjdGlvbiBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU2VydmljZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kRW50aXR5U2V0QnlOYW1lKG5hbWUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHBhcnNlckZvclR5cGU8VD4odHlwZTogc3RyaW5nIHwgRWRtVHlwZSwgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAodGhpcy5tZW1vLmZvclR5cGUucGFyc2VyLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyLmdldChrZXkpIGFzIFBhcnNlcjxUPjtcbiAgICB9XG4gICAgLy8gTm9uZSBQYXJzZXIgYnkgZGVmYXVsdFxuICAgIGxldCBwYXJzZXI6IFBhcnNlcjxUPiA9IE5PTkVfUEFSU0VSO1xuICAgIGlmICh0aGlzLnBhcnNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAvLyBFZG0sIEJhc2UgUGFyc2Vyc1xuICAgICAgcGFyc2VyID0gdGhpcy5wYXJzZXJzLmdldCh0eXBlKSBhcyBQYXJzZXI8VD47XG4gICAgfSBlbHNlIGlmICghdHlwZS5zdGFydHNXaXRoKCdFZG0uJykpIHtcbiAgICAgIC8vIEVudW1UeXBlLCBDb21wbGV4VHlwZSBhbmQgRW50aXR5VHlwZSBQYXJzZXJzXG4gICAgICBsZXQgdmFsdWUgPVxuICAgICAgICB0aGlzLmZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZSwgYmluZGluZ1R5cGUpIHx8XG4gICAgICAgIHRoaXMuZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKSB8fFxuICAgICAgICB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZSk7XG4gICAgICBwYXJzZXIgPSB2YWx1ZT8ucGFyc2VyIGFzIFBhcnNlcjxUPjtcbiAgICB9XG4gICAgLy8gU2V0IFBhcnNlciBmb3IgbmV4dCB0aW1lXG4gICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyLnNldChrZXksIHBhcnNlcik7XG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kT3B0aW9uc0ZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgLy8gU3RydWN1dHJlZCBPcHRpb25zXG4gICAgaWYgKHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnMuaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUub3B0aW9ucy5nZXQodHlwZSkgYXNcbiAgICAgICAgfCBPRGF0YU1vZGVsT3B0aW9uczxUPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3QgPSB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHN0Py5tb2RlbD8ubWV0YTtcbiAgICAvLyBTZXQgT3B0aW9ucyBmb3IgbmV4dCB0aW1lXG4gICAgdGhpcy5tZW1vLmZvclR5cGUub3B0aW9ucy5zZXQodHlwZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { of, throwError } from 'rxjs';
|
|
2
2
|
import { startWith, tap } from 'rxjs/operators';
|
|
3
3
|
import { CACHE_KEY_SEPARATOR, DEFAULT_TIMEOUT } from '../constants';
|
|
4
|
-
import {
|
|
4
|
+
import { PathSegment } from '../types';
|
|
5
5
|
export class ODataCache {
|
|
6
6
|
constructor({ timeout = DEFAULT_TIMEOUT }) {
|
|
7
7
|
this.timeout = timeout;
|
|
@@ -15,7 +15,7 @@ export class ODataCache {
|
|
|
15
15
|
scope(req) {
|
|
16
16
|
const segments = req.resource.cloneSegments();
|
|
17
17
|
return segments.segments({ key: true }).reduce((acc, s) => {
|
|
18
|
-
if (s.name ===
|
|
18
|
+
if (s.name === PathSegment.entitySet)
|
|
19
19
|
acc = [...acc, s.path()];
|
|
20
20
|
return acc;
|
|
21
21
|
}, ['request']);
|
|
@@ -170,4 +170,4 @@ export class ODataCache {
|
|
|
170
170
|
return res$;
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBFLE9BQU8sRUFBUyxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQWdCbkQsTUFBTSxPQUFnQixVQUFVO0lBSTlCLFlBQVksRUFBRSxPQUFPLEdBQUcsZUFBZSxFQUF3QjtRQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBQ3pELENBQUM7SUFLRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLEdBQXNCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM1QyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUN2QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFZLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxDQUFDLFNBQVMsQ0FBQyxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElB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aUJBQ2pDLFFBQVEsRUFBRTtpQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENBQ0hFX0tFWV9TRVBBUkFUT1IsIERFRkFVTFRfVElNRU9VVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPRGF0YUJhdGNoUmVzb3VyY2UsIE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBDYWNoZSwgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIGNhY2hlIGVudHJ5IHRoYXQgaG9sZHMgYSBwYXlsb2FkLCBhIGxhc3QgcmVhZCB0aW1lLCBhbmQgYSB0aW1lb3V0IGZvciB0aGUgZW50cnkuXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBjYWNoZS5cbiAqIEBwYXJhbSBsYXN0UmVhZCBUaGUgbGFzdCByZWFkIHRpbWUuXG4gKiBAcGFyYW0gdGltZW91dCBUaGUgdGltZW91dC5cbiAqIEBwYXJhbSB0YWdzIFNvbWUgdGFncyB0byBpZGVudGlmeSB0aGUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFDYWNoZUVudHJ5PFQ+IHtcbiAgcGF5bG9hZDogVDtcbiAgbGFzdFJlYWQ6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICB0YWdzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9EYXRhQ2FjaGUgaW1wbGVtZW50cyBDYWNoZSB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZW50cmllczogTWFwPHN0cmluZywgT0RhdGFDYWNoZUVudHJ5PGFueT4+O1xuXG4gIGNvbnN0cnVjdG9yKHsgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVCB9OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSkge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgYWJzdHJhY3QgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgYWJzdHJhY3QgcHV0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgcmVzb3VyY2Ugb24gdGhlIHJlcXVlc3QgYnVpbGQgYW4gYXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIGJ1aWxkIHRoZSBzY29wZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICBzY29wZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVxLnJlc291cmNlLmNsb25lU2VnbWVudHMoKTtcbiAgICByZXR1cm4gc2VnbWVudHMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSkucmVkdWNlKFxuICAgICAgKGFjYywgcykgPT4ge1xuICAgICAgICBpZiAocy5uYW1lID09PSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldClcbiAgICAgICAgICBhY2MgPSBbLi4uYWNjLCBzLnBhdGgoKSBhcyBzdHJpbmddO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFsncmVxdWVzdCddXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgb2RhdGEgY29udGV4dCBvbiB0aGUgcmVzcG9uc2UgYnVpbGQgYW4gYXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSB0YWdzIG9mIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBidWlsZCB0aGUgdGFnc1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIHRhZ3Mgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICB0YWdzKHJlczogT0RhdGFSZXNwb25zZTxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHRhZ3MgPSBbXTtcbiAgICBjb25zdCBjb250ZXh0ID0gcmVzLmNvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQuZW50aXR5U2V0KSB7XG4gICAgICB0YWdzLnB1c2goXG4gICAgICAgIGNvbnRleHQua2V5ID8gYCR7Y29udGV4dC5lbnRpdHlTZXR9KCR7Y29udGV4dC5rZXl9KWAgOiBjb250ZXh0LmVudGl0eVNldFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQudHlwZSkgdGFncy5wdXNoKGNvbnRleHQudHlwZSk7XG4gICAgcmV0dXJuIHRhZ3M7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW4gZW50cnkgZnJvbSBhIHBheWxvYWQgYW5kIHNvbWUgb3B0aW9uc1xuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gdGFncyBUaGUgdGFncyBmb3IgdGhlIGVudHJ5XG4gICAqIEByZXR1cm5zIFRoZSBlbnRyeSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIGJ1aWxkRW50cnk8VD4oXG4gICAgcGF5bG9hZDogVCxcbiAgICB7IHRpbWVvdXQsIHRhZ3MgfTogeyB0aW1lb3V0PzogbnVtYmVyOyB0YWdzPzogc3RyaW5nW10gfVxuICApOiBPRGF0YUNhY2hlRW50cnk8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkLFxuICAgICAgbGFzdFJlYWQ6IERhdGUubm93KCksXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0IHx8IHRoaXMudGltZW91dCxcbiAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGtleSBmcm9tIHN0b3JlIGFuIGVudHJ5IGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gbmFtZXMgVGhlIG5hbWVzIG9mIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUga2V5IGZvciB0aGUgZW50cnlcbiAgICovXG4gIGJ1aWxkS2V5KG5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWVzLmpvaW4oQ0FDSEVfS0VZX1NFUEFSQVRPUik7XG4gIH1cblxuICAvKipcbiAgICogUHV0IHNvbWUgcGF5bG9hZCBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgZm9yIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGZvciB0aGUgZW50cnlcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3MgZm9yIHRoZSBlbnRyeVxuICAgKi9cbiAgcHV0PFQ+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBULFxuICAgIHtcbiAgICAgIHRpbWVvdXQsXG4gICAgICBzY29wZSxcbiAgICAgIHRhZ3MsXG4gICAgfTogeyB0aW1lb3V0PzogbnVtYmVyOyBzY29wZT86IHN0cmluZ1tdOyB0YWdzPzogc3RyaW5nW10gfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5idWlsZEVudHJ5PFQ+KHBheWxvYWQsIHsgdGltZW91dCwgdGFncyB9KTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgdGhpcy5lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcbiAgICB0aGlzLmZvcmdldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcGF5bG9hZCBmcm9tIHRoZSBjYWNoZSBpZiBpdCBleGlzdHMgYW5kIGlzIG5vdCBleHBpcmVkXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnRyeVxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIG9mIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUgcGF5bG9hZCBvZiB0aGUgZW50cnlcbiAgICovXG4gIGdldDxUPihuYW1lOiBzdHJpbmcsIHsgc2NvcGUgfTogeyBzY29wZT86IHN0cmluZ1tdIH0gPSB7fSk6IFQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRLZXkoWy4uLihzY29wZSB8fCBbXSksIG5hbWVdKTtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllcy5nZXQoa2V5KTtcbiAgICByZXR1cm4gZW50cnkgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc0V4cGlyZWQoZW50cnkpXG4gICAgICA/IGVudHJ5LnBheWxvYWRcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgY2FjaGUgZW50cmllcyB0aGF0IGFyZSBtYXRjaGluZyB3aXRoIHRoZSBnaXZlbiBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIGZvcmdldFxuICAgKi9cbiAgZm9yZ2V0KHtcbiAgICBuYW1lLFxuICAgIHNjb3BlID0gW10sXG4gICAgdGFncyA9IFtdLFxuICB9OiB7IG5hbWU/OiBzdHJpbmc7IHNjb3BlPzogc3RyaW5nW107IHRhZ3M/OiBzdHJpbmdbXSB9ID0ge30pIHtcbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSBzY29wZS5wdXNoKG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IHNjb3BlLmxlbmd0aCA+IDAgPyB0aGlzLmJ1aWxkS2V5KHNjb3BlKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVudHJpZXMuZm9yRWFjaCgoZW50cnksIGspID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0V4cGlyZWQoZW50cnkpIHx8IC8vIEV4cGlyZWRcbiAgICAgICAgKGtleSAhPT0gdW5kZWZpbmVkICYmIGsuc3RhcnRzV2l0aChrZXkpKSB8fCAvLyBLZXlcbiAgICAgICAgKHRhZ3MubGVuZ3RoID4gMCAmJiB0YWdzLnNvbWUoKHQpID0+IGVudHJ5LnRhZ3MuaW5kZXhPZih0KSAhPT0gLTEpKSAvLyBUYWdzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNhY2hlIGVudHJpZXNcbiAgICovXG4gIGZsdXNoKCkge1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZW50cnkgaXMgZXhwaXJlZFxuICAgKiBAcGFyYW0gZW50cnkgVGhlIGNhY2hlIGVudHJ5XG4gICAqIEByZXR1cm5zIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZW50cnkgaXMgZXhwaXJlZFxuICAgKi9cbiAgaXNFeHBpcmVkKGVudHJ5OiBPRGF0YUNhY2hlRW50cnk8YW55Pikge1xuICAgIHJldHVybiBlbnRyeS5sYXN0UmVhZCA8IERhdGUubm93KCkgLSAoZW50cnkudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpICogMTAwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgcmVxdWVzdCwgaGFuZGxlIHRoZSBmZXRjaGluZyBvZiB0aGUgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCB0byBmZXRjaFxuICAgKiBAcGFyYW0gcmVzJCBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgaGFuZGxlUmVxdWVzdChcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxhbnk+LFxuICAgIHJlcyQ6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PlxuICApOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj4ge1xuICAgIHJldHVybiByZXEuaXNGZXRjaCgpXG4gICAgICA/IHRoaXMuaGFuZGxlRmV0Y2gocmVxLCByZXMkKVxuICAgICAgOiByZXEuaXNNdXRhdGUoKVxuICAgICAgPyB0aGlzLmhhbmRsZU11dGF0ZShyZXEsIHJlcyQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZldGNoKFxuICAgIHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sXG4gICAgcmVzJDogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+XG4gICk6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PiB7XG4gICAgY29uc3QgcG9saWN5ID0gcmVxLmZldGNoUG9saWN5O1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZ2V0UmVzcG9uc2UocmVxKTtcbiAgICBpZiAocG9saWN5ID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICByZXR1cm4gcmVzJDtcbiAgICB9XG4gICAgaWYgKHBvbGljeSA9PT0gJ2NhY2hlLW9ubHknKSB7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBvZihjYWNoZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyBDYWNoZWQnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHBvbGljeSA9PT0gJ2NhY2hlLWZpcnN0JyB8fFxuICAgICAgcG9saWN5ID09PSAnY2FjaGUtYW5kLW5ldHdvcmsnIHx8XG4gICAgICBwb2xpY3kgPT09ICduZXR3b3JrLW9ubHknXG4gICAgKSB7XG4gICAgICByZXMkID0gcmVzJC5waXBlKFxuICAgICAgICB0YXAoKHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5vcHRpb25zLmNhY2hlYWJpbGl0eSAhPT0gJ25vLXN0b3JlJylcbiAgICAgICAgICAgIHRoaXMucHV0UmVzcG9uc2UocmVxLCByZXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkICYmIHBvbGljeSAhPT0gJ25ldHdvcmstb25seSdcbiAgICAgID8gcG9saWN5ID09PSAnY2FjaGUtYW5kLW5ldHdvcmsnXG4gICAgICAgID8gcmVzJC5waXBlKHN0YXJ0V2l0aChjYWNoZWQpKVxuICAgICAgICA6IG9mKGNhY2hlZClcbiAgICAgIDogcmVzJDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXV0YXRlKFxuICAgIHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sXG4gICAgcmVzJDogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+XG4gICk6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PiB7XG4gICAgY29uc3QgcmVxdWVzdHMgPSByZXEuaXNCYXRjaCgpXG4gICAgICA/IChyZXEucmVzb3VyY2UgYXMgT0RhdGFCYXRjaFJlc291cmNlKVxuICAgICAgICAgIC5yZXF1ZXN0cygpXG4gICAgICAgICAgLmZpbHRlcigocikgPT4gci5pc011dGF0ZSgpKVxuICAgICAgOiBbcmVxXTtcbiAgICBmb3IgKHZhciByIG9mIHJlcXVlc3RzKSB7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUocik7XG4gICAgICB0aGlzLmZvcmdldCh7IHNjb3BlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzJDtcbiAgfVxufVxuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBFLE9BQU8sRUFBUyxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFnQjlDLE1BQU0sT0FBZ0IsVUFBVTtJQUk5QixZQUFZLEVBQUUsT0FBTyxHQUFHLGVBQWUsRUFBd0I7UUFDN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN6RCxDQUFDO0lBS0Q7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxHQUFzQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVM7Z0JBQ2xDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQVksQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNELENBQUMsU0FBUyxDQUFDLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxD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akMsUUFBUSxFQUFFO2lCQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ0FDSEVfS0VZX1NFUEFSQVRPUiwgREVGQVVMVF9USU1FT1VUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhQmF0Y2hSZXNvdXJjZSwgT0RhdGFSZXF1ZXN0LCBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IENhY2hlLCBQYXRoU2VnbWVudCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBBIGNhY2hlIGVudHJ5IHRoYXQgaG9sZHMgYSBwYXlsb2FkLCBhIGxhc3QgcmVhZCB0aW1lLCBhbmQgYSB0aW1lb3V0IGZvciB0aGUgZW50cnkuXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCB0byBjYWNoZS5cbiAqIEBwYXJhbSBsYXN0UmVhZCBUaGUgbGFzdCByZWFkIHRpbWUuXG4gKiBAcGFyYW0gdGltZW91dCBUaGUgdGltZW91dC5cbiAqIEBwYXJhbSB0YWdzIFNvbWUgdGFncyB0byBpZGVudGlmeSB0aGUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFDYWNoZUVudHJ5PFQ+IHtcbiAgcGF5bG9hZDogVDtcbiAgbGFzdFJlYWQ6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICB0YWdzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9EYXRhQ2FjaGUgaW1wbGVtZW50cyBDYWNoZSB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZW50cmllczogTWFwPHN0cmluZywgT0RhdGFDYWNoZUVudHJ5PGFueT4+O1xuXG4gIGNvbnN0cnVjdG9yKHsgdGltZW91dCA9IERFRkFVTFRfVElNRU9VVCB9OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSkge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgYWJzdHJhY3QgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgYWJzdHJhY3QgcHV0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVc2luZyB0aGUgcmVzb3VyY2Ugb24gdGhlIHJlcXVlc3QgYnVpbGQgYW4gYXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIGJ1aWxkIHRoZSBzY29wZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICBzY29wZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVxLnJlc291cmNlLmNsb25lU2VnbWVudHMoKTtcbiAgICByZXR1cm4gc2VnbWVudHMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSkucmVkdWNlKFxuICAgICAgKGFjYywgcykgPT4ge1xuICAgICAgICBpZiAocy5uYW1lID09PSBQYXRoU2VnbWVudC5lbnRpdHlTZXQpXG4gICAgICAgICAgYWNjID0gWy4uLmFjYywgcy5wYXRoKCkgYXMgc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICBbJ3JlcXVlc3QnXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgdGhlIG9kYXRhIGNvbnRleHQgb24gdGhlIHJlc3BvbnNlIGJ1aWxkIGFuIGFycmF5IG9mIHN0cmluZyB0byBpZGVudGlmeSB0aGUgdGFncyBvZiB0aGUgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlcyBUaGUgcmVzcG9uc2UgdG8gYnVpbGQgdGhlIHRhZ3NcbiAgICogQHJldHVybnMgQXJyYXkgb2Ygc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSB0YWdzIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgdGFncyhyZXM6IE9EYXRhUmVzcG9uc2U8YW55Pik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB0YWdzID0gW107XG4gICAgY29uc3QgY29udGV4dCA9IHJlcy5jb250ZXh0O1xuICAgIGlmIChjb250ZXh0LmVudGl0eVNldCkge1xuICAgICAgdGFncy5wdXNoKFxuICAgICAgICBjb250ZXh0LmtleSA/IGAke2NvbnRleHQuZW50aXR5U2V0fSgke2NvbnRleHQua2V5fSlgIDogY29udGV4dC5lbnRpdHlTZXRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LnR5cGUpIHRhZ3MucHVzaChjb250ZXh0LnR5cGUpO1xuICAgIHJldHVybiB0YWdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIGVudHJ5IGZyb20gYSBwYXlsb2FkIGFuZCBzb21lIG9wdGlvbnNcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgdG8gc3RvcmUgaW4gdGhlIGNhY2hlXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lb3V0IGZvciB0aGUgZW50cnlcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3MgZm9yIHRoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBUaGUgZW50cnkgdG8gc3RvcmUgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBidWlsZEVudHJ5PFQ+KFxuICAgIHBheWxvYWQ6IFQsXG4gICAgeyB0aW1lb3V0LCB0YWdzIH06IHsgdGltZW91dD86IG51bWJlcjsgdGFncz86IHN0cmluZ1tdIH1cbiAgKTogT0RhdGFDYWNoZUVudHJ5PFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bG9hZCxcbiAgICAgIGxhc3RSZWFkOiBEYXRlLm5vdygpLFxuICAgICAgdGltZW91dDogdGltZW91dCB8fCB0aGlzLnRpbWVvdXQsXG4gICAgICB0YWdzOiB0YWdzIHx8IFtdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBrZXkgZnJvbSBzdG9yZSBhbiBlbnRyeSBpbiB0aGUgY2FjaGVcbiAgICogQHBhcmFtIG5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgZW50cnlcbiAgICogQHJldHVybnMgVGhlIGtleSBmb3IgdGhlIGVudHJ5XG4gICAqL1xuICBidWlsZEtleShuYW1lczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lcy5qb2luKENBQ0hFX0tFWV9TRVBBUkFUT1IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1dCBzb21lIHBheWxvYWQgaW4gdGhlIGNhY2hlXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIGZvciB0aGUgZW50cnlcbiAgICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgdG8gc3RvcmUgaW4gdGhlIGNhY2hlXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lb3V0IGZvciB0aGUgZW50cnlcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBmb3IgdGhlIGVudHJ5XG4gICAqIEBwYXJhbSB0YWdzIFRoZSB0YWdzIGZvciB0aGUgZW50cnlcbiAgICovXG4gIHB1dDxUPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogVCxcbiAgICB7XG4gICAgICB0aW1lb3V0LFxuICAgICAgc2NvcGUsXG4gICAgICB0YWdzLFxuICAgIH06IHsgdGltZW91dD86IG51bWJlcjsgc2NvcGU/OiBzdHJpbmdbXTsgdGFncz86IHN0cmluZ1tdIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuYnVpbGRFbnRyeTxUPihwYXlsb2FkLCB7IHRpbWVvdXQsIHRhZ3MgfSk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5idWlsZEtleShbLi4uKHNjb3BlIHx8IFtdKSwgbmFtZV0pO1xuICAgIHRoaXMuZW50cmllcy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgdGhpcy5mb3JnZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHBheWxvYWQgZnJvbSB0aGUgY2FjaGUgaWYgaXQgZXhpc3RzIGFuZCBpcyBub3QgZXhwaXJlZFxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZW50cnlcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBvZiB0aGUgZW50cnlcbiAgICogQHJldHVybnMgVGhlIHBheWxvYWQgb2YgdGhlIGVudHJ5XG4gICAqL1xuICBnZXQ8VD4obmFtZTogc3RyaW5nLCB7IHNjb3BlIH06IHsgc2NvcGU/OiBzdHJpbmdbXSB9ID0ge30pOiBUIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNFeHBpcmVkKGVudHJ5KVxuICAgICAgPyBlbnRyeS5wYXlsb2FkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgdGhhdCBhcmUgbWF0Y2hpbmcgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB0byBmb3JnZXRcbiAgICovXG4gIGZvcmdldCh7XG4gICAgbmFtZSxcbiAgICBzY29wZSA9IFtdLFxuICAgIHRhZ3MgPSBbXSxcbiAgfTogeyBuYW1lPzogc3RyaW5nOyBzY29wZT86IHN0cmluZ1tdOyB0YWdzPzogc3RyaW5nW10gfSA9IHt9KSB7XG4gICAgaWYgKG5hbWUgIT09IHVuZGVmaW5lZCkgc2NvcGUucHVzaChuYW1lKTtcbiAgICBjb25zdCBrZXkgPSBzY29wZS5sZW5ndGggPiAwID8gdGhpcy5idWlsZEtleShzY29wZSkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnRyaWVzLmZvckVhY2goKGVudHJ5LCBrKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNFeHBpcmVkKGVudHJ5KSB8fCAvLyBFeHBpcmVkXG4gICAgICAgIChrZXkgIT09IHVuZGVmaW5lZCAmJiBrLnN0YXJ0c1dpdGgoa2V5KSkgfHwgLy8gS2V5XG4gICAgICAgICh0YWdzLmxlbmd0aCA+IDAgJiYgdGFncy5zb21lKCh0KSA9PiBlbnRyeS50YWdzLmluZGV4T2YodCkgIT09IC0xKSkgLy8gVGFnc1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzXG4gICAqL1xuICBmbHVzaCgpIHtcbiAgICB0aGlzLmVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgT0RhdGFDYWNoZUVudHJ5PGFueT4+KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGVudHJ5IGlzIGV4cGlyZWRcbiAgICogQHBhcmFtIGVudHJ5IFRoZSBjYWNoZSBlbnRyeVxuICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGVudHJ5IGlzIGV4cGlyZWRcbiAgICovXG4gIGlzRXhwaXJlZChlbnRyeTogT0RhdGFDYWNoZUVudHJ5PGFueT4pIHtcbiAgICByZXR1cm4gZW50cnkubGFzdFJlYWQgPCBEYXRlLm5vdygpIC0gKGVudHJ5LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0KSAqIDEwMDA7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgdGhlIHJlcXVlc3QsIGhhbmRsZSB0aGUgZmV0Y2hpbmcgb2YgdGhlIHJlc3BvbnNlXG4gICAqIEBwYXJhbSByZXEgVGhlIHJlcXVlc3QgdG8gZmV0Y2hcbiAgICogQHBhcmFtIHJlcyQgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzcG9uc2VcbiAgICogQHJldHVybnNcbiAgICovXG4gIGhhbmRsZVJlcXVlc3QoXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICByZXR1cm4gcmVxLmlzRmV0Y2goKVxuICAgICAgPyB0aGlzLmhhbmRsZUZldGNoKHJlcSwgcmVzJClcbiAgICAgIDogcmVxLmlzTXV0YXRlKClcbiAgICAgID8gdGhpcy5oYW5kbGVNdXRhdGUocmVxLCByZXMkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGZXRjaChcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxhbnk+LFxuICAgIHJlcyQ6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PlxuICApOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj4ge1xuICAgIGNvbnN0IHBvbGljeSA9IHJlcS5mZXRjaFBvbGljeTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmdldFJlc3BvbnNlKHJlcSk7XG4gICAgaWYgKHBvbGljeSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgcmV0dXJuIHJlcyQ7XG4gICAgfVxuICAgIGlmIChwb2xpY3kgPT09ICdjYWNoZS1vbmx5Jykge1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gQ2FjaGVkJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBwb2xpY3kgPT09ICdjYWNoZS1maXJzdCcgfHxcbiAgICAgIHBvbGljeSA9PT0gJ2NhY2hlLWFuZC1uZXR3b3JrJyB8fFxuICAgICAgcG9saWN5ID09PSAnbmV0d29yay1vbmx5J1xuICAgICkge1xuICAgICAgcmVzJCA9IHJlcyQucGlwZShcbiAgICAgICAgdGFwKChyZXM6IE9EYXRhUmVzcG9uc2U8YW55PikgPT4ge1xuICAgICAgICAgIGlmIChyZXMub3B0aW9ucy5jYWNoZWFiaWxpdHkgIT09ICduby1zdG9yZScpXG4gICAgICAgICAgICB0aGlzLnB1dFJlc3BvbnNlKHJlcSwgcmVzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQgIT09IHVuZGVmaW5lZCAmJiBwb2xpY3kgIT09ICduZXR3b3JrLW9ubHknXG4gICAgICA/IHBvbGljeSA9PT0gJ2NhY2hlLWFuZC1uZXR3b3JrJ1xuICAgICAgICA/IHJlcyQucGlwZShzdGFydFdpdGgoY2FjaGVkKSlcbiAgICAgICAgOiBvZihjYWNoZWQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU11dGF0ZShcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxhbnk+LFxuICAgIHJlcyQ6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PlxuICApOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj4ge1xuICAgIGNvbnN0IHJlcXVlc3RzID0gcmVxLmlzQmF0Y2goKVxuICAgICAgPyAocmVxLnJlc291cmNlIGFzIE9EYXRhQmF0Y2hSZXNvdXJjZSlcbiAgICAgICAgICAucmVxdWVzdHMoKVxuICAgICAgICAgIC5maWx0ZXIoKHIpID0+IHIuaXNNdXRhdGUoKSlcbiAgICAgIDogW3JlcV07XG4gICAgZm9yICh2YXIgciBvZiByZXF1ZXN0cykge1xuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHIpO1xuICAgICAgdGhpcy5mb3JnZXQoeyBzY29wZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcyQ7XG4gIH1cbn1cbiJdfQ==
|