@aquera/ngx-smart-table 0.0.17-patch-0.1 → 0.0.17-patch-0.2
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/esm2020/lib/editors/index.mjs +2 -1
- package/esm2020/lib/editors/nile-code-editor.mjs +619 -0
- package/esm2020/lib/editors/nile-select-editor.mjs +16 -5
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +19 -6
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +15 -2
- package/esm2020/lib/renderer/models/cell.class.mjs +30 -2
- package/fesm2015/aquera-ngx-smart-table.mjs +713 -12
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +696 -12
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/editors/index.d.ts +1 -0
- package/lib/editors/nile-code-editor.d.ts +154 -0
- package/lib/renderer/components/st-cell/st-cell.component.d.ts +4 -2
- package/lib/renderer/models/cell.class.d.ts +18 -1
- package/package.json +1 -1
|
@@ -50,17 +50,28 @@ function injectDropdownStyles() {
|
|
|
50
50
|
}
|
|
51
51
|
/* Combobox styling using ::part() selector */
|
|
52
52
|
nile-select.st-cell-editor::part(combobox) {
|
|
53
|
-
background-color:
|
|
53
|
+
background-color: transparent !important;
|
|
54
54
|
border: solid 1px transparent !important;
|
|
55
|
-
margin:
|
|
55
|
+
margin: 0px !important;
|
|
56
|
+
max-height: 28px;
|
|
56
57
|
}
|
|
57
58
|
nile-select.st-cell-editor::part(combobox):hover {
|
|
58
59
|
border: solid 1px transparent !important;
|
|
59
60
|
}
|
|
60
61
|
.st-cell-editor::part(combobox) {
|
|
61
|
-
background-color:
|
|
62
|
+
background-color: transparent !important;
|
|
62
63
|
border: solid 1px transparent !important;
|
|
63
|
-
margin:
|
|
64
|
+
margin: 0px !important;
|
|
65
|
+
max-height: 28px;
|
|
66
|
+
}
|
|
67
|
+
/* Tag spacing */
|
|
68
|
+
nile-select.st-cell-editor::part(tag) {
|
|
69
|
+
margin-right: 0px;
|
|
70
|
+
padding: 1px 2px;
|
|
71
|
+
}
|
|
72
|
+
.st-cell-editor::part(tag) {
|
|
73
|
+
margin-right: 0px;
|
|
74
|
+
padding: 1px 2px;
|
|
64
75
|
}
|
|
65
76
|
/* Search input full width */
|
|
66
77
|
.nile-select-portal-append .select__search {
|
|
@@ -497,4 +508,4 @@ export class NileSelectEditor {
|
|
|
497
508
|
return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : (value || ''));
|
|
498
509
|
}
|
|
499
510
|
}
|
|
500
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtEbkIsQ0FBQztJQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFtRkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixZQUE2QixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQVQ3RCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFHdkIsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO1FBRXRFLG1CQUFjLEdBQThCLEVBQUUsQ0FBQztRQUMvQyxrQkFBYSxHQUFhLEVBQUUsQ0FBQyxDQUFFLDJDQUEyQztRQUMxRSxzQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FB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SyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFpQixDQUFDO0lBQ3JHLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIGVkaXRvciB1c2luZyBOaWxlU2VsZWN0IGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBUaGlzIGRlbW9uc3RyYXRlcyBob3cgdG8gY3JlYXRlIGRyb3Bkb3duL3NlbGVjdCBlZGl0b3JzIGZvciBuZ3gtc21hcnQtdGFibGVcbiAqL1xuXG5pbXBvcnQgeyBDZWxsRWRpdG9yLCBDZWxsRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogSW5qZWN0IGdsb2JhbCBzdHlsZXMgZm9yIG5pbGUtc2VsZWN0IGRyb3Bkb3duIGhlaWdodCBsaW1pdFxuICovXG5sZXQgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IGZhbHNlO1xuZnVuY3Rpb24gaW5qZWN0RHJvcGRvd25TdHlsZXMoKTogdm9pZCB7XG4gIGlmIChkcm9wZG93blN0eWxlc0luamVjdGVkKSByZXR1cm47XG4gIGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQgPSB0cnVlO1xuXG4gIGNvbnN0IHN0eWxlSWQgPSAnbmlsZS1zZWxlY3QtZHJvcGRvd24tc3R5bGVzJztcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlSWQpKSByZXR1cm47XG5cbiAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS5pZCA9IHN0eWxlSWQ7XG4gIHN0eWxlLnRleHRDb250ZW50ID0gYFxuICAgIC8qIExpbWl0IG5pbGUtc2VsZWN0IGRyb3Bkb3duIGhlaWdodCBhbmQgZW5hYmxlIHNjcm9sbGluZyAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIHtcbiAgICAgIG1heC1oZWlnaHQ6IDMwMHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX2xpc3Rib3gge1xuICAgICAgbWluLXdpZHRoOiAyMjBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjYwcHggIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX2Zvb3RlciB7XG4gICAgICBoZWlnaHQ6IDM1cHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogUHJldmVudCBvcHRpb24gdGV4dCB0cnVuY2F0aW9uIC0gdGFyZ2V0IHRoZSBvcHRpb25zIGNvbnRhaW5lciAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX29wdGlvbnMge1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgbmlsZS1vcHRpb24ge1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChiYXNlKSB7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XG4gICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIEZpeCBvcHRpb24gdGV4dCB0cnVuY2F0aW9uIGJ5IGNoYW5naW5nIGZsZXggZGlyZWN0aW9uICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgbmlsZS1vcHRpb246OnBhcnQob3B0aW9uX2xhYmVsX2NvbnRhaW5lcikge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBDb21ib2JveCBzdHlsaW5nIHVzaW5nIDo6cGFydCgpIHNlbGVjdG9yICovXG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW5pbGUtY29sb3JzLXdoaXRlLWJhc2UsIHZhcigtLW5nLWNvbG9ycy1iZy1wcmltYXJ5KSkgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDFweCA0cHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbmlsZS1jb2xvcnMtd2hpdGUtYmFzZSwgdmFyKC0tbmctY29sb3JzLWJnLXByaW1hcnkpKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyOiBzb2xpZCAxcHggdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIG1hcmdpbjogMXB4IDRweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVTZWxlY3QgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGZvciBzaW5nbGUgc2VsZWN0aW9uLCBzdHJpbmdbXSBmb3IgbXVsdGlwbGUpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlU2VsZWN0RWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIGFjY2VwdHNJbml0aWFsS2V5cHJlc3MgPSBmYWxzZTtcbiAgXG4gIHByaXZhdGUgc2VsZWN0PzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRPcHRpb25zOiAoU2VsZWN0T3B0aW9uIHwgc3RyaW5nKVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlczogc3RyaW5nW10gPSBbXTsgIC8vIFRyYWNrIHNlbGVjdGVkIHZhbHVlcyBmb3IgdmlydHVhbCBzY3JvbGxcbiAgcHJpdmF0ZSBoYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlOyAgICAgLy8gV2hldGhlciBhIG5pbGUtY2hhbmdlIGV2ZW50IGhhcyBmaXJlZFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBkcm9wZG93biBoZWlnaHQgc3R5bGVzIG9uY2VcbiAgICBpbmplY3REcm9wZG93blN0eWxlcygpO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgdGhlIHNlbGVjdCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5mb2N1cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG4gICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvbiAtIHZhbHVlIHNob3VsZCBiZSBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFsuLi52YWx1ZV07ICAvLyBJbml0aWFsaXplIHRyYWNrZWQgdmFsdWVzXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWUgPyBTdHJpbmcodmFsdWUpIDogJyc7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSB2YWx1ZSA/IFtTdHJpbmcodmFsdWUpXSA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRoaXMub3B0aW9ucy5ob2lzdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3QucGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVuYWJsZVZpcnR1YWxTY3JvbGwgPSB0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZUxvY2FsU2VhcmNoID0gdGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaDtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcG9ydGFsIG1vZGUgYnkgZGVmYXVsdCB0byBwcmV2ZW50IGRyb3Bkb3duIGNsaXBwaW5nIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbCAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcmV2ZW50IHdpZHRoIHN5bmNpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3Qubm9XaWR0aFN5bmMgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvcHRpb25zIGR5bmFtaWNhbGx5IHdoaWxlIGVkaXRvciBpcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBGb3IgdmlydHVhbCBzY3JvbGwgbW9kZSwganVzdCB1cGRhdGUgdGhlIGRhdGEgcHJvcGVydHkgKG5vIERPTSBjaGlsZHJlbiB0byBjbGVhcilcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgbW9kZTogY2xlYXIgZXhpc3RpbmcgbmlsZS1vcHRpb24gZWxlbWVudHMgZmlyc3RcbiAgICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnJlbW92ZUNoaWxkKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIFdoZW4gZW5hYmxlVmlydHVhbFNjcm9sbCBpcyB0cnVlLCB1c2VzIGRhdGEgcHJvcGVydHkgaW5zdGVhZCBvZiBET00gZWxlbWVudHNcbiAgICogQHNlZSBodHRwczovL25pbGUuYXF1ZXJhbGFicy5jb20vc2VsZWN0LXZpcnR1YWw/dGhlbWU9ZW50ZXJwcmlzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHJlbmRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBbmRBcHBlbmRPcHRpb25zKG9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBWaXJ0dWFsIHNjcm9sbCBtb2RlOiB1c2UgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgY29uc3QgdmlydHVhbERhdGEgPSBvcHRpb25zLm1hcChvcHQgPT4gXG4gICAgICAgIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnIFxuICAgICAgICAgID8geyB2YWx1ZTogb3B0LCBsYWJlbDogb3B0IH1cbiAgICAgICAgICA6IHsgdmFsdWU6IG9wdC52YWx1ZSwgbGFiZWw6IG9wdC5sYWJlbCwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9XG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3QuZGF0YSA9IHZpcnR1YWxEYXRhO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0YW5kYXJkIG1vZGU6IGNyZWF0ZSBuaWxlLW9wdGlvbiBlbGVtZW50c1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBhcyBzYXZlIHRyaWdnZXIgLSBPTkxZIGZvciBzaW5nbGUtc2VsZWN0XG4gICAgLy8gTXVsdGktc2VsZWN0IHNob3VsZCBzdGF5IG9wZW4gdW50aWwgdXNlciBjbGlja3Mgb3V0c2lkZVxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCB0cmFjayB2YWx1ZSBjaGFuZ2VzIChuZWVkZWQgZm9yIHZpcnR1YWwgc2Nyb2xsIHdoZXJlIHZhbHVlIHByb3BlcnR5IGRvZXNuJ3QgdXBkYXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHRyYWNrVmFsdWVIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlO1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlT2NjdXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gbmV3VmFsdWUgPyBbbmV3VmFsdWVdIDogW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCB0cmFja1ZhbHVlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogdHJhY2tWYWx1ZUhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgaWYgc2F2ZSB3YXMgYWxyZWFkeSB0cmlnZ2VyZWQgKHRvIHByZXZlbnQgZG91YmxlIHNhdmUpXG4gICAgbGV0IHNhdmVUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBVc2UgbW91c2Vkb3duIG9uIGRvY3VtZW50IHRvIGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0aGUgc2VsZWN0IGFuZCBwb3J0YWxcbiAgICBjb25zdCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gVXNlIGNvbXBvc2VkUGF0aCB0byB0cmF2ZXJzZSBzaGFkb3cgRE9NIGJvdW5kYXJpZXNcbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjbGljayBpcyBpbnNpZGUgdGhlIHNlbGVjdCBlbGVtZW50IG9yIGFueSBuaWxlLXNlbGVjdCByZWxhdGVkIGVsZW1lbnRzXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgb3VyIHNlbGVjdCBlbGVtZW50XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLnNlbGVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5pbGUtc2VsZWN0IHBvcnRhbHMgKHZhcmlvdXMgY2xhc3MgbmFtZXMpXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ25pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX2xpc3Rib3gnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX29wdGlvbnMnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnbmlsZS1vcHRpb24nIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLXNlbGVjdCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciBhbnkgZWxlbWVudCB3aXRoIG5pbGUtc2VsZWN0IGluIGl0cyBjbGFzc1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgJiYgdHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCduaWxlLXNlbGVjdCcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFsc28gY2hlY2sgcG9ydGFsIGNvbnRhaW5lcnMgZGlyZWN0bHlcbiAgICAgIGNvbnN0IHBvcnRhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCwgW2NsYXNzKj1cInNlbGVjdF9fbGlzdGJveFwiXScpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3J0YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb3J0YWxzW2ldLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgLSBzYXZlIGFuZCBleGl0XG4gICAgICBzYXZlVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmIHRoaXMuc2VsZWN0ICYmICF0aGlzLnNlbGVjdC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICB9XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIEFkZCBsaXN0ZW5lciBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGF2b2lkIGNhcHR1cmluZyB0aGUgaW5pdGlhbCBjbGljayB0aGF0IG9wZW5lZCB0aGUgZWRpdG9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIH0sIDUwKTtcbiAgICBcbiAgICAvLyBTdG9yZSBmb3IgY2xlYW51cFxuICAgICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICBjb25zdCBjbGVhckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA/IFtdIDogJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNsZWFyJywgY2xlYXJIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jbGVhcicsIGhhbmRsZXI6IGNsZWFySGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggc2NlbmFyaW9zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICAvLyBFbWl0IHNlYXJjaCBxdWVyeSB0aHJvdWdoIG9uQ2hhbmdlIGZvciBleHRlcm5hbCBoYW5kbGluZ1xuICAgICAgICBjb250ZXh0Lm9uQ2hhbmdlKGN1c3RvbUV2ZW50LmRldGFpbCBhcyBUKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLXNlYXJjaCcsIHNlYXJjaEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLXNlYXJjaCcsIGhhbmRsZXI6IHNlYXJjaEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIGJhc2VkIG9uIHNlbGVjdGlvbiBtb2RlXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogVCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gRW5zdXJlIGFycmF5IGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2YWx1ZSA/IFt2YWx1ZV0gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIC0gcmV0dXJuIHN0cmluZ1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9wdGlvbnMgT2JzZXJ2YWJsZVxuICAgIGlmICh0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgZG9jdW1lbnQgbW91c2Vkb3duIGhhbmRsZXIgaWYgZXhpc3RzXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgIFxuICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlKCk7XG4gICAgICB0aGlzLnNlbGVjdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWdub3JlIGZvY3VzIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHtcbiAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBhIGNoYW5nZSBldmVudCBmaXJlZCwgYWx3YXlzIHVzZSB0cmFja2VkVmFsdWVzIChldmVuIGlmIGVtcHR5ID0gYWxsIHVuY2hlY2tlZCkuXG4gICAgICAvLyBPbmx5IGZhbGwgYmFjayB0byB0aGUgY29tcG9uZW50IHZhbHVlIHdoZW4gbm8gY2hhbmdlIGhhcyBvY2N1cnJlZCB5ZXQuXG4gICAgICBsZXQgdmFsdWVzID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/IHRoaXMudHJhY2tlZFZhbHVlcyA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlcyA/IFt2YWx1ZXNdIDogW10pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgbGV0IHZhbHVlID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/ICh0aGlzLnRyYWNrZWRWYWx1ZXNbMF0gPz8gJycpIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgOiAodmFsdWUgfHwgJycpKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
511
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQW1GRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQTZCLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBVDdELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUd2QixtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBQy9DLGtCQUFhLEdBQWEsRUFBRSxDQUFDLENBQUUsMkNBQTJDO1FBQzFFLHNCQUFpQixHQUFHLEtB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QUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQWlCLENBQUM7SUFDckcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGxpbWl0XG4gKi9cbmxldCBkcm9wZG93blN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3REcm9wZG93blN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1kcm9wZG93bi1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTGltaXQgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGFuZCBlbmFibGUgc2Nyb2xsaW5nICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQge1xuICAgICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fbGlzdGJveCB7XG4gICAgICBtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtaGVpZ2h0OiAyNjBweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fZm9vdGVyIHtcbiAgICAgIGhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBQcmV2ZW50IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gLSB0YXJnZXQgdGhlIG9wdGlvbnMgY29udGFpbmVyICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fb3B0aW9ucyB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbiB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIG5pbGUtb3B0aW9uOjpwYXJ0KGJhc2UpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogRml4IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gYnkgY2hhbmdpbmcgZmxleCBkaXJlY3Rpb24gKi9cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChvcHRpb25fbGFiZWxfY29udGFpbmVyKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbWJvYm94IHN0eWxpbmcgdXNpbmcgOjpwYXJ0KCkgc2VsZWN0b3IgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgLyogVGFnIHNwYWNpbmcgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWcpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgcGFkZGluZzogMXB4IDJweDtcbiAgICB9XG4gICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KHRhZykge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVTZWxlY3QgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGZvciBzaW5nbGUgc2VsZWN0aW9uLCBzdHJpbmdbXSBmb3IgbXVsdGlwbGUpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlU2VsZWN0RWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIGFjY2VwdHNJbml0aWFsS2V5cHJlc3MgPSBmYWxzZTtcbiAgXG4gIHByaXZhdGUgc2VsZWN0PzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRPcHRpb25zOiAoU2VsZWN0T3B0aW9uIHwgc3RyaW5nKVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlczogc3RyaW5nW10gPSBbXTsgIC8vIFRyYWNrIHNlbGVjdGVkIHZhbHVlcyBmb3IgdmlydHVhbCBzY3JvbGxcbiAgcHJpdmF0ZSBoYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlOyAgICAgLy8gV2hldGhlciBhIG5pbGUtY2hhbmdlIGV2ZW50IGhhcyBmaXJlZFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBkcm9wZG93biBoZWlnaHQgc3R5bGVzIG9uY2VcbiAgICBpbmplY3REcm9wZG93blN0eWxlcygpO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgdGhlIHNlbGVjdCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5mb2N1cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG4gICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvbiAtIHZhbHVlIHNob3VsZCBiZSBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFsuLi52YWx1ZV07ICAvLyBJbml0aWFsaXplIHRyYWNrZWQgdmFsdWVzXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWUgPyBTdHJpbmcodmFsdWUpIDogJyc7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSB2YWx1ZSA/IFtTdHJpbmcodmFsdWUpXSA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRoaXMub3B0aW9ucy5ob2lzdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3QucGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVuYWJsZVZpcnR1YWxTY3JvbGwgPSB0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZUxvY2FsU2VhcmNoID0gdGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaDtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcG9ydGFsIG1vZGUgYnkgZGVmYXVsdCB0byBwcmV2ZW50IGRyb3Bkb3duIGNsaXBwaW5nIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbCAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcmV2ZW50IHdpZHRoIHN5bmNpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3Qubm9XaWR0aFN5bmMgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvcHRpb25zIGR5bmFtaWNhbGx5IHdoaWxlIGVkaXRvciBpcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBGb3IgdmlydHVhbCBzY3JvbGwgbW9kZSwganVzdCB1cGRhdGUgdGhlIGRhdGEgcHJvcGVydHkgKG5vIERPTSBjaGlsZHJlbiB0byBjbGVhcilcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgbW9kZTogY2xlYXIgZXhpc3RpbmcgbmlsZS1vcHRpb24gZWxlbWVudHMgZmlyc3RcbiAgICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnJlbW92ZUNoaWxkKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIFdoZW4gZW5hYmxlVmlydHVhbFNjcm9sbCBpcyB0cnVlLCB1c2VzIGRhdGEgcHJvcGVydHkgaW5zdGVhZCBvZiBET00gZWxlbWVudHNcbiAgICogQHNlZSBodHRwczovL25pbGUuYXF1ZXJhbGFicy5jb20vc2VsZWN0LXZpcnR1YWw/dGhlbWU9ZW50ZXJwcmlzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHJlbmRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBbmRBcHBlbmRPcHRpb25zKG9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBWaXJ0dWFsIHNjcm9sbCBtb2RlOiB1c2UgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgY29uc3QgdmlydHVhbERhdGEgPSBvcHRpb25zLm1hcChvcHQgPT4gXG4gICAgICAgIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnIFxuICAgICAgICAgID8geyB2YWx1ZTogb3B0LCBsYWJlbDogb3B0IH1cbiAgICAgICAgICA6IHsgdmFsdWU6IG9wdC52YWx1ZSwgbGFiZWw6IG9wdC5sYWJlbCwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9XG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3QuZGF0YSA9IHZpcnR1YWxEYXRhO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0YW5kYXJkIG1vZGU6IGNyZWF0ZSBuaWxlLW9wdGlvbiBlbGVtZW50c1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBhcyBzYXZlIHRyaWdnZXIgLSBPTkxZIGZvciBzaW5nbGUtc2VsZWN0XG4gICAgLy8gTXVsdGktc2VsZWN0IHNob3VsZCBzdGF5IG9wZW4gdW50aWwgdXNlciBjbGlja3Mgb3V0c2lkZVxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCB0cmFjayB2YWx1ZSBjaGFuZ2VzIChuZWVkZWQgZm9yIHZpcnR1YWwgc2Nyb2xsIHdoZXJlIHZhbHVlIHByb3BlcnR5IGRvZXNuJ3QgdXBkYXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHRyYWNrVmFsdWVIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlO1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlT2NjdXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gbmV3VmFsdWUgPyBbbmV3VmFsdWVdIDogW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCB0cmFja1ZhbHVlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogdHJhY2tWYWx1ZUhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgaWYgc2F2ZSB3YXMgYWxyZWFkeSB0cmlnZ2VyZWQgKHRvIHByZXZlbnQgZG91YmxlIHNhdmUpXG4gICAgbGV0IHNhdmVUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBVc2UgbW91c2Vkb3duIG9uIGRvY3VtZW50IHRvIGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0aGUgc2VsZWN0IGFuZCBwb3J0YWxcbiAgICBjb25zdCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gVXNlIGNvbXBvc2VkUGF0aCB0byB0cmF2ZXJzZSBzaGFkb3cgRE9NIGJvdW5kYXJpZXNcbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjbGljayBpcyBpbnNpZGUgdGhlIHNlbGVjdCBlbGVtZW50IG9yIGFueSBuaWxlLXNlbGVjdCByZWxhdGVkIGVsZW1lbnRzXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgb3VyIHNlbGVjdCBlbGVtZW50XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLnNlbGVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5pbGUtc2VsZWN0IHBvcnRhbHMgKHZhcmlvdXMgY2xhc3MgbmFtZXMpXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ25pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX2xpc3Rib3gnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX29wdGlvbnMnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnbmlsZS1vcHRpb24nIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLXNlbGVjdCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciBhbnkgZWxlbWVudCB3aXRoIG5pbGUtc2VsZWN0IGluIGl0cyBjbGFzc1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgJiYgdHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCduaWxlLXNlbGVjdCcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFsc28gY2hlY2sgcG9ydGFsIGNvbnRhaW5lcnMgZGlyZWN0bHlcbiAgICAgIGNvbnN0IHBvcnRhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCwgW2NsYXNzKj1cInNlbGVjdF9fbGlzdGJveFwiXScpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3J0YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb3J0YWxzW2ldLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgLSBzYXZlIGFuZCBleGl0XG4gICAgICBzYXZlVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmIHRoaXMuc2VsZWN0ICYmICF0aGlzLnNlbGVjdC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICB9XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIEFkZCBsaXN0ZW5lciBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGF2b2lkIGNhcHR1cmluZyB0aGUgaW5pdGlhbCBjbGljayB0aGF0IG9wZW5lZCB0aGUgZWRpdG9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIH0sIDUwKTtcbiAgICBcbiAgICAvLyBTdG9yZSBmb3IgY2xlYW51cFxuICAgICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICBjb25zdCBjbGVhckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA/IFtdIDogJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNsZWFyJywgY2xlYXJIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jbGVhcicsIGhhbmRsZXI6IGNsZWFySGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggc2NlbmFyaW9zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICAvLyBFbWl0IHNlYXJjaCBxdWVyeSB0aHJvdWdoIG9uQ2hhbmdlIGZvciBleHRlcm5hbCBoYW5kbGluZ1xuICAgICAgICBjb250ZXh0Lm9uQ2hhbmdlKGN1c3RvbUV2ZW50LmRldGFpbCBhcyBUKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLXNlYXJjaCcsIHNlYXJjaEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLXNlYXJjaCcsIGhhbmRsZXI6IHNlYXJjaEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIGJhc2VkIG9uIHNlbGVjdGlvbiBtb2RlXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogVCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gRW5zdXJlIGFycmF5IGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2YWx1ZSA/IFt2YWx1ZV0gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIC0gcmV0dXJuIHN0cmluZ1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9wdGlvbnMgT2JzZXJ2YWJsZVxuICAgIGlmICh0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgZG9jdW1lbnQgbW91c2Vkb3duIGhhbmRsZXIgaWYgZXhpc3RzXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgIFxuICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlKCk7XG4gICAgICB0aGlzLnNlbGVjdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWdub3JlIGZvY3VzIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHtcbiAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBhIGNoYW5nZSBldmVudCBmaXJlZCwgYWx3YXlzIHVzZSB0cmFja2VkVmFsdWVzIChldmVuIGlmIGVtcHR5ID0gYWxsIHVuY2hlY2tlZCkuXG4gICAgICAvLyBPbmx5IGZhbGwgYmFjayB0byB0aGUgY29tcG9uZW50IHZhbHVlIHdoZW4gbm8gY2hhbmdlIGhhcyBvY2N1cnJlZCB5ZXQuXG4gICAgICBsZXQgdmFsdWVzID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/IHRoaXMudHJhY2tlZFZhbHVlcyA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlcyA/IFt2YWx1ZXNdIDogW10pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgbGV0IHZhbHVlID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/ICh0aGlzLnRyYWNrZWRWYWx1ZXNbMF0gPz8gJycpIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgOiAodmFsdWUgfHwgJycpKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -3,15 +3,28 @@ import { EditMode, NavigationKey, NavigationDirection } from '../../../models/ce
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
export class StCellComponent {
|
|
6
|
-
constructor() {
|
|
6
|
+
constructor(cdr) {
|
|
7
|
+
this.cdr = cdr;
|
|
7
8
|
this.editMode = EditMode.CLICK;
|
|
8
9
|
this.cellChange = new EventEmitter();
|
|
9
10
|
this.cellEdit = new EventEmitter();
|
|
10
11
|
this.cellSave = new EventEmitter();
|
|
11
12
|
this.cellCancel = new EventEmitter();
|
|
12
13
|
this.cellSaveAndNavigate = new EventEmitter();
|
|
14
|
+
this.cellLoading = false;
|
|
13
15
|
}
|
|
14
16
|
ngOnInit() {
|
|
17
|
+
this.cell.onStateChange(() => {
|
|
18
|
+
this.cellLoading = !!this.cell.getState().isLoading;
|
|
19
|
+
try {
|
|
20
|
+
this.cdr.detectChanges();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// View may have been destroyed; safely ignore
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
// Pick up loading state that was set before this component was created
|
|
27
|
+
this.cellLoading = !!this.cell.getState().isLoading;
|
|
15
28
|
// Subscribe to editing position changes
|
|
16
29
|
// When another cell starts editing, save this cell if it's currently editing
|
|
17
30
|
if (this.tableState && this.columnIndex !== undefined) {
|
|
@@ -362,12 +375,12 @@ export class StCellComponent {
|
|
|
362
375
|
}
|
|
363
376
|
}
|
|
364
377
|
}
|
|
365
|
-
StCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
366
|
-
StCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StCellComponent, selector: "st-cell", inputs: { cell: "cell", editMode: "editMode", tableState: "tableState", tableConfig: "tableConfig", columnIndex: "columnIndex" }, outputs: { cellChange: "cellChange", cellEdit: "cellEdit", cellSave: "cellSave", cellCancel: "cellCancel", cellSaveAndNavigate: "cellSaveAndNavigate" }, host: { listeners: { "keydown": "onCellKeyDown($event)" } }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-editor nile-select::part(combobox){border:none!important;outline:none!important;box-shadow:none!important}.cell-editor nile-select::part(tag){border:none!important;outline:none!important}.cell-editor nile-select::part(listbox){border:none!important}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
378
|
+
StCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StCellComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
379
|
+
StCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StCellComponent, selector: "st-cell", inputs: { cell: "cell", editMode: "editMode", tableState: "tableState", tableConfig: "tableConfig", columnIndex: "columnIndex" }, outputs: { cellChange: "cellChange", cellEdit: "cellEdit", cellSave: "cellSave", cellCancel: "cellCancel", cellSaveAndNavigate: "cellSaveAndNavigate" }, host: { listeners: { "keydown": "onCellKeyDown($event)" } }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable,\n 'loading': cellLoading\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Loading Indicator -->\n <div *ngIf=\"cellLoading\" class=\"cell-loading\">\n <div class=\"cell-spinner\"></div>\n </div>\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing() && !cellLoading\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box;max-height:28px}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-editor nile-select::part(combobox){border:none!important;outline:none!important;box-shadow:none!important;max-height:28px;overflow:hidden;flex-wrap:nowrap}.cell-editor nile-select::part(tag){border:none!important;outline:none!important;margin-right:2px;padding:1px 2px;flex-shrink:0}.cell-editor nile-select::part(listbox){border:none!important}.st-cell.loading{pointer-events:none;opacity:.6}.cell-loading{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.cell-spinner{width:14px;height:14px;border:2px solid #e2e8f0;border-top-color:#4a90d9;border-radius:50%;animation:cell-spin .6s linear infinite}@keyframes cell-spin{to{transform:rotate(360deg)}}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
367
380
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StCellComponent, decorators: [{
|
|
368
381
|
type: Component,
|
|
369
|
-
args: [{ selector: 'st-cell', template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-editor nile-select::part(combobox){border:none!important;outline:none!important;box-shadow:none!important}.cell-editor nile-select::part(tag){border:none!important;outline:none!important}.cell-editor nile-select::part(listbox){border:none!important}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"] }]
|
|
370
|
-
}], ctorParameters: function () { return []; }, propDecorators: { cell: [{
|
|
382
|
+
args: [{ selector: 'st-cell', template: "<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell.isEditing(),\n 'dirty': cell.isDirty(),\n 'invalid': !cell.isValid(),\n 'readonly': !isEditable,\n 'loading': cellLoading\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Loading Indicator -->\n <div *ngIf=\"cellLoading\" class=\"cell-loading\">\n <div class=\"cell-spinner\"></div>\n </div>\n\n <!-- Display Mode with Template Support -->\n <ng-container *ngIf=\"!cell.isEditing() && !cellLoading\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>", styles: [".st-cell{position:relative;cursor:pointer;transition:background-color .2s;min-height:28px;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;box-sizing:border-box;max-height:28px}.st-cell.invalid{border-left:2px solid #e53e3e}.st-cell.readonly{cursor:default}.cell-display{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-content:center;width:100%;height:100%;padding-left:8px;padding-right:8px;font-size:12px;font-weight:300;letter-spacing:.2px;line-height:14px}.cell-editor{display:flex;height:100%;width:100%}.cell-editor input,.cell-editor select,.cell-editor textarea{width:100%;border:none;outline:none;font:inherit;padding:0;background:transparent;color:inherit}.cell-editor input[type=number]{text-align:inherit}.cell-editor nile-select::part(combobox){border:none!important;outline:none!important;box-shadow:none!important;max-height:28px;overflow:hidden;flex-wrap:nowrap}.cell-editor nile-select::part(tag){border:none!important;outline:none!important;margin-right:2px;padding:1px 2px;flex-shrink:0}.cell-editor nile-select::part(listbox){border:none!important}.st-cell.loading{pointer-events:none;opacity:.6}.cell-loading{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.cell-spinner{width:14px;height:14px;border:2px solid #e2e8f0;border-top-color:#4a90d9;border-radius:50%;animation:cell-spin .6s linear infinite}@keyframes cell-spin{to{transform:rotate(360deg)}}.cell-error{position:absolute;right:4px;top:50%;transform:translateY(-50%);color:#e53e3e;font-weight:700;cursor:help;font-size:14px}\n"] }]
|
|
383
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { cell: [{
|
|
371
384
|
type: Input
|
|
372
385
|
}], editMode: [{
|
|
373
386
|
type: Input
|
|
@@ -394,4 +407,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
394
407
|
type: HostListener,
|
|
395
408
|
args: ['keydown', ['$event']]
|
|
396
409
|
}] } });
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtY2VsbC9zdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jZWxsL3N0LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBOEIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNKLE9BQU8sRUFBa0UsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFTMUosTUFBTSxPQUFPLGVBQWU7SUFtQjFCO1FBakJTLGFBQVEsR0FBYSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBS25DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNqRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDN0MsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzdDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNqRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBMEQsQ0FBQztJQVN4RyxDQUFDO0lBRUosUUFBUTtRQUNOLHdDQUF3QztRQUN4Qyw2RUFBNkU7UUFDN0UsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQ3JELElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxRQUFR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Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUU2QyxlQUFlO3NCQUFsRSxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkEwRmxELGFBQWE7c0JBRFosWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLmNsYXNzJztcbmltcG9ydCB7IENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbEVkaXRFdmVudCwgQ2VsbFNhdmVFdmVudCwgQ2VsbENoYW5nZUV2ZW50LCBDZWxsQ2FuY2VsRXZlbnQsIEVkaXRNb2RlLCBOYXZpZ2F0aW9uS2V5LCBOYXZpZ2F0aW9uRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3QtY2VsbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNlbGwhOiBDZWxsPGFueT47XG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBFZGl0TW9kZSA9IEVkaXRNb2RlLkNMSUNLO1xuICBASW5wdXQoKSB0YWJsZVN0YXRlPzogVGFibGVTdGF0ZTtcbiAgQElucHV0KCkgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgY29sdW1uSW5kZXg/OiBudW1iZXI7XG4gIFxuICBAT3V0cHV0KCkgY2VsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxFZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFNhdmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDYW5jZWxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxTYXZlQW5kTmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHtldmVudDogS2V5Ym9hcmRFdmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9ufT4oKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBlZGl0b3JDb250YWluZXI/OiBFbGVtZW50UmVmO1xuICBcbiAgcHJpdmF0ZSBlZGl0b3JDbGVhbnVwPzogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbj86IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFN1YnNjcmliZSB0byBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICAvLyBXaGVuIGFub3RoZXIgY2VsbCBzdGFydHMgZWRpdGluZywgc2F2ZSB0aGlzIGNlbGwgaWYgaXQncyBjdXJyZW50bHkgZWRpdGluZ1xuICAgIGlmICh0aGlzLnRhYmxlU3RhdGUgJiYgdGhpcy5jb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVTdGF0ZS5lZGl0aW5nQ2VsbFBvc2l0aW9uJC5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhpcyBjZWxsIGlzIGN1cnJlbnRseSBlZGl0aW5nXG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgcm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEFuZCB0aGUgbmV3IGVkaXRpbmcgcG9zaXRpb24gaXMgYSBkaWZmZXJlbnQgY2VsbFxuICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiBcbiAgICAgICAgICAgICAgKHBvc2l0aW9uLnJvd0luZGV4ICE9PSByb3dJbmRleCB8fCBwb3NpdGlvbi5jb2x1bW5JbmRleCAhPT0gdGhpcy5jb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHNhdmUgdGhpcyBjZWxsXG4gICAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJZiBjZWxsIGlzIGFscmVhZHkgaW4gZWRpdGluZyBtb2RlLCByZW5kZXIgdGhlIGVkaXRvclxuICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyRWRpdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwRWRpdG9yKCk7XG4gICAgXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICBpZiAodGhpcy5lZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZWRpdGluZ1Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgIHJldHVybiBjb25maWcuZWRpdGFibGUgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFsaWRhdGlvbkVycm9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gUmVhZCB2YWxpZGF0aW9uIHN0YXRlIHdpdGhvdXQgdHJpZ2dlcmluZyB2YWxpZGF0aW9uXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKTtcbiAgICBcbiAgICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHN0YXRlLmVycm9ycyAmJiBBcnJheS5pc0FycmF5KHN0YXRlLmVycm9ycykgJiYgc3RhdGUuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcnMuam9pbignLCAnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gT25seSByZXR1cm4gZ2VuZXJpYyBtZXNzYWdlIGlmIGNlbGwgaXMgbWFya2VkIGFzIGludmFsaWRcbiAgICBpZiAoIXRoaXMuY2VsbC5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCB2YWx1ZSc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaGFzQ2VsbFRlbXBsYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICByZXR1cm4gISFjb25maWcuY2VsbFRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGNlbGxUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKS5jZWxsVGVtcGxhdGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCB0ZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICByb3dJbmRleDogdGhpcy5jZWxsLmdldFJvd0luZGV4KClcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uQ2VsbEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBpZiB0aGlzIGNlbGwgaXMgZm9jdXNlZFxuICAgIGlmICghdGhpcy5jZWxsLmlzRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBOYXZpZ2F0aW9uS2V5IGVudW0gZm9yIHR5cGUtc2FmZSBrZXkgY2hlY2tpbmdcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSBhcyBOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuRU5URVI6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICAvLyBTYXZlIGFuZCBsZXQgbmF2aWdhdGlvbiBoYXBwZW5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuc2F2ZUVkaXQodGhpcy5jZWxsLmdldFZhbHVlKCkpO1xuICAgICAgICAgIC8vIEVtaXQgZXZlbnQgdG8gdHJpZ2dlciBuYXZpZ2F0aW9uIGRvd25cbiAgICAgICAgICB0aGlzLmNlbGxTYXZlQW5kTmF2aWdhdGUuZW1pdCh7IGV2ZW50LCBkaXJlY3Rpb246IE5hdmlnYXRpb25EaXJlY3Rpb24uRE9XTiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBub3QgZWRpdGluZywgbGV0IGRpcmVjdGl2ZSBoYW5kbGUgbmF2aWdhdGlvblxuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuVEFCOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgLy8gU2F2ZSBhbmQgbGV0IG5hdmlnYXRpb24gaGFwcGVuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IE5hdmlnYXRpb25EaXJlY3Rpb24uTEVGVCA6IE5hdmlnYXRpb25EaXJlY3Rpb24uUklHSFQ7XG4gICAgICAgICAgdGhpcy5jZWxsU2F2ZUFuZE5hdmlnYXRlLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vdCBlZGl0aW5nLCBsZXQgZGlyZWN0aXZlIGhhbmRsZSBuYXZpZ2F0aW9uXG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5FU0NBUEU6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICAgIC8vIFN0YXkgZm9jdXNlZCBvbiBzYW1lIGNlbGwgKG5vIG5hdmlnYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFscGhhbnVtZXJpYyBrZXlzIHdoZW4gZm9jdXNlZCBidXQgbm90IGVkaXRpbmdcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5pc0FscGhhbnVtZXJpY0tleShldmVudCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYW5FZGl0VmlhS2V5Ym9hcmQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gU3RhcnQgZWRpdGluZyB3aXRoIHRoZSBwcmVzc2VkIGtleSBhcyBpbml0aWFsIHZhbHVlXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFdpdGhLZXkoZXZlbnQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgRW50ZXIga2V5IGNhbiB0cmlnZ2VyIGVkaXRpbmdcbiAgICogVXNpbmcgRWRpdE1vZGUgZW51bSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgY2FuRWRpdFZpYUVudGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdGFibGUgJiYgXG4gICAgICAgICAgICh0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5FTlRFUiB8fCB0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5DTElDSyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXlib2FyZCBjYW4gdHJpZ2dlciBlZGl0aW5nIChmb3IgYWxwaGFudW1lcmljIGFuZCBkb3VibGUtY2xpY2spXG4gICAqL1xuICBwcml2YXRlIGNhbkVkaXRWaWFLZXlib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRhYmxlICYmIFxuICAgICAgICAgICAodGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRU5URVIgfHwgdGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuQ0xJQ0spO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBrZXkgaXMgYWxwaGFudW1lcmljIChzaW5nbGUgY2hhcmFjdGVyKVxuICAgKi9cbiAgcHJpdmF0ZSBpc0FscGhhbnVtZXJpY0tleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIC8vIFNpbmdsZSBjaGFyYWN0ZXIga2V5cyAobGV0dGVycywgbnVtYmVycywgc3ltYm9scylcbiAgICByZXR1cm4gZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICB9XG4gIFxuICAvKipcbiAgICogU3RhcnQgZWRpdGluZyB3aXRoIGEgc3BlY2lmaWMga2V5IGFzIHRoZSBpbml0aWFsIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0RWRpdFdpdGhLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjYW5TdGFydCA9IHRoaXMuY2VsbC5zdGFydEVkaXQoKTtcbiAgICBpZiAoY2FuU3RhcnQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGNvbHVtbi5lZGl0b3I7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgc2V0IGluaXRpYWwga2V5cHJlc3MgdmFsdWUgaWYgZWRpdG9yIGFjY2VwdHMgaXRcbiAgICAgIC8vIERlZmF1bHQgdG8gdHJ1ZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGVkaXRvcnNcbiAgICAgIGNvbnN0IGFjY2VwdHNLZXlwcmVzcyA9IGVkaXRvcj8uYWNjZXB0c0luaXRpYWxLZXlwcmVzcyAhPT0gZmFsc2U7XG4gICAgICBcbiAgICAgIGlmIChhY2NlcHRzS2V5cHJlc3MpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBjdXJyZW50IHZhbHVlIHdpdGggdGhlIGtleVxuICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUoa2V5LCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogYWNjZXB0c0tleXByZXNzID8ga2V5IDogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckVkaXRvcigpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gU2luZ2xlIGNsaWNrIG5vdyBvbmx5IGZvY3VzZXMsIGRvZXNuJ3Qgc3RhcnQgZWRpdGluZ1xuICAgIC8vIEZvY3VzIGlzIGhhbmRsZWQgYnkgcGFyZW50IHN0LXRhYmxlIGNvbXBvbmVudFxuICB9XG5cbiAgb25DZWxsRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gRG91YmxlLWNsaWNrIHN0YXJ0cyBlZGl0aW5nIHJlZ2FyZGxlc3Mgb2YgRWRpdE1vZGUgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiAhdGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhblN0YXJ0ID0gdGhpcy5jZWxsLnN0YXJ0RWRpdCgpO1xuICAgIGlmIChjYW5TdGFydCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBOb3RpZnkgVGFibGVTdGF0ZSB0aGF0IHRoaXMgY2VsbCBpcyBub3cgZWRpdGluZ1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSAmJiB0aGlzLmNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlU3RhdGUuc2V0RWRpdGluZ0NlbGwocm93SW5kZXgsIHRoaXMuY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gcmVuZGVyIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgZWRpdG9yID0gY29sdW1uLmVkaXRvcjtcbiAgICBcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlZGl0b3IgY29uZmlndXJlZCBmb3IgY29sdW1uOicsIGNvbHVtbi5rZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jZWxsLmdldFZhbHVlKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBcbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxhbnk+ID0ge1xuICAgICAgdmFsdWUsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZWFnZXIgdmFsaWRhdGlvbiBpZiBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnPy52YWxpZGF0aW9uPy5tb2RlID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGNlbGwgdmFsdWUgdGVtcG9yYXJpbHkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUobmV3VmFsdWUsIHRydWUpOyAvLyBza2lwIHZhbGlkYXRpb24gdG8gYXZvaWQgZG91YmxlIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLnRyaWdnZXJFYWdlclZhbGlkYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlRWRpdChuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWxsIGVkaXRvcidzIGVkaXQgbWV0aG9kXG4gICAgZWRpdG9yLmVkaXQoY29udGV4dCk7XG4gICAgXG4gICAgLy8gU3RvcmUgY2xlYW51cCBjYWxsYmFja1xuICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveSkge1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRWRpdChuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2VsbC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5jZWxsLnNhdmVFZGl0KG5ld1ZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBzdGF0ZSAobGF6eSBtb2RlIC0gb24gc2F2ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50XG4gICAgICBjb25zdCBzYXZlRXZlbnQ6IENlbGxTYXZlRXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogY2VsbFN0YXRlLmVycm9yID8gW2NlbGxTdGF0ZS5lcnJvcl0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsU2F2ZS5lbWl0KHNhdmVFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICBjb25zdCBjaGFuZ2VFdmVudDogQ2VsbENoYW5nZUV2ZW50ID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIG9sZFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICB3YXNWYWxpZDogd2FzVmFsaWQsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgICB9XG4gICAgLy8gSWYgdmFsaWRhdGlvbiBmYWlscywga2VlcCBlZGl0aW5nIG1vZGVcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlIGluIFRhYmxlU3RhdGVcbiAgICogQ2FsbGVkIG9uIHNhdmUgKGxhenkgbW9kZSkgb3Igb24gY2hhbmdlIChlYWdlciBtb2RlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2VsbC5pc1ZhbGlkKCk7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKS5lcnJvcjtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgIFxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHJvd0luZGV4IGlzIGRlZmluZWRcbiAgICBpZiAocm93SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMudGFibGVTdGF0ZS51cGRhdGVDZWxsVmFsaWRhdGlvbihcbiAgICAgIHJvd0luZGV4LFxuICAgICAgY29sdW1uLmtleSxcbiAgICAgIGlzVmFsaWQsXG4gICAgICBlcnJvclxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGVhZ2VyIHZhbGlkYXRpb24gKG9uIGV2ZXJ5IGNoYW5nZSlcbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckVhZ2VyVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSB8fCAhdGhpcy50YWJsZUNvbmZpZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlID0gdGhpcy50YWJsZUNvbmZpZy52YWxpZGF0aW9uPy5tb2RlIHx8ICdsYXp5JztcbiAgICBpZiAodmFsaWRhdGlvbk1vZGUgIT09ICdlYWdlcicpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZS12YWxpZGF0ZSB0aGUgY2VsbFxuICAgIHRoaXMuY2VsbC52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy50YWJsZVN0YXRlLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2FuY2VsRXZlbnQ6IENlbGxDYW5jZWxFdmVudCA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHZhbHVlOiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGxTdGF0ZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgcm93RGF0YTogdGhpcy5jZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNlbGwuY2FuY2VsRWRpdCgpO1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGNhbmNlbEV2ZW50KTtcbiAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3JDbGVhbnVwKSB7XG4gICAgICB0aGlzLmVkaXRvckNsZWFudXAoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdC1jZWxsXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZWRpdGluZyc6IGNlbGwuaXNFZGl0aW5nKCksXG4gICAgJ2RpcnR5JzogY2VsbC5pc0RpcnR5KCksXG4gICAgJ2ludmFsaWQnOiAhY2VsbC5pc1ZhbGlkKCksXG4gICAgJ3JlYWRvbmx5JzogIWlzRWRpdGFibGVcbiAgfVwiXG4gIChjbGljayk9XCJvbkNlbGxDbGljaygpXCIgXG4gIChkYmxjbGljayk9XCJvbkNlbGxEb3VibGVDbGljaygpXCI+XG5cbiAgPCEtLSBEaXNwbGF5IE1vZGUgd2l0aCBUZW1wbGF0ZSBTdXBwb3J0IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNFZGl0aW5nKClcIj5cbiAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQ2VsbFRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRGVmYXVsdCBUZXh0IFJlbmRlcmluZyAtLT5cbiAgICA8c3BhbiAqbmdJZj1cIiFoYXNDZWxsVGVtcGxhdGVcIiBjbGFzcz1cImNlbGwtZGlzcGxheVwiPlxuICAgICAge3sgY2VsbC5yZW5kZXIoKSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFZGl0IE1vZGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJjZWxsLmlzRWRpdGluZygpXCIgY2xhc3M9XCJjZWxsLWVkaXRvclwiICNlZGl0b3JDb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
410
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtY2VsbC9zdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jZWxsL3N0LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBOEIsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQWtFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUzFKLE1BQU0sT0FBTyxlQUFlO0lBcUIxQixZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBcEJ2QixhQUFRLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFJcEcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFReEIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElB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LENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7U0FDaEM7SUFDSCxDQUFDOzs0R0EvYlUsZUFBZTtnR0FBZixlQUFlLHNlQWFZLFVBQVUsNkJDekJsRCxnK0JBZ0NNOzJGRHBCTyxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7d0dBS1YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRTZDLGVBQWU7c0JBQWxFLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXlHbEQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgSG9zdExpc3RlbmVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLmNsYXNzJztcbmltcG9ydCB7IENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbEVkaXRFdmVudCwgQ2VsbFNhdmVFdmVudCwgQ2VsbENoYW5nZUV2ZW50LCBDZWxsQ2FuY2VsRXZlbnQsIEVkaXRNb2RlLCBOYXZpZ2F0aW9uS2V5LCBOYXZpZ2F0aW9uRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3QtY2VsbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNlbGwhOiBDZWxsPGFueT47XG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBFZGl0TW9kZSA9IEVkaXRNb2RlLkNMSUNLO1xuICBASW5wdXQoKSB0YWJsZVN0YXRlPzogVGFibGVTdGF0ZTtcbiAgQElucHV0KCkgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgY29sdW1uSW5kZXg/OiBudW1iZXI7XG4gIFxuICBAT3V0cHV0KCkgY2VsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxFZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFNhdmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDYW5jZWxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxTYXZlQW5kTmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHtldmVudDogS2V5Ym9hcmRFdmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9ufT4oKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBlZGl0b3JDb250YWluZXI/OiBFbGVtZW50UmVmO1xuICBcbiAgcHVibGljIGNlbGxMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBlZGl0b3JDbGVhbnVwPzogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbj86IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbC5vblN0YXRlQ2hhbmdlKCgpID0+IHtcbiAgICAgIHRoaXMuY2VsbExvYWRpbmcgPSAhIXRoaXMuY2VsbC5nZXRTdGF0ZSgpLmlzTG9hZGluZztcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWaWV3IG1heSBoYXZlIGJlZW4gZGVzdHJveWVkOyBzYWZlbHkgaWdub3JlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBQaWNrIHVwIGxvYWRpbmcgc3RhdGUgdGhhdCB3YXMgc2V0IGJlZm9yZSB0aGlzIGNvbXBvbmVudCB3YXMgY3JlYXRlZFxuICAgIHRoaXMuY2VsbExvYWRpbmcgPSAhIXRoaXMuY2VsbC5nZXRTdGF0ZSgpLmlzTG9hZGluZztcblxuICAgIC8vIFN1YnNjcmliZSB0byBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICAvLyBXaGVuIGFub3RoZXIgY2VsbCBzdGFydHMgZWRpdGluZywgc2F2ZSB0aGlzIGNlbGwgaWYgaXQncyBjdXJyZW50bHkgZWRpdGluZ1xuICAgIGlmICh0aGlzLnRhYmxlU3RhdGUgJiYgdGhpcy5jb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVTdGF0ZS5lZGl0aW5nQ2VsbFBvc2l0aW9uJC5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhpcyBjZWxsIGlzIGN1cnJlbnRseSBlZGl0aW5nXG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgcm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEFuZCB0aGUgbmV3IGVkaXRpbmcgcG9zaXRpb24gaXMgYSBkaWZmZXJlbnQgY2VsbFxuICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiBcbiAgICAgICAgICAgICAgKHBvc2l0aW9uLnJvd0luZGV4ICE9PSByb3dJbmRleCB8fCBwb3NpdGlvbi5jb2x1bW5JbmRleCAhPT0gdGhpcy5jb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHNhdmUgdGhpcyBjZWxsXG4gICAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJZiBjZWxsIGlzIGFscmVhZHkgaW4gZWRpdGluZyBtb2RlLCByZW5kZXIgdGhlIGVkaXRvclxuICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyRWRpdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwRWRpdG9yKCk7XG4gICAgXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICBpZiAodGhpcy5lZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZWRpdGluZ1Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgIHJldHVybiBjb25maWcuZWRpdGFibGUgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFsaWRhdGlvbkVycm9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gUmVhZCB2YWxpZGF0aW9uIHN0YXRlIHdpdGhvdXQgdHJpZ2dlcmluZyB2YWxpZGF0aW9uXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKTtcbiAgICBcbiAgICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHN0YXRlLmVycm9ycyAmJiBBcnJheS5pc0FycmF5KHN0YXRlLmVycm9ycykgJiYgc3RhdGUuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcnMuam9pbignLCAnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gT25seSByZXR1cm4gZ2VuZXJpYyBtZXNzYWdlIGlmIGNlbGwgaXMgbWFya2VkIGFzIGludmFsaWRcbiAgICBpZiAoIXRoaXMuY2VsbC5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCB2YWx1ZSc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaGFzQ2VsbFRlbXBsYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICByZXR1cm4gISFjb25maWcuY2VsbFRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGNlbGxUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKS5jZWxsVGVtcGxhdGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCB0ZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICByb3dJbmRleDogdGhpcy5jZWxsLmdldFJvd0luZGV4KClcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uQ2VsbEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBpZiB0aGlzIGNlbGwgaXMgZm9jdXNlZFxuICAgIGlmICghdGhpcy5jZWxsLmlzRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBOYXZpZ2F0aW9uS2V5IGVudW0gZm9yIHR5cGUtc2FmZSBrZXkgY2hlY2tpbmdcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSBhcyBOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuRU5URVI6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICAvLyBTYXZlIGFuZCBsZXQgbmF2aWdhdGlvbiBoYXBwZW5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuc2F2ZUVkaXQodGhpcy5jZWxsLmdldFZhbHVlKCkpO1xuICAgICAgICAgIC8vIEVtaXQgZXZlbnQgdG8gdHJpZ2dlciBuYXZpZ2F0aW9uIGRvd25cbiAgICAgICAgICB0aGlzLmNlbGxTYXZlQW5kTmF2aWdhdGUuZW1pdCh7IGV2ZW50LCBkaXJlY3Rpb246IE5hdmlnYXRpb25EaXJlY3Rpb24uRE9XTiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBub3QgZWRpdGluZywgbGV0IGRpcmVjdGl2ZSBoYW5kbGUgbmF2aWdhdGlvblxuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuVEFCOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgLy8gU2F2ZSBhbmQgbGV0IG5hdmlnYXRpb24gaGFwcGVuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IE5hdmlnYXRpb25EaXJlY3Rpb24uTEVGVCA6IE5hdmlnYXRpb25EaXJlY3Rpb24uUklHSFQ7XG4gICAgICAgICAgdGhpcy5jZWxsU2F2ZUFuZE5hdmlnYXRlLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vdCBlZGl0aW5nLCBsZXQgZGlyZWN0aXZlIGhhbmRsZSBuYXZpZ2F0aW9uXG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5FU0NBUEU6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICAgIC8vIFN0YXkgZm9jdXNlZCBvbiBzYW1lIGNlbGwgKG5vIG5hdmlnYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFscGhhbnVtZXJpYyBrZXlzIHdoZW4gZm9jdXNlZCBidXQgbm90IGVkaXRpbmdcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5pc0FscGhhbnVtZXJpY0tleShldmVudCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYW5FZGl0VmlhS2V5Ym9hcmQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gU3RhcnQgZWRpdGluZyB3aXRoIHRoZSBwcmVzc2VkIGtleSBhcyBpbml0aWFsIHZhbHVlXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFdpdGhLZXkoZXZlbnQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgRW50ZXIga2V5IGNhbiB0cmlnZ2VyIGVkaXRpbmdcbiAgICogVXNpbmcgRWRpdE1vZGUgZW51bSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgY2FuRWRpdFZpYUVudGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdGFibGUgJiYgXG4gICAgICAgICAgICh0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5FTlRFUiB8fCB0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5DTElDSyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXlib2FyZCBjYW4gdHJpZ2dlciBlZGl0aW5nIChmb3IgYWxwaGFudW1lcmljIGFuZCBkb3VibGUtY2xpY2spXG4gICAqL1xuICBwcml2YXRlIGNhbkVkaXRWaWFLZXlib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRhYmxlICYmIFxuICAgICAgICAgICAodGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRU5URVIgfHwgdGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuQ0xJQ0spO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBrZXkgaXMgYWxwaGFudW1lcmljIChzaW5nbGUgY2hhcmFjdGVyKVxuICAgKi9cbiAgcHJpdmF0ZSBpc0FscGhhbnVtZXJpY0tleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIC8vIFNpbmdsZSBjaGFyYWN0ZXIga2V5cyAobGV0dGVycywgbnVtYmVycywgc3ltYm9scylcbiAgICByZXR1cm4gZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICB9XG4gIFxuICAvKipcbiAgICogU3RhcnQgZWRpdGluZyB3aXRoIGEgc3BlY2lmaWMga2V5IGFzIHRoZSBpbml0aWFsIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0RWRpdFdpdGhLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjYW5TdGFydCA9IHRoaXMuY2VsbC5zdGFydEVkaXQoKTtcbiAgICBpZiAoY2FuU3RhcnQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGNvbHVtbi5lZGl0b3I7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgc2V0IGluaXRpYWwga2V5cHJlc3MgdmFsdWUgaWYgZWRpdG9yIGFjY2VwdHMgaXRcbiAgICAgIC8vIERlZmF1bHQgdG8gdHJ1ZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGVkaXRvcnNcbiAgICAgIGNvbnN0IGFjY2VwdHNLZXlwcmVzcyA9IGVkaXRvcj8uYWNjZXB0c0luaXRpYWxLZXlwcmVzcyAhPT0gZmFsc2U7XG4gICAgICBcbiAgICAgIGlmIChhY2NlcHRzS2V5cHJlc3MpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBjdXJyZW50IHZhbHVlIHdpdGggdGhlIGtleVxuICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUoa2V5LCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogYWNjZXB0c0tleXByZXNzID8ga2V5IDogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckVkaXRvcigpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gU2luZ2xlIGNsaWNrIG5vdyBvbmx5IGZvY3VzZXMsIGRvZXNuJ3Qgc3RhcnQgZWRpdGluZ1xuICAgIC8vIEZvY3VzIGlzIGhhbmRsZWQgYnkgcGFyZW50IHN0LXRhYmxlIGNvbXBvbmVudFxuICB9XG5cbiAgb25DZWxsRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gRG91YmxlLWNsaWNrIHN0YXJ0cyBlZGl0aW5nIHJlZ2FyZGxlc3Mgb2YgRWRpdE1vZGUgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiAhdGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhblN0YXJ0ID0gdGhpcy5jZWxsLnN0YXJ0RWRpdCgpO1xuICAgIGlmIChjYW5TdGFydCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBOb3RpZnkgVGFibGVTdGF0ZSB0aGF0IHRoaXMgY2VsbCBpcyBub3cgZWRpdGluZ1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSAmJiB0aGlzLmNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlU3RhdGUuc2V0RWRpdGluZ0NlbGwocm93SW5kZXgsIHRoaXMuY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gcmVuZGVyIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgZWRpdG9yID0gY29sdW1uLmVkaXRvcjtcbiAgICBcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlZGl0b3IgY29uZmlndXJlZCBmb3IgY29sdW1uOicsIGNvbHVtbi5rZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jZWxsLmdldFZhbHVlKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBcbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxhbnk+ID0ge1xuICAgICAgdmFsdWUsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZWFnZXIgdmFsaWRhdGlvbiBpZiBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnPy52YWxpZGF0aW9uPy5tb2RlID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGNlbGwgdmFsdWUgdGVtcG9yYXJpbHkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUobmV3VmFsdWUsIHRydWUpOyAvLyBza2lwIHZhbGlkYXRpb24gdG8gYXZvaWQgZG91YmxlIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLnRyaWdnZXJFYWdlclZhbGlkYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlRWRpdChuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWxsIGVkaXRvcidzIGVkaXQgbWV0aG9kXG4gICAgZWRpdG9yLmVkaXQoY29udGV4dCk7XG4gICAgXG4gICAgLy8gU3RvcmUgY2xlYW51cCBjYWxsYmFja1xuICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveSkge1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRWRpdChuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2VsbC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5jZWxsLnNhdmVFZGl0KG5ld1ZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBzdGF0ZSAobGF6eSBtb2RlIC0gb24gc2F2ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50XG4gICAgICBjb25zdCBzYXZlRXZlbnQ6IENlbGxTYXZlRXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogY2VsbFN0YXRlLmVycm9yID8gW2NlbGxTdGF0ZS5lcnJvcl0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsU2F2ZS5lbWl0KHNhdmVFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICBjb25zdCBjaGFuZ2VFdmVudDogQ2VsbENoYW5nZUV2ZW50ID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIG9sZFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICB3YXNWYWxpZDogd2FzVmFsaWQsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgICB9XG4gICAgLy8gSWYgdmFsaWRhdGlvbiBmYWlscywga2VlcCBlZGl0aW5nIG1vZGVcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlIGluIFRhYmxlU3RhdGVcbiAgICogQ2FsbGVkIG9uIHNhdmUgKGxhenkgbW9kZSkgb3Igb24gY2hhbmdlIChlYWdlciBtb2RlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2VsbC5pc1ZhbGlkKCk7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKS5lcnJvcjtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgIFxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHJvd0luZGV4IGlzIGRlZmluZWRcbiAgICBpZiAocm93SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMudGFibGVTdGF0ZS51cGRhdGVDZWxsVmFsaWRhdGlvbihcbiAgICAgIHJvd0luZGV4LFxuICAgICAgY29sdW1uLmtleSxcbiAgICAgIGlzVmFsaWQsXG4gICAgICBlcnJvclxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGVhZ2VyIHZhbGlkYXRpb24gKG9uIGV2ZXJ5IGNoYW5nZSlcbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckVhZ2VyVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSB8fCAhdGhpcy50YWJsZUNvbmZpZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlID0gdGhpcy50YWJsZUNvbmZpZy52YWxpZGF0aW9uPy5tb2RlIHx8ICdsYXp5JztcbiAgICBpZiAodmFsaWRhdGlvbk1vZGUgIT09ICdlYWdlcicpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZS12YWxpZGF0ZSB0aGUgY2VsbFxuICAgIHRoaXMuY2VsbC52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy50YWJsZVN0YXRlLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2FuY2VsRXZlbnQ6IENlbGxDYW5jZWxFdmVudCA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHZhbHVlOiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGxTdGF0ZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgcm93RGF0YTogdGhpcy5jZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNlbGwuY2FuY2VsRWRpdCgpO1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGNhbmNlbEV2ZW50KTtcbiAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3JDbGVhbnVwKSB7XG4gICAgICB0aGlzLmVkaXRvckNsZWFudXAoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdC1jZWxsXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZWRpdGluZyc6IGNlbGwuaXNFZGl0aW5nKCksXG4gICAgJ2RpcnR5JzogY2VsbC5pc0RpcnR5KCksXG4gICAgJ2ludmFsaWQnOiAhY2VsbC5pc1ZhbGlkKCksXG4gICAgJ3JlYWRvbmx5JzogIWlzRWRpdGFibGUsXG4gICAgJ2xvYWRpbmcnOiBjZWxsTG9hZGluZ1xuICB9XCJcbiAgKGNsaWNrKT1cIm9uQ2VsbENsaWNrKClcIiBcbiAgKGRibGNsaWNrKT1cIm9uQ2VsbERvdWJsZUNsaWNrKClcIj5cblxuICA8IS0tIExvYWRpbmcgSW5kaWNhdG9yIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbExvYWRpbmdcIiBjbGFzcz1cImNlbGwtbG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjZWxsLXNwaW5uZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNwbGF5IE1vZGUgd2l0aCBUZW1wbGF0ZSBTdXBwb3J0IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNFZGl0aW5nKCkgJiYgIWNlbGxMb2FkaW5nXCI+XG4gICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NlbGxUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogdGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmF1bHQgVGV4dCBSZW5kZXJpbmcgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCIhaGFzQ2VsbFRlbXBsYXRlXCIgY2xhc3M9XCJjZWxsLWRpc3BsYXlcIj5cbiAgICAgIHt7IGNlbGwucmVuZGVyKCkgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRWRpdCBNb2RlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc0VkaXRpbmcoKVwiIGNsYXNzPVwiY2VsbC1lZGl0b3JcIiAjZWRpdG9yQ29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|