@wavemaker/app-ng-runtime 12.0.0-next.45031 → 12.0.0-next.45501
Sign up to get free protection for your applications and to get access to all the features.
- app-ng-runtime/build-task/bundles/index.umd.js +405 -451
- app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +2 -3
- app-ng-runtime/build-task/esm2022/public_api.mjs +1 -3
- app-ng-runtime/build-task/fesm2022/index.mjs +406 -454
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/build-task/public_api.d.ts +0 -2
- app-ng-runtime/components/base/bundles/index.umd.js +14 -62
- app-ng-runtime/components/base/components.module.d.ts +11 -12
- app-ng-runtime/components/base/esm2022/components.module.mjs +1 -5
- app-ng-runtime/components/base/esm2022/public_api.mjs +1 -2
- app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +15 -25
- app-ng-runtime/components/base/fesm2022/index.mjs +15 -62
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/public_api.d.ts +0 -1
- app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +5 -10
- app-ng-runtime/components/containers/wizard/bundles/index.umd.js +17 -0
- app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +18 -1
- app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +17 -0
- app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/wizard/wizard.component.d.ts +1 -0
- app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +1 -3
- app-ng-runtime/components/data/form/fesm2022/index.mjs +0 -2
- app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/default/bundles/index.umd.js +11 -0
- app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +12 -1
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +11 -0
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/bundles/index.umd.js +63 -39
- app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +0 -1
- app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +5 -8
- app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +5 -8
- app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +57 -29
- app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +1 -4
- app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +2 -2
- app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +4 -1
- app-ng-runtime/components/input/default/fesm2022/index.mjs +63 -39
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +0 -1
- app-ng-runtime/components/input/default/select/select.component.d.ts +2 -4
- app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +3 -2
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +3 -0
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -1
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +3 -0
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +31 -5
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +34 -8
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +32 -6
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +6 -2
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +2 -2
- app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +2 -2
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +2 -2
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +2 -2
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +6 -16
- app-ng-runtime/core/enums/enums.d.ts +1 -2
- app-ng-runtime/core/esm2022/enums/enums.mjs +1 -2
- app-ng-runtime/core/esm2022/types/types.mjs +1 -4
- app-ng-runtime/core/esm2022/utils/build-utils.mjs +1 -6
- app-ng-runtime/core/esm2022/utils/utils.mjs +4 -3
- app-ng-runtime/core/fesm2022/index.mjs +4 -12
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/types/types.d.ts +1 -5
- app-ng-runtime/core/utils/utils.d.ts +1 -0
- app-ng-runtime/mobile/core/bundles/index.umd.js +18 -2
- app-ng-runtime/mobile/core/esm2022/native.xhr.mjs +19 -3
- app-ng-runtime/mobile/core/fesm2022/index.mjs +18 -2
- app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +5 -288
- app-ng-runtime/runtime/base/esm2022/public_api.mjs +1 -2
- app-ng-runtime/runtime/base/esm2022/runtime-base.module.mjs +1 -6
- app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +2 -2
- app-ng-runtime/runtime/base/esm2022/types/types.mjs +1 -2
- app-ng-runtime/runtime/base/fesm2022/index.mjs +4 -287
- app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/runtime/base/public_api.d.ts +0 -1
- app-ng-runtime/runtime/base/runtime-base.module.d.ts +8 -9
- app-ng-runtime/runtime/base/types/types.d.ts +1 -2
- app-ng-runtime/runtime/dynamic/bundles/index.umd.js +9 -27
- app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +2 -5
- app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +7 -23
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +7 -26
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +6 -3
- app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +2 -3
- app-ng-runtime/transpiler/bundles/index.umd.js +0 -5
- app-ng-runtime/transpiler/esm2022/build.mjs +1 -4
- app-ng-runtime/transpiler/esm2022/imports.mjs +1 -3
- app-ng-runtime/transpiler/fesm2022/index.mjs +0 -5
- app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/build-task/advanced/custom-widget-container/custom-widget-container.build.d.ts +0 -2
- app-ng-runtime/build-task/advanced/custom-widget-wrapper/custom-widget-wrapper.build.d.ts +0 -2
- app-ng-runtime/build-task/esm2022/advanced/custom-widget-container/custom-widget-container.build.mjs +0 -15
- app-ng-runtime/build-task/esm2022/advanced/custom-widget-wrapper/custom-widget-wrapper.build.mjs +0 -26
- app-ng-runtime/components/advanced/custom/.npmignore +0 -2
- app-ng-runtime/components/advanced/custom/bundles/index.umd.js +0 -232
- app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +0 -19
- app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget.props.d.ts +0 -2
- app-ng-runtime/components/advanced/custom/custom-widget-prop.d.ts +0 -1
- app-ng-runtime/components/advanced/custom/custom-widget.directive.d.ts +0 -19
- app-ng-runtime/components/advanced/custom/custom-widget.module.d.ts +0 -10
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +0 -102
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget.props.mjs +0 -12
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget-prop.mjs +0 -8
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget.directive.mjs +0 -68
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget.module.mjs +0 -32
- app-ng-runtime/components/advanced/custom/esm2022/index.mjs +0 -5
- app-ng-runtime/components/advanced/custom/esm2022/public_api.mjs +0 -4
- app-ng-runtime/components/advanced/custom/fesm2022/index.mjs +0 -215
- app-ng-runtime/components/advanced/custom/fesm2022/index.mjs.map +0 -1
- app-ng-runtime/components/advanced/custom/index.d.ts +0 -5
- app-ng-runtime/components/advanced/custom/package.json +0 -23
- app-ng-runtime/components/advanced/custom/public_api.d.ts +0 -3
- app-ng-runtime/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +0 -39
- app-ng-runtime/components/base/widgets/common/base/custom-widget-container.directive.d.ts +0 -14
- app-ng-runtime/runtime/base/components/base-custom-widget.component.d.ts +0 -72
- app-ng-runtime/runtime/base/esm2022/components/base-custom-widget.component.mjs +0 -288
@@ -1,8 +1,7 @@
|
|
1
1
|
export declare enum ComponentType {
|
2
2
|
PAGE = 0,
|
3
3
|
PREFAB = 1,
|
4
|
-
PARTIAL = 2
|
5
|
-
WIDGET = 3
|
4
|
+
PARTIAL = 2
|
6
5
|
}
|
7
6
|
export declare class IDataSource {
|
8
7
|
execute: (operation: Operation, options?: any) => boolean | string | Promise<any>;
|
@@ -197,7 +196,4 @@ export declare abstract class DynamicComponentRefProvider {
|
|
197
196
|
export declare abstract class PartialRefProvider {
|
198
197
|
abstract getComponentFactoryRef(partialName: string, componentType: ComponentType, options?: any): Promise<any>;
|
199
198
|
}
|
200
|
-
export declare abstract class CustomWidgetRefProvider {
|
201
|
-
abstract getComponentFactoryRef(customWidgetName: string, componentType: ComponentType, options?: any): Promise<any>;
|
202
|
-
}
|
203
199
|
export {};
|
@@ -773,11 +773,15 @@
|
|
773
773
|
this.nXhr.responseXML = req.responseXML;
|
774
774
|
this.nXhr.responseText = req.responseText;
|
775
775
|
this.responseHeaderText = req.getAllResponseHeaders();
|
776
|
+
this.nXhr.readyState = req.readyState;
|
776
777
|
this.nXhr.getResponseHeader = header => req.getResponseHeader(header);
|
777
778
|
}
|
778
779
|
sendViaXhr(body) {
|
779
780
|
const self = this;
|
780
|
-
this.xhr.onreadystatechange =
|
781
|
+
this.xhr.onreadystatechange = () => {
|
782
|
+
self.copyXMLHttpResponse(self.xhr);
|
783
|
+
this.nXhr.onreadystatechange && this.nXhr.onreadystatechange();
|
784
|
+
};
|
781
785
|
this.xhr.onload = function () {
|
782
786
|
self.copyXMLHttpResponse(self.xhr);
|
783
787
|
if (self.nXhr.onload) {
|
@@ -972,6 +976,8 @@
|
|
972
976
|
this.onload && this.onload();
|
973
977
|
this.onloadend && this.onloadend();
|
974
978
|
clearTimeout(timerId);
|
979
|
+
this.readyState = 4;
|
980
|
+
this.onreadystatechange && this.onreadystatechange();
|
975
981
|
};
|
976
982
|
const onError = (response) => {
|
977
983
|
console.error('network call with request %O failed with response : %O', this, response);
|
@@ -980,10 +986,14 @@
|
|
980
986
|
this.onerror && this.onerror();
|
981
987
|
this.onloadend && this.onloadend();
|
982
988
|
clearTimeout(timerId);
|
989
|
+
this.readyState = 4;
|
990
|
+
this.onreadystatechange && this.onreadystatechange();
|
983
991
|
};
|
984
992
|
cordova$1.plugin.http.downloadFile(new URL(this._internal.url).href, {}, options.headers, tempfile, (entry, response) => {
|
985
993
|
entry.file(f => onSuccess(f, response), onError);
|
986
994
|
}, onError);
|
995
|
+
this.readyState = 1;
|
996
|
+
this.onreadystatechange && this.onreadystatechange();
|
987
997
|
}
|
988
998
|
sendViaNativePlugin(body) {
|
989
999
|
const options = this.prepareOptions(body);
|
@@ -998,6 +1008,8 @@
|
|
998
1008
|
}, this.timeout > 0 ? this.timeout : 1);
|
999
1009
|
new Promise((resolve, reject) => {
|
1000
1010
|
cordova$1.plugin.http.sendRequest(new URL(this._internal.url).href, options, resolve, reject);
|
1011
|
+
this.readyState = 1;
|
1012
|
+
this.onreadystatechange && this.onreadystatechange();
|
1001
1013
|
}).then(response => {
|
1002
1014
|
console.log('network call with request %O successed with response : %O', this, response);
|
1003
1015
|
this.progress.close(true);
|
@@ -1013,7 +1025,11 @@
|
|
1013
1025
|
this._internal.triggerListeners("error" /* EVENT.ERROR */, [response]);
|
1014
1026
|
this.onerror && this.onerror();
|
1015
1027
|
this.onloadend && this.onloadend();
|
1016
|
-
}).finally(() =>
|
1028
|
+
}).finally(() => {
|
1029
|
+
this.readyState = 4;
|
1030
|
+
this.onreadystatechange && this.onreadystatechange();
|
1031
|
+
clearTimeout(timerId);
|
1032
|
+
});
|
1017
1033
|
}
|
1018
1034
|
close() {
|
1019
1035
|
this.ontimeout = null;
|
@@ -71,11 +71,15 @@ class Internals {
|
|
71
71
|
this.nXhr.responseXML = req.responseXML;
|
72
72
|
this.nXhr.responseText = req.responseText;
|
73
73
|
this.responseHeaderText = req.getAllResponseHeaders();
|
74
|
+
this.nXhr.readyState = req.readyState;
|
74
75
|
this.nXhr.getResponseHeader = header => req.getResponseHeader(header);
|
75
76
|
}
|
76
77
|
sendViaXhr(body) {
|
77
78
|
const self = this;
|
78
|
-
this.xhr.onreadystatechange =
|
79
|
+
this.xhr.onreadystatechange = () => {
|
80
|
+
self.copyXMLHttpResponse(self.xhr);
|
81
|
+
this.nXhr.onreadystatechange && this.nXhr.onreadystatechange();
|
82
|
+
};
|
79
83
|
this.xhr.onload = function () {
|
80
84
|
self.copyXMLHttpResponse(self.xhr);
|
81
85
|
if (self.nXhr.onload) {
|
@@ -270,6 +274,8 @@ export class NativeXMLHttpRequest {
|
|
270
274
|
this.onload && this.onload();
|
271
275
|
this.onloadend && this.onloadend();
|
272
276
|
clearTimeout(timerId);
|
277
|
+
this.readyState = 4;
|
278
|
+
this.onreadystatechange && this.onreadystatechange();
|
273
279
|
};
|
274
280
|
const onError = (response) => {
|
275
281
|
console.error('network call with request %O failed with response : %O', this, response);
|
@@ -278,10 +284,14 @@ export class NativeXMLHttpRequest {
|
|
278
284
|
this.onerror && this.onerror();
|
279
285
|
this.onloadend && this.onloadend();
|
280
286
|
clearTimeout(timerId);
|
287
|
+
this.readyState = 4;
|
288
|
+
this.onreadystatechange && this.onreadystatechange();
|
281
289
|
};
|
282
290
|
cordova.plugin.http.downloadFile(new URL(this._internal.url).href, {}, options.headers, tempfile, (entry, response) => {
|
283
291
|
entry.file(f => onSuccess(f, response), onError);
|
284
292
|
}, onError);
|
293
|
+
this.readyState = 1;
|
294
|
+
this.onreadystatechange && this.onreadystatechange();
|
285
295
|
}
|
286
296
|
sendViaNativePlugin(body) {
|
287
297
|
const options = this.prepareOptions(body);
|
@@ -296,6 +306,8 @@ export class NativeXMLHttpRequest {
|
|
296
306
|
}, this.timeout > 0 ? this.timeout : 1);
|
297
307
|
new Promise((resolve, reject) => {
|
298
308
|
cordova.plugin.http.sendRequest(new URL(this._internal.url).href, options, resolve, reject);
|
309
|
+
this.readyState = 1;
|
310
|
+
this.onreadystatechange && this.onreadystatechange();
|
299
311
|
}).then(response => {
|
300
312
|
console.log('network call with request %O successed with response : %O', this, response);
|
301
313
|
this.progress.close(true);
|
@@ -311,7 +323,11 @@ export class NativeXMLHttpRequest {
|
|
311
323
|
this._internal.triggerListeners("error" /* EVENT.ERROR */, [response]);
|
312
324
|
this.onerror && this.onerror();
|
313
325
|
this.onloadend && this.onloadend();
|
314
|
-
}).finally(() =>
|
326
|
+
}).finally(() => {
|
327
|
+
this.readyState = 4;
|
328
|
+
this.onreadystatechange && this.onreadystatechange();
|
329
|
+
clearTimeout(timerId);
|
330
|
+
});
|
315
331
|
}
|
316
332
|
close() {
|
317
333
|
this.ontimeout = null;
|
@@ -321,4 +337,4 @@ export class NativeXMLHttpRequest {
|
|
321
337
|
this._internal.close();
|
322
338
|
}
|
323
339
|
}
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLnhoci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21vYmlsZS9jb3JlL3NyYy9uYXRpdmUueGhyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBWWxDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLEtBQUssRUFBRSxjQUFjO0lBQ3JCLEtBQUssRUFBRSx3QkFBd0I7SUFDL0IsS0FBSyxFQUFFLHlCQUF5QjtJQUNoQyxLQUFLLEVBQUUsaUJBQWlCO0lBRXhCLEtBQUssRUFBRSxRQUFRO0lBQ2YsS0FBSyxFQUFFLGFBQWE7SUFDcEIsS0FBSyxFQUFFLGNBQWM7SUFDckIsS0FBSyxFQUFFLG1DQUFtQztJQUMxQyxLQUFLLEVBQUUsZ0JBQWdCO0lBQ3ZCLEtBQUssRUFBRSxtQkFBbUI7SUFDMUIsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixLQUFLLEVBQUUsMkJBQTJCO0lBQ2xDLEtBQUssRUFBRSwrQkFBK0I7SUFDdEMsS0FBSyxFQUFFLG1DQUFtQztJQUUxQyxLQUFLLEVBQUUscUJBQXFCO0lBQzVCLEtBQUssRUFBRSx1QkFBdUI7SUFDOUIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsS0FBSyxFQUFFLGVBQWU7SUFDdEIsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixLQUFLLEVBQUUsZUFBZTtJQUN0QixLQUFLLEVBQUUsWUFBWTtJQUNuQixLQUFLLEVBQUUsd0JBQXdCO0lBQy9CLEtBQUssRUFBRSx3QkFBd0I7Q0FDbEMsQ0FBQztBQUVGLE1BQU0sU0FBUztJQVVYLFlBQW1CLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBVDdDLFFBQUcsR0FBRyxJQUFJLGVB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QUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsMEJBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLDRCQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJb3MgfSBmcm9tICdAd20vY29yZSc7XG5cbmNvbnN0IF9YTUxIdHRwUmVxdWVzdCA9IHdpbmRvd1snWE1MSHR0cFJlcXVlc3QnXTtcbmNvbnN0IGNvcmRvdmEgPSB3aW5kb3dbJ2NvcmRvdmEnXTtcblxuXG5jb25zdCBlbnVtIEVWRU5UIHtcbiAgICBMT0FEX1NUQVJUID0gJ2xvYWRzdGFydCcsXG4gICAgTE9BRCA9ICdsb2FkJyxcbiAgICBMT0FEX0VORCA9ICdsb2FkZW5kJyxcbiAgICBQUk9HUkVTUyA9ICdwcm9ncmVzcycsXG4gICAgRVJST1IgPSAnZXJyb3InLFxuICAgIEFCT1JUID0gJ2Fib3J0J1xufVxuXG5jb25zdCBTVEFUVVNfVEVYVCA9IHtcbiAgICAnMTAwJzogJzEwMCBDb250aW51ZScsXG4gICAgJzEwMSc6ICcxMDEgU3dpdGNoaW5nIFByb3RvY29sJyxcbiAgICAnMTAyJzogJzEwMiBQcm9jZXNzaW5nIChXZWJEQVYpJyxcbiAgICAnMTAzJzogJzEwMyBFYXJseSBIaW50cycsXG5cbiAgICAnMjAwJzogJzIwMCBPSycsXG4gICAgJzIwMSc6ICcyMDEgQ3JlYXRlZCcsXG4gICAgJzIwMic6ICcyMDIgQWNjZXB0ZWQnLFxuICAgICcyMDMnOiAnMjAzIE5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJyxcbiAgICAnMjA0JzogJzIwNCBObyBDb250ZW50JyxcbiAgICAnMjA1JzogJzIwNSBSZXNldCBDb250ZW50JyxcbiAgICAnMjA2JzogJzIwNiBQYXJ0aWFsIENvbnRlbnQnLFxuICAgICcyMDcnOiAnMjA3IE11bHRpLVN0YXR1cyAoV2ViREFWKScsXG4gICAgJzIwOCc6ICcyMDggQWxyZWFkeSBSZXBvcnRlZCAoV2ViREFWKScsXG4gICAgJzIyNic6ICcyMjYgSU0gVXNlZCAoSFRUUCBEZWx0YSBlbmNvZGluZyknLFxuXG4gICAgJzMwMCc6ICczMDAgTXVsdGlwbGUgQ2hvaWNlJyxcbiAgICAnMzAxJzogJzMwMSBNb3ZlZCBQZXJtYW5lbnRseScsXG4gICAgJzMwMic6ICczMDIgRm91bmQnLFxuICAgICczMDMnOiAnMzAzIFNlZSBPdGhlcicsXG4gICAgJzMwNCc6ICczMDQgTm90IE1vZGlmaWVkJyxcbiAgICAnMzA1JzogJzMwNSBVc2UgUHJveHknLFxuICAgICczMDYnOiAnMzA2IHVudXNlZCcsXG4gICAgJzMwNyc6ICczMDcgVGVtcG9yYXJ5IFJlZGlyZWN0JyxcbiAgICAnMzA4JzogJzMwOCBQZXJtYW5lbnQgUmVkaXJlY3QnXG59O1xuXG5jbGFzcyBJbnRlcm5hbHMge1xuICAgIHhociA9IG5ldyBfWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBtZXRob2QgPSAnR0VUJztcbiAgICByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICAgIHJlc3BvbnNlSGVhZGVyVGV4dCA9ICcnO1xuICAgIHVybCA9ICcnO1xuICAgIGFzeW5jID0gdHJ1ZTtcbiAgICBsaXN0ZW5lcnMgPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuWGhyOiBOYXRpdmVYTUxIdHRwUmVxdWVzdCkge31cblxuICAgIHB1YmxpYyB0cmlnZ2VyTGlzdGVuZXJzKGV2ZW50TmFtZTogc3RyaW5nLCBkYXRhPzogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW2V2ZW50TmFtZV07XG4gICAgICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICAgICAgbC5hcHBseSh3aW5kb3csIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weU5hdGl2ZVJlc3BvbnNlKHJlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLm5YaHIuc3RhdHVzID0gcmVzLnN0YXR1cztcbiAgICAgICAgdGhpcy5uWGhyLnN0YXR1c1RleHQgPSByZXMuc3RhdHVzVGV4dCB8fCByZXMuc3RhdHVzO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2UgPSByZXMuZGF0YTtcbiAgICAgICAgdGhpcy5uWGhyLnJlc3BvbnNlVHlwZSA9IChyZXMuaGVhZGVycyAmJiByZXMuaGVhZGVyc1snY29udGVudC10eXBlJ10pIHx8ICdwbGFpbi90ZXh0JztcbiAgICAgICAgdGhpcy5uWGhyLnJlc3BvbnNlVVJMID0gcmVzLnJlc3BvbnNlVVJMO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2VYTUwgPSByZXMucmVzcG9uc2VYTUw7XG4gICAgICAgIHRoaXMublhoci5yZXNwb25zZVRleHQgPSAocmVzLmRhdGEgJiYgcmVzLmRhdGEudG9TdHJpbmcoKSkgfHwgcmVzLmVycm9yO1xuICAgICAgICB0aGlzLnJlc3BvbnNlSGVhZGVyVGV4dCA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gcmVzLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2goayArICc6ICcgKyByZXMuaGVhZGVyc1trXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGVhZGVycy5qb2luKCdcXHJcXG4nKTtcbiAgICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVhNTEh0dHBSZXNwb25zZShyZXE6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5YaHIuc3RhdHVzID0gcmVxLnN0YXR1cztcbiAgICAgICAgdGhpcy5uWGhyLnN0YXR1c1RleHQgPSByZXEuc3RhdHVzVGV4dDtcbiAgICAgICAgdGhpcy5uWGhyLnJlc3BvbnNlID0gcmVxLnJlc3BvbnNlO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2VUeXBlID0gcmVxLnJlc3BvbnNlVHlwZTtcbiAgICAgICAgdGhpcy5uWGhyLnJlc3BvbnNlVVJMID0gcmVxLnJlc3BvbnNlVVJMO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2VYTUwgPSByZXEucmVzcG9uc2VYTUw7XG4gICAgICAgIHRoaXMublhoci5yZXNwb25zZVRleHQgPSByZXEucmVzcG9uc2VUZXh0O1xuICAgICAgICB0aGlzLnJlc3BvbnNlSGVhZGVyVGV4dCA9IHJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTtcbiAgICAgICAgdGhpcy5uWGhyLmdldFJlc3BvbnNlSGVhZGVyID0gaGVhZGVyID0+IHJlcS5nZXRSZXNwb25zZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kVmlhWGhyKGJvZHkpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMublhoci5vbnJlYWR5c3RhdGVjaGFuZ2U7XG4gICAgICAgIHRoaXMueGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi5jb3B5WE1MSHR0cFJlc3BvbnNlKHNlbGYueGhyKTtcbiAgICAgICAgICAgIGlmIChzZWxmLm5YaHIub25sb2FkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5uWGhyLm9ubG9hZC5hcHBseShzZWxmLm5YaHIsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMueGhyLm9uZXJyb3IgPSB0aGlzLm5YaHIub25lcnJvcjtcbiAgICAgICAgaWYgKCF0aGlzLmFzeW5jKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSB0aGlzLm5YaHIub250aW1lb3V0O1xuICAgICAgICAgICAgdGhpcy54aHIudGltZW91dCA9IHRoaXMublhoci50aW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueGhyLndpdGhDcmVkZW50aWFscyA9IHRoaXMublhoci53aXRoQ3JlZGVudGlhbHM7XG4gICAgICAgIGZvciAobGV0IGsgaW4gdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHRoaXMueGhyLmFkZEV2ZW50TGlzdGVuZXIoaywgZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3B5WE1MSHR0cFJlc3BvbnNlKHRoaXMueGhyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJMaXN0ZW5lcnMoZS50eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueGhyLnNlbmQoYm9keSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCkge1xuICAgICAgICBmb3IgKGxldCBrIGluIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1trXS5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmF0aXZlWE1MSHR0cFJlcXVlc3Qge1xuICAgIHB1YmxpYyBvbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgIHB1YmxpYyByZWFkeVN0YXRlID0gMDtcbiAgICBwdWJsaWMgcmVzcG9uc2UgPSBudWxsO1xuICAgIHB1YmxpYyByZXNwb25zZVR5cGUgPSBudWxsO1xuICAgIHB1YmxpYyByZXNwb25zZVRleHQgPSBudWxsO1xuICAgIHB1YmxpYyByZXNwb25zZVVSTCA9IG51bGw7XG4gICAgcHVibGljIHJlc3BvbnNlWE1MID0gbnVsbDtcbiAgICBwdWJsaWMgc3RhdHVzID0gMDtcbiAgICBwdWJsaWMgc3RhdHVzVGV4dCA9ICcnO1xuICAgIHB1YmxpYyBvbnRpbWVvdXQgPSBudWxsO1xuICAgIHB1YmxpYyBvbmxvYWQgPSBudWxsO1xuICAgIHB1YmxpYyBvbmxvYWRlbmQgPSBudWxsO1xuICAgIHB1YmxpYyBvbmVycm9yID0gbnVsbDtcbiAgICBwdWJsaWMgdGltZW91dCA9IDA7XG4gICAgcHVibGljIHdpdGhDcmVkZW50aWFscyA9IGZhbHNlO1xuICAgIHByaXZhdGUgcHJvZ3Jlc3MgPSB7XG4gICAgICAgIGxlbmd0aENvbXB1dGFibGU6IGZhbHNlLFxuICAgICAgICBsb2FkZWQgOiAwLFxuICAgICAgICB0b3RhbDogMCxcbiAgICAgICAgY2xvc2U6IChzdWNjZXNzID0gZmFsc2UpOiB2b2lkID0+IHt9XG4gICAgfTtcbiAgICBwdWJsaWMgdXBsb2FkID0gIHtcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lciA6IHRoaXMuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMpXG4gICAgfTtcbiAgICBwcml2YXRlIF9pbnRlcm5hbCA9IG5ldyBJbnRlcm5hbHModGhpcyk7XG5cbiAgICBwdWJsaWMgYWJvcnQoKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gLTE7XG4gICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuRVJST1IpO1xuICAgICAgICB0aGlzLm9uZXJyb3IgJiYgdGhpcy5vbmVycm9yKCk7XG4gICAgICAgIHRoaXMuX2ludGVybmFsLnhoci5hYm9ydCgpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlc3BvbnNlSGVhZGVyKG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5oZWFkZXJzW25hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbC5yZXNwb25zZUhlYWRlclRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJlcXVlc3RIZWFkZXIoaGVhZGVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwucmVxdWVzdEhlYWRlcnNbaGVhZGVyXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC54aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGVNaW1lVHlwZShtaW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwueGhyLm92ZXJyaWRlTWltZVR5cGUobWltZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW4obWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBhc3luYyA9IHRydWUsIHVzZXI/OiBzdHJpbmcsIHBhc3N3b3JkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2ludGVybmFsLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwudXJsID0gdXJsO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC5hc3luYyA9IGFzeW5jO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC54aHIub3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZChib2R5PzogYW55LCB1c2VCcm93c2VyWEhSID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHVzZUJyb3dzZXJYSFJcbiAgICAgICAgICAgIHx8IHRoaXMuX2ludGVybmFsLnVybC5zdGFydHNXaXRoKCdodHRwOi8vbG9jYWxob3N0JylcbiAgICAgICAgICAgIHx8ICF0aGlzLl9pbnRlcm5hbC51cmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5zZW5kVmlhWGhyKGJvZHkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzcG9uc2VUeXBlID09PSAnYmxvYicpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZEJsb2JWaWFOYXRpdmVQbHVnaW4oYm9keSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRWaWFOYXRpdmVQbHVnaW4oYm9keSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6ICgpID0+IGFueSkge1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC5saXN0ZW5lcnNbZXZlbnROYW1lXSA9IHRoaXMuX2ludGVybmFsLmxpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC5saXN0ZW5lcnNbZXZlbnROYW1lXS5wdXNoKGhhbmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoKSA9PiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ludGVybmFsLmxpc3RlbmVyc1tldmVudE5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5faW50ZXJuYWwubGlzdGVuZXJzW2V2ZW50TmFtZV0uaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLmxpc3RlbmVyc1tldmVudE5hbWVdLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZU9wdGlvbnMoYm9keTogYW55KSB7XG4gICAgICAgIGJvZHkgPSBib2R5IHx8IHt9O1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICBkYXRhOiBib2R5LFxuICAgICAgICAgICAgbWV0aG9kOiB0aGlzLl9pbnRlcm5hbC5tZXRob2QsXG4gICAgICAgICAgICBzZXJpYWxpemVyOiAncmF3J1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChib2R5ICE9IG51bGwgJiYgYm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChib2R5LmNvbnN0cnVjdG9yICYmIGJvZHkuY29uc3RydWN0b3IudG9TdHJpbmcoKS5pbmRleE9mKCdGb3JtRGF0YSgpJykgPj0gMCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplciA9ICdtdWx0aXBhcnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRQcm9ncmVzcygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplciA9ICd1dGY4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zZXJpYWxpemVyID0gJ3VybGVuY29kZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLl9pbnRlcm5hbC5yZXF1ZXN0SGVhZGVycykge1xuICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW2tleV0gPSB0aGlzLl9pbnRlcm5hbC5yZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogTmF0aXZlIHBsdWdpbiBkaWRuJ3QgcHJvdmlkZSBhbnkgQVBJIHRvIHRyYWNrIHVwbG9hZCBwcm9ncmVzcy5cbiAgICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBzeW50aGV0aWMgZXZlbnQgd2hpY2ggZG9lcyBub3QgY28tcmVsYXRlcyB3aXRoIHRoZSBhY3R1YWwgdXBsb2FkIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhcnRQcm9ncmVzcyh0b3RhbD8pIHtcbiAgICAgICAgY29uc3QgXzFtYiA9IDEwMjQgKiAxMDI0ICogODtcbiAgICAgICAgdG90YWwgPSB0b3RhbCB8fCBfMW1iO1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IE1hdGguY2VpbCh0b3RhbCAvIF8xbWIpICogMjAwO1xuICAgICAgICBjb25zdCBzbGljZSA9IE1hdGguY2VpbCh0b3RhbCAvIF8xbWIpICogKF8xbWIgLyAxMCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgbG9hZGVkIDogMCxcbiAgICAgICAgICAgIHRvdGFsOiB0b3RhbCxcbiAgICAgICAgICAgIGNsb3NlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFdmVudCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuUFJPR1JFU1MsIFt7XG4gICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbDogdGhpcy5wcm9ncmVzcy50b3RhbCxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRoaXMucHJvZ3Jlc3MubG9hZGVkXG4gICAgICAgICAgICB9XSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnByb2dyZXNzLmxvYWRlZCArIHNsaWNlIDwgdG90YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzLmxvYWRlZCArPSBzbGljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudCgpO1xuICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MuY2xvc2UgPSAoc3VjY2VzcyA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MubG9hZGVkID0gdGhpcy5wcm9ncmVzcy50b3RhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudCgpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbmRCbG9iVmlhTmF0aXZlUGx1Z2luKGJvZHk6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcmVwYXJlT3B0aW9ucyhib2R5KTtcbiAgICAgICAgY29uc3QgdGVtcGZpbGUgPSAoaXNJb3MoKSA/IGNvcmRvdmEuZmlsZS50ZW1wRGlyZWN0b3J5IDogY29yZG92YS5maWxlLmNhY2hlRGlyZWN0b3J5KSArIERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMudGltZW91dCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCduZXR3b3JrIGNhbGwgd2l0aCByZXF1ZXN0ICVPIGZhaWxlZCB3aXRoIHRpbWVvdXQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkxPQUQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuRVJST1IpO1xuICAgICAgICAgICAgICAgIHRoaXMub25lcnJvciAmJiB0aGlzLm9uZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9udGltZW91dCAmJiB0aGlzLm9udGltZW91dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy50aW1lb3V0ID4gMCA/IHRoaXMudGltZW91dCA6IDEpO1xuICAgICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZmlsZSwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaGVhZGVycykgfHwge30sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgICAgZGF0YTogZmlsZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBjb250ZW50VHlwZSA9IChyZXNwb25zZSAmJiByZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKTtcbiAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhLnR5cGUgPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25ldHdvcmsgY2FsbCB3aXRoIHJlcXVlc3QgJU8gc3VjY2Vzc2VkIHdpdGggcmVzcG9uc2UgOiAlTycsIHRoaXMsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5jb3B5TmF0aXZlUmVzcG9uc2UocmVzKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuTE9BRCk7XG4gICAgICAgICAgICB0aGlzLm9ubG9hZCAmJiB0aGlzLm9ubG9hZCgpO1xuICAgICAgICAgICAgdGhpcy5vbmxvYWRlbmQgJiYgdGhpcy5vbmxvYWRlbmQoKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25FcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignbmV0d29yayBjYWxsIHdpdGggcmVxdWVzdCAlTyBmYWlsZWQgd2l0aCByZXNwb25zZSA6ICVPJywgdGhpcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FELCBbcmVzcG9uc2VdKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuRVJST1IsIFtyZXNwb25zZV0pO1xuICAgICAgICAgICAgdGhpcy5vbmVycm9yICYmIHRoaXMub25lcnJvcigpO1xuICAgICAgICAgICAgdGhpcy5vbmxvYWRlbmQgJiYgdGhpcy5vbmxvYWRlbmQoKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29yZG92YS5wbHVnaW4uaHR0cC5kb3dubG9hZEZpbGUobmV3IFVSTCh0aGlzLl9pbnRlcm5hbC51cmwpLmhyZWYsIHt9LCBvcHRpb25zLmhlYWRlcnMsIHRlbXBmaWxlLFxuICAgICAgICAgICAgKGVudHJ5LCByZXNwb25zZSkgID0+IHtcbiAgICAgICAgICAgICAgICBlbnRyeS5maWxlKGYgPT4gb25TdWNjZXNzKGYsIHJlc3BvbnNlKSwgb25FcnJvcik7XG4gICAgICAgICAgICB9LCBvbkVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbmRWaWFOYXRpdmVQbHVnaW4oYm9keTogYW55KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByZXBhcmVPcHRpb25zKGJvZHkpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignbmV0d29yayBjYWxsIHdpdGggcmVxdWVzdCAlTyBmYWlsZWQgd2l0aCB0aW1lb3V0JywgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FEKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkVSUk9SKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9udGltZW91dCAmJiB0aGlzLm9udGltZW91dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy50aW1lb3V0ID4gMCA/IHRoaXMudGltZW91dCA6IDEpO1xuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb3Jkb3ZhLnBsdWdpbi5odHRwLnNlbmRSZXF1ZXN0KG5ldyBVUkwodGhpcy5faW50ZXJuYWwudXJsKS5ocmVmLCBvcHRpb25zLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduZXR3b3JrIGNhbGwgd2l0aCByZXF1ZXN0ICVPIHN1Y2Nlc3NlZCB3aXRoIHJlc3BvbnNlIDogJU8nLCB0aGlzLCByZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzLmNsb3NlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwuY29weU5hdGl2ZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuTE9BRCk7XG4gICAgICAgICAgICB0aGlzLm9ubG9hZCAmJiB0aGlzLm9ubG9hZCgpO1xuICAgICAgICAgICAgdGhpcy5vbmxvYWRlbmQgJiYgdGhpcy5vbmxvYWRlbmQoKTtcbiAgICAgICAgfSwgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcy5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwuY29weU5hdGl2ZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ25ldHdvcmsgY2FsbCB3aXRoIHJlcXVlc3QgJU8gZmFpbGVkIHdpdGggcmVzcG9uc2UgOiAlTycsIHRoaXMsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuTE9BRCwgW3Jlc3BvbnNlXSk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkVSUk9SLCBbcmVzcG9uc2VdKTtcbiAgICAgICAgICAgIHRoaXMub25lcnJvciAmJiB0aGlzLm9uZXJyb3IoKTtcbiAgICAgICAgICAgIHRoaXMub25sb2FkZW5kICYmIHRoaXMub25sb2FkZW5kKCk7XG4gICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVySWQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlKCkge1xuICAgICAgICB0aGlzLm9udGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMub25sb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC5jbG9zZSgpO1xuICAgIH1cbn1cbiJdfQ==
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLnhoci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21vYmlsZS9jb3JlL3NyYy9uYXRpdmUueGhyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBWWxDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLEtBQUssRUFBRSxjQUFjO0lBQ3JCLEtBQUssRUFBRSx3QkFBd0I7SUFDL0IsS0FBSyxFQUFFLHlCQUF5QjtJQUNoQyxLQUFLLEVBQUUsaUJBQWlCO0lBRXhCLEtBQUssRUFBRSxRQUFRO0lBQ2YsS0FBSyxFQUFFLGFBQWE7SUFDcEIsS0FBSyxFQUFFLGNBQWM7SUFDckIsS0FBSyxFQUFFLG1DQUFtQztJQUMxQyxLQUFLLEVBQUUsZ0JBQWdCO0lBQ3ZCLEtBQUssRUFBRSxtQkFBbUI7SUFDMUIsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixLQUFLLEVBQUUsMkJBQTJCO0lBQ2xDLEtBQUssRUFBRSwrQkFBK0I7SUFDdEMsS0FBSyxFQUFFLG1DQUFtQztJQUUxQyxLQUFLLEVBQUUscUJBQXFCO0lBQzVCLEtBQUssRUFBRSx1QkFBdUI7SUFDOUIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsS0FBSyxFQUFFLGVBQWU7SUFDdEIsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixLQUFLLEVBQUUsZUFBZTtJQUN0QixLQUFLLEVBQUUsWUFBWTtJQUNuQixLQUFLLEVBQUUsd0JBQXdCO0lBQy9CLEtBQUssRUFBRSx3QkFBd0I7Q0FDbEMsQ0FBQztBQUVGLE1BQU0sU0FBUztJQVVYLFlBQW1CLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBVDdDLFFBQUcsR0FBRyxJQUFJLGVB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QUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNyRCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sS0FBSztRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0lvcyB9IGZyb20gJ0B3bS9jb3JlJztcblxuY29uc3QgX1hNTEh0dHBSZXF1ZXN0ID0gd2luZG93WydYTUxIdHRwUmVxdWVzdCddO1xuY29uc3QgY29yZG92YSA9IHdpbmRvd1snY29yZG92YSddO1xuXG5cbmNvbnN0IGVudW0gRVZFTlQge1xuICAgIExPQURfU1RBUlQgPSAnbG9hZHN0YXJ0JyxcbiAgICBMT0FEID0gJ2xvYWQnLFxuICAgIExPQURfRU5EID0gJ2xvYWRlbmQnLFxuICAgIFBST0dSRVNTID0gJ3Byb2dyZXNzJyxcbiAgICBFUlJPUiA9ICdlcnJvcicsXG4gICAgQUJPUlQgPSAnYWJvcnQnXG59XG5cbmNvbnN0IFNUQVRVU19URVhUID0ge1xuICAgICcxMDAnOiAnMTAwIENvbnRpbnVlJyxcbiAgICAnMTAxJzogJzEwMSBTd2l0Y2hpbmcgUHJvdG9jb2wnLFxuICAgICcxMDInOiAnMTAyIFByb2Nlc3NpbmcgKFdlYkRBViknLFxuICAgICcxMDMnOiAnMTAzIEVhcmx5IEhpbnRzJyxcblxuICAgICcyMDAnOiAnMjAwIE9LJyxcbiAgICAnMjAxJzogJzIwMSBDcmVhdGVkJyxcbiAgICAnMjAyJzogJzIwMiBBY2NlcHRlZCcsXG4gICAgJzIwMyc6ICcyMDMgTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb24nLFxuICAgICcyMDQnOiAnMjA0IE5vIENvbnRlbnQnLFxuICAgICcyMDUnOiAnMjA1IFJlc2V0IENvbnRlbnQnLFxuICAgICcyMDYnOiAnMjA2IFBhcnRpYWwgQ29udGVudCcsXG4gICAgJzIwNyc6ICcyMDcgTXVsdGktU3RhdHVzIChXZWJEQVYpJyxcbiAgICAnMjA4JzogJzIwOCBBbHJlYWR5IFJlcG9ydGVkIChXZWJEQVYpJyxcbiAgICAnMjI2JzogJzIyNiBJTSBVc2VkIChIVFRQIERlbHRhIGVuY29kaW5nKScsXG5cbiAgICAnMzAwJzogJzMwMCBNdWx0aXBsZSBDaG9pY2UnLFxuICAgICczMDEnOiAnMzAxIE1vdmVkIFBlcm1hbmVudGx5JyxcbiAgICAnMzAyJzogJzMwMiBGb3VuZCcsXG4gICAgJzMwMyc6ICczMDMgU2VlIE90aGVyJyxcbiAgICAnMzA0JzogJzMwNCBOb3QgTW9kaWZpZWQnLFxuICAgICczMDUnOiAnMzA1IFVzZSBQcm94eScsXG4gICAgJzMwNic6ICczMDYgdW51c2VkJyxcbiAgICAnMzA3JzogJzMwNyBUZW1wb3JhcnkgUmVkaXJlY3QnLFxuICAgICczMDgnOiAnMzA4IFBlcm1hbmVudCBSZWRpcmVjdCdcbn07XG5cbmNsYXNzIEludGVybmFscyB7XG4gICAgeGhyID0gbmV3IF9YTUxIdHRwUmVxdWVzdCgpO1xuICAgIG1ldGhvZCA9ICdHRVQnO1xuICAgIHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gICAgcmVzcG9uc2VIZWFkZXJUZXh0ID0gJyc7XG4gICAgdXJsID0gJyc7XG4gICAgYXN5bmMgPSB0cnVlO1xuICAgIGxpc3RlbmVycyA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIG5YaHI6IE5hdGl2ZVhNTEh0dHBSZXF1ZXN0KSB7fVxuXG4gICAgcHVibGljIHRyaWdnZXJMaXN0ZW5lcnMoZXZlbnROYW1lOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbZXZlbnROYW1lXTtcbiAgICAgICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgICAgICBsLmFwcGx5KHdpbmRvdywgZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5TmF0aXZlUmVzcG9uc2UocmVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMublhoci5zdGF0dXMgPSByZXMuc3RhdHVzO1xuICAgICAgICB0aGlzLm5YaHIuc3RhdHVzVGV4dCA9IHJlcy5zdGF0dXNUZXh0IHx8IHJlcy5zdGF0dXM7XG4gICAgICAgIHRoaXMublhoci5yZXNwb25zZSA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2VUeXBlID0gKHJlcy5oZWFkZXJzICYmIHJlcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkgfHwgJ3BsYWluL3RleHQnO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2VVUkwgPSByZXMucmVzcG9uc2VVUkw7XG4gICAgICAgIHRoaXMublhoci5yZXNwb25zZVhNTCA9IHJlcy5yZXNwb25zZVhNTDtcbiAgICAgICAgdGhpcy5uWGhyLnJlc3BvbnNlVGV4dCA9IChyZXMuZGF0YSAmJiByZXMuZGF0YS50b1N0cmluZygpKSB8fCByZXMuZXJyb3I7XG4gICAgICAgIHRoaXMucmVzcG9uc2VIZWFkZXJUZXh0ID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgayBpbiByZXMuaGVhZGVycykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMucHVzaChrICsgJzogJyArIHJlcy5oZWFkZXJzW2tdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJzLmpvaW4oJ1xcclxcbicpO1xuICAgICAgICB9KSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5WE1MSHR0cFJlc3BvbnNlKHJlcTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMublhoci5zdGF0dXMgPSByZXEuc3RhdHVzO1xuICAgICAgICB0aGlzLm5YaHIuc3RhdHVzVGV4dCA9IHJlcS5zdGF0dXNUZXh0O1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2UgPSByZXEucmVzcG9uc2U7XG4gICAgICAgIHRoaXMublhoci5yZXNwb25zZVR5cGUgPSByZXEucmVzcG9uc2VUeXBlO1xuICAgICAgICB0aGlzLm5YaHIucmVzcG9uc2VVUkwgPSByZXEucmVzcG9uc2VVUkw7XG4gICAgICAgIHRoaXMublhoci5yZXNwb25zZVhNTCA9IHJlcS5yZXNwb25zZVhNTDtcbiAgICAgICAgdGhpcy5uWGhyLnJlc3BvbnNlVGV4dCA9IHJlcS5yZXNwb25zZVRleHQ7XG4gICAgICAgIHRoaXMucmVzcG9uc2VIZWFkZXJUZXh0ID0gcmVxLmdldEFsbFJlc3BvbnNlSGVhZGVycygpO1xuICAgICAgICB0aGlzLm5YaHIucmVhZHlTdGF0ZSA9IHJlcS5yZWFkeVN0YXRlO1xuICAgICAgICB0aGlzLm5YaHIuZ2V0UmVzcG9uc2VIZWFkZXIgPSBoZWFkZXIgPT4gcmVxLmdldFJlc3BvbnNlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRWaWFYaHIoYm9keSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICBzZWxmLmNvcHlYTUxIdHRwUmVzcG9uc2Uoc2VsZi54aHIpO1xuICAgICAgICAgICB0aGlzLm5YaHIub25yZWFkeXN0YXRlY2hhbmdlICYmIHRoaXMublhoci5vbnJlYWR5c3RhdGVjaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYuY29weVhNTEh0dHBSZXNwb25zZShzZWxmLnhocik7XG4gICAgICAgICAgICBpZiAoc2VsZi5uWGhyLm9ubG9hZCkge1xuICAgICAgICAgICAgICAgIHNlbGYublhoci5vbmxvYWQuYXBwbHkoc2VsZi5uWGhyLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnhoci5vbmVycm9yID0gdGhpcy5uWGhyLm9uZXJyb3I7XG4gICAgICAgIGlmICghdGhpcy5hc3luYykge1xuICAgICAgICAgICAgdGhpcy54aHIub250aW1lb3V0ID0gdGhpcy5uWGhyLm9udGltZW91dDtcbiAgICAgICAgICAgIHRoaXMueGhyLnRpbWVvdXQgPSB0aGlzLm5YaHIudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLm5YaHIud2l0aENyZWRlbnRpYWxzO1xuICAgICAgICBmb3IgKGxldCBrIGluIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnhoci5hZGRFdmVudExpc3RlbmVyKGssIGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29weVhNTEh0dHBSZXNwb25zZSh0aGlzLnhocik7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyTGlzdGVuZXJzKGUudHlwZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnhoci5zZW5kKGJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgZm9yIChsZXQgayBpbiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNba10ubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5hdGl2ZVhNTEh0dHBSZXF1ZXN0IHtcbiAgICBwdWJsaWMgb25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICBwdWJsaWMgcmVhZHlTdGF0ZSA9IDA7XG4gICAgcHVibGljIHJlc3BvbnNlID0gbnVsbDtcbiAgICBwdWJsaWMgcmVzcG9uc2VUeXBlID0gbnVsbDtcbiAgICBwdWJsaWMgcmVzcG9uc2VUZXh0ID0gbnVsbDtcbiAgICBwdWJsaWMgcmVzcG9uc2VVUkwgPSBudWxsO1xuICAgIHB1YmxpYyByZXNwb25zZVhNTCA9IG51bGw7XG4gICAgcHVibGljIHN0YXR1cyA9IDA7XG4gICAgcHVibGljIHN0YXR1c1RleHQgPSAnJztcbiAgICBwdWJsaWMgb250aW1lb3V0ID0gbnVsbDtcbiAgICBwdWJsaWMgb25sb2FkID0gbnVsbDtcbiAgICBwdWJsaWMgb25sb2FkZW5kID0gbnVsbDtcbiAgICBwdWJsaWMgb25lcnJvciA9IG51bGw7XG4gICAgcHVibGljIHRpbWVvdXQgPSAwO1xuICAgIHB1YmxpYyB3aXRoQ3JlZGVudGlhbHMgPSBmYWxzZTtcbiAgICBwcml2YXRlIHByb2dyZXNzID0ge1xuICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiBmYWxzZSxcbiAgICAgICAgbG9hZGVkIDogMCxcbiAgICAgICAgdG90YWw6IDAsXG4gICAgICAgIGNsb3NlOiAoc3VjY2VzcyA9IGZhbHNlKTogdm9pZCA9PiB7fVxuICAgIH07XG4gICAgcHVibGljIHVwbG9hZCA9ICB7XG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIgOiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzKVxuICAgIH07XG4gICAgcHJpdmF0ZSBfaW50ZXJuYWwgPSBuZXcgSW50ZXJuYWxzKHRoaXMpO1xuXG4gICAgcHVibGljIGFib3J0KCkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IC0xO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkVSUk9SKTtcbiAgICAgICAgdGhpcy5vbmVycm9yICYmIHRoaXMub25lcnJvcigpO1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC54aHIuYWJvcnQoKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZXNwb25zZUhlYWRlcihuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2UuaGVhZGVyc1tuYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWwucmVzcG9uc2VIZWFkZXJUZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRSZXF1ZXN0SGVhZGVyKGhlYWRlcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2ludGVybmFsLnJlcXVlc3RIZWFkZXJzW2hlYWRlcl0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwueGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlTWltZVR5cGUobWltZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2ludGVybmFsLnhoci5vdmVycmlkZU1pbWVUeXBlKG1pbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgYXN5bmMgPSB0cnVlLCB1c2VyPzogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pbnRlcm5hbC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuX2ludGVybmFsLnVybCA9IHVybDtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwuYXN5bmMgPSBhc3luYztcbiAgICAgICAgdGhpcy5faW50ZXJuYWwueGhyLm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmQoYm9keT86IGFueSwgdXNlQnJvd3NlclhIUiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh1c2VCcm93c2VyWEhSXG4gICAgICAgICAgICB8fCB0aGlzLl9pbnRlcm5hbC51cmwuc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdCcpXG4gICAgICAgICAgICB8fCAhdGhpcy5faW50ZXJuYWwudXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwuc2VuZFZpYVhocihib2R5KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRCbG9iVmlhTmF0aXZlUGx1Z2luKGJvZHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZW5kVmlhTmF0aXZlUGx1Z2luKGJvZHkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoKSA9PiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwubGlzdGVuZXJzW2V2ZW50TmFtZV0gPSB0aGlzLl9pbnRlcm5hbC5saXN0ZW5lcnNbZXZlbnROYW1lXSB8fCBbXTtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwubGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKCkgPT4gYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcm5hbC5saXN0ZW5lcnNbZXZlbnROYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMuX2ludGVybmFsLmxpc3RlbmVyc1tldmVudE5hbWVdLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5saXN0ZW5lcnNbZXZlbnROYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVPcHRpb25zKGJvZHk6IGFueSkge1xuICAgICAgICBib2R5ID0gYm9keSB8fCB7fTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICAgIG1ldGhvZDogdGhpcy5faW50ZXJuYWwubWV0aG9kLFxuICAgICAgICAgICAgc2VyaWFsaXplcjogJ3JhdydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYm9keSAhPSBudWxsICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoYm9keS5jb25zdHJ1Y3RvciAmJiBib2R5LmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkuaW5kZXhPZignRm9ybURhdGEoKScpID49IDApIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNlcmlhbGl6ZXIgPSAnbXVsdGlwYXJ0JztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZih0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnNlcmlhbGl6ZXIgPSAndXRmOCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplciA9ICd1cmxlbmNvZGVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5faW50ZXJuYWwucmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1trZXldID0gdGhpcy5faW50ZXJuYWwucmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIE5hdGl2ZSBwbHVnaW4gZGlkbid0IHByb3ZpZGUgYW55IEFQSSB0byB0cmFjayB1cGxvYWQgcHJvZ3Jlc3MuXG4gICAgICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgc3ludGhldGljIGV2ZW50IHdoaWNoIGRvZXMgbm90IGNvLXJlbGF0ZXMgd2l0aCB0aGUgYWN0dWFsIHVwbG9hZCBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXJ0UHJvZ3Jlc3ModG90YWw/KSB7XG4gICAgICAgIGNvbnN0IF8xbWIgPSAxMDI0ICogMTAyNCAqIDg7XG4gICAgICAgIHRvdGFsID0gdG90YWwgfHwgXzFtYjtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBNYXRoLmNlaWwodG90YWwgLyBfMW1iKSAqIDIwMDtcbiAgICAgICAgY29uc3Qgc2xpY2UgPSBNYXRoLmNlaWwodG90YWwgLyBfMW1iKSAqIChfMW1iIC8gMTApO1xuICAgICAgICB0aGlzLnByb2dyZXNzID0ge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZCA6IDAsXG4gICAgICAgICAgICB0b3RhbDogdG90YWwsXG4gICAgICAgICAgICBjbG9zZTogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULlBST0dSRVNTLCBbe1xuICAgICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWw6IHRoaXMucHJvZ3Jlc3MudG90YWwsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiB0aGlzLnByb2dyZXNzLmxvYWRlZFxuICAgICAgICAgICAgfV0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5wcm9ncmVzcy5sb2FkZWQgKyBzbGljZSA8IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzcy5sb2FkZWQgKz0gc2xpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoKTtcbiAgICAgICAgfSwgaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnByb2dyZXNzLmNsb3NlID0gKHN1Y2Nlc3MgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzLmxvYWRlZCA9IHRoaXMucHJvZ3Jlc3MudG90YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZW5kQmxvYlZpYU5hdGl2ZVBsdWdpbihib2R5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJlcGFyZU9wdGlvbnMoYm9keSk7XG4gICAgICAgIGNvbnN0IHRlbXBmaWxlID0gKGlzSW9zKCkgPyBjb3Jkb3ZhLmZpbGUudGVtcERpcmVjdG9yeSA6IGNvcmRvdmEuZmlsZS5jYWNoZURpcmVjdG9yeSkgKyBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignbmV0d29yayBjYWxsIHdpdGggcmVxdWVzdCAlTyBmYWlsZWQgd2l0aCB0aW1lb3V0JywgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FEKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkVSUk9SKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uZXJyb3IgJiYgdGhpcy5vbmVycm9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbnRpbWVvdXQgJiYgdGhpcy5vbnRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMudGltZW91dCA+IDAgPyB0aGlzLnRpbWVvdXQgOiAxKTtcbiAgICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGZpbGUsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogKHJlc3BvbnNlICYmIHJlc3BvbnNlLmhlYWRlcnMpIHx8IHt9LFxuICAgICAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IGZpbGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgY29udGVudFR5cGUgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaGVhZGVycyAmJiByZXNwb25zZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSk7XG4gICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXMuZGF0YS50eXBlID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduZXR3b3JrIGNhbGwgd2l0aCByZXF1ZXN0ICVPIHN1Y2Nlc3NlZCB3aXRoIHJlc3BvbnNlIDogJU8nLCB0aGlzLCByZXMpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwuY29weU5hdGl2ZVJlc3BvbnNlKHJlcyk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkxPQUQpO1xuICAgICAgICAgICAgdGhpcy5vbmxvYWQgJiYgdGhpcy5vbmxvYWQoKTtcbiAgICAgICAgICAgIHRoaXMub25sb2FkZW5kICYmIHRoaXMub25sb2FkZW5kKCk7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSA0O1xuICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgJiYgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb25FcnJvciA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignbmV0d29yayBjYWxsIHdpdGggcmVxdWVzdCAlTyBmYWlsZWQgd2l0aCByZXNwb25zZSA6ICVPJywgdGhpcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FELCBbcmVzcG9uc2VdKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuRVJST1IsIFtyZXNwb25zZV0pO1xuICAgICAgICAgICAgdGhpcy5vbmVycm9yICYmIHRoaXMub25lcnJvcigpO1xuICAgICAgICAgICAgdGhpcy5vbmxvYWRlbmQgJiYgdGhpcy5vbmxvYWRlbmQoKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IDQ7XG4gICAgICAgICAgICB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSAmJiB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSgpO1xuICAgICAgICB9O1xuICAgICAgICBjb3Jkb3ZhLnBsdWdpbi5odHRwLmRvd25sb2FkRmlsZShuZXcgVVJMKHRoaXMuX2ludGVybmFsLnVybCkuaHJlZiwge30sIG9wdGlvbnMuaGVhZGVycywgdGVtcGZpbGUsXG4gICAgICAgICAgICAoZW50cnksIHJlc3BvbnNlKSAgPT4ge1xuICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZiA9PiBvblN1Y2Nlc3MoZiwgcmVzcG9uc2UpLCBvbkVycm9yKTtcbiAgICAgICAgICAgIH0sIG9uRXJyb3IpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gMTtcbiAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgJiYgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbmRWaWFOYXRpdmVQbHVnaW4oYm9keTogYW55KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByZXBhcmVPcHRpb25zKGJvZHkpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignbmV0d29yayBjYWxsIHdpdGggcmVxdWVzdCAlTyBmYWlsZWQgd2l0aCB0aW1lb3V0JywgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FEKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC50cmlnZ2VyTGlzdGVuZXJzKEVWRU5ULkVSUk9SKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9udGltZW91dCAmJiB0aGlzLm9udGltZW91dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy50aW1lb3V0ID4gMCA/IHRoaXMudGltZW91dCA6IDEpO1xuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb3Jkb3ZhLnBsdWdpbi5odHRwLnNlbmRSZXF1ZXN0KG5ldyBVUkwodGhpcy5faW50ZXJuYWwudXJsKS5ocmVmLCBvcHRpb25zLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID0gMTtcbiAgICAgICAgICAgIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlICYmIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlKCk7XG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ25ldHdvcmsgY2FsbCB3aXRoIHJlcXVlc3QgJU8gc3VjY2Vzc2VkIHdpdGggcmVzcG9uc2UgOiAlTycsIHRoaXMsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MuY2xvc2UodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5jb3B5TmF0aXZlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FEKTtcbiAgICAgICAgICAgIHRoaXMub25sb2FkICYmIHRoaXMub25sb2FkKCk7XG4gICAgICAgICAgICB0aGlzLm9ubG9hZGVuZCAmJiB0aGlzLm9ubG9hZGVuZCgpO1xuICAgICAgICB9LCByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbC5jb3B5TmF0aXZlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignbmV0d29yayBjYWxsIHdpdGggcmVxdWVzdCAlTyBmYWlsZWQgd2l0aCByZXNwb25zZSA6ICVPJywgdGhpcywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWwudHJpZ2dlckxpc3RlbmVycyhFVkVOVC5MT0FELCBbcmVzcG9uc2VdKTtcbiAgICAgICAgICAgIHRoaXMuX2ludGVybmFsLnRyaWdnZXJMaXN0ZW5lcnMoRVZFTlQuRVJST1IsIFtyZXNwb25zZV0pO1xuICAgICAgICAgICAgdGhpcy5vbmVycm9yICYmIHRoaXMub25lcnJvcigpO1xuICAgICAgICAgICAgdGhpcy5vbmxvYWRlbmQgJiYgdGhpcy5vbmxvYWRlbmQoKTtcbiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSA0O1xuICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgJiYgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UoKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5vbnRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIHRoaXMub25lcnJvciA9IG51bGw7XG4gICAgICAgIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5faW50ZXJuYWwuY2xvc2UoKTtcbiAgICB9XG59XG4iXX0=
|
@@ -780,11 +780,15 @@ class Internals {
|
|
780
780
|
this.nXhr.responseXML = req.responseXML;
|
781
781
|
this.nXhr.responseText = req.responseText;
|
782
782
|
this.responseHeaderText = req.getAllResponseHeaders();
|
783
|
+
this.nXhr.readyState = req.readyState;
|
783
784
|
this.nXhr.getResponseHeader = header => req.getResponseHeader(header);
|
784
785
|
}
|
785
786
|
sendViaXhr(body) {
|
786
787
|
const self = this;
|
787
|
-
this.xhr.onreadystatechange =
|
788
|
+
this.xhr.onreadystatechange = () => {
|
789
|
+
self.copyXMLHttpResponse(self.xhr);
|
790
|
+
this.nXhr.onreadystatechange && this.nXhr.onreadystatechange();
|
791
|
+
};
|
788
792
|
this.xhr.onload = function () {
|
789
793
|
self.copyXMLHttpResponse(self.xhr);
|
790
794
|
if (self.nXhr.onload) {
|
@@ -979,6 +983,8 @@ class NativeXMLHttpRequest {
|
|
979
983
|
this.onload && this.onload();
|
980
984
|
this.onloadend && this.onloadend();
|
981
985
|
clearTimeout(timerId);
|
986
|
+
this.readyState = 4;
|
987
|
+
this.onreadystatechange && this.onreadystatechange();
|
982
988
|
};
|
983
989
|
const onError = (response) => {
|
984
990
|
console.error('network call with request %O failed with response : %O', this, response);
|
@@ -987,10 +993,14 @@ class NativeXMLHttpRequest {
|
|
987
993
|
this.onerror && this.onerror();
|
988
994
|
this.onloadend && this.onloadend();
|
989
995
|
clearTimeout(timerId);
|
996
|
+
this.readyState = 4;
|
997
|
+
this.onreadystatechange && this.onreadystatechange();
|
990
998
|
};
|
991
999
|
cordova$1.plugin.http.downloadFile(new URL(this._internal.url).href, {}, options.headers, tempfile, (entry, response) => {
|
992
1000
|
entry.file(f => onSuccess(f, response), onError);
|
993
1001
|
}, onError);
|
1002
|
+
this.readyState = 1;
|
1003
|
+
this.onreadystatechange && this.onreadystatechange();
|
994
1004
|
}
|
995
1005
|
sendViaNativePlugin(body) {
|
996
1006
|
const options = this.prepareOptions(body);
|
@@ -1005,6 +1015,8 @@ class NativeXMLHttpRequest {
|
|
1005
1015
|
}, this.timeout > 0 ? this.timeout : 1);
|
1006
1016
|
new Promise((resolve, reject) => {
|
1007
1017
|
cordova$1.plugin.http.sendRequest(new URL(this._internal.url).href, options, resolve, reject);
|
1018
|
+
this.readyState = 1;
|
1019
|
+
this.onreadystatechange && this.onreadystatechange();
|
1008
1020
|
}).then(response => {
|
1009
1021
|
console.log('network call with request %O successed with response : %O', this, response);
|
1010
1022
|
this.progress.close(true);
|
@@ -1020,7 +1032,11 @@ class NativeXMLHttpRequest {
|
|
1020
1032
|
this._internal.triggerListeners("error" /* EVENT.ERROR */, [response]);
|
1021
1033
|
this.onerror && this.onerror();
|
1022
1034
|
this.onloadend && this.onloadend();
|
1023
|
-
}).finally(() =>
|
1035
|
+
}).finally(() => {
|
1036
|
+
this.readyState = 4;
|
1037
|
+
this.onreadystatechange && this.onreadystatechange();
|
1038
|
+
clearTimeout(timerId);
|
1039
|
+
});
|
1024
1040
|
}
|
1025
1041
|
close() {
|
1026
1042
|
this.ontimeout = null;
|