@fundamental-ngx/platform 0.43.17 → 0.43.19
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/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
- package/esm2020/form/combobox/combobox/combobox.component.mjs +3 -3
- package/esm2020/form/combobox/commons/base-combobox.mjs +22 -6
- package/esm2020/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +8 -7
- package/esm2020/form/multi-combobox/multi-combobox.module.mjs +3 -2
- package/esm2020/form/multi-input/multi-input.component.mjs +9 -8
- package/esm2020/form/multi-input/multi-input.module.mjs +3 -2
- package/esm2020/form/select/commons/base-select.mjs +16 -7
- package/esm2020/form/select/select/select.component.mjs +3 -3
- package/esm2020/list/action-list-item/action-list-item.component.mjs +7 -4
- package/esm2020/list/base-list-item.mjs +117 -75
- package/esm2020/list/display-list-item/display-list-item.component.mjs +5 -3
- package/esm2020/list/free-content-list-item/free-content-list-item.component.mjs +6 -3
- package/esm2020/list/list-group-footer.component.mjs +12 -3
- package/esm2020/list/list-group-header.component.mjs +30 -5
- package/esm2020/list/list.component.mjs +85 -61
- package/esm2020/list/object-list-item/object-list-item.component.mjs +5 -3
- package/esm2020/list/standard-list-item/standard-list-item.component.mjs +5 -3
- package/esm2020/message-popover/components/message-view/message-view.component.mjs +2 -2
- package/esm2020/search-field/search-field.component.mjs +2 -2
- package/esm2020/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +2 -2
- package/esm2020/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +1 -1
- package/esm2020/shared/domain/data-source.mjs +2 -1
- package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
- package/esm2020/table/components/table-p13-dialog/columns/columns.component.mjs +3 -3
- package/esm2020/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
- package/esm2020/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
- package/esm2020/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
- package/esm2020/table/components/table-row/table-row.component.mjs +13 -21
- package/esm2020/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +1 -1
- package/esm2020/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +1 -1
- package/esm2020/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +1 -1
- package/esm2020/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +1 -1
- package/esm2020/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +1 -1
- package/esm2020/table/table.component.mjs +27 -5
- package/esm2020/table-helpers/helpers.mjs +6 -3
- package/esm2020/upload-collection/dialogs/move-to/move-to.component.mjs +1 -1
- package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
- package/esm2020/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
- package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
- package/esm2020/variant-management/variant-management.component.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-form.mjs +40 -14
- package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-list.mjs +260 -150
- package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-message-popover.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-search-field.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-settings-generator.mjs +2 -2
- package/fesm2015/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-shared.mjs +1 -0
- package/fesm2015/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +5 -2
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +48 -34
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-variant-management.mjs +2 -2
- package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-form.mjs +41 -14
- package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-list.mjs +259 -150
- package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-message-popover.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-search-field.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-settings-generator.mjs +2 -2
- package/fesm2020/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-shared.mjs +1 -0
- package/fesm2020/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +5 -2
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +48 -34
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-variant-management.mjs +2 -2
- package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/form/combobox/commons/base-combobox.d.ts +10 -3
- package/form/multi-combobox/multi-combobox.module.d.ts +2 -1
- package/form/multi-input/multi-input.module.d.ts +2 -1
- package/form/select/commons/base-select.d.ts +14 -7
- package/fundamental-ngx-platform-v0.43.19.tgz +0 -0
- package/list/base-list-item.d.ts +52 -29
- package/list/list-group-footer.component.d.ts +3 -0
- package/list/list-group-header.component.d.ts +3 -1
- package/list/list.component.d.ts +15 -13
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/shared/domain/data-source.d.ts +3 -1
- package/table/components/table-row/table-row.component.d.ts +2 -2
- package/table/table.component.d.ts +8 -2
- package/table-helpers/helpers.d.ts +1 -1
- package/fundamental-ngx-platform-v0.43.17.tgz +0 -0
|
@@ -109,7 +109,7 @@ export function getFreezableEndColumns(columns, freezeEndColumnsTo) {
|
|
|
109
109
|
return new Map();
|
|
110
110
|
}
|
|
111
111
|
/** @hidden */
|
|
112
|
-
export function convertTreeObjectsToTableRows(source, selectionMode, tableRows, rowComparator, relationKey, hasChildrenKey, selectedKey, expandedStateKey, rowNavigatable) {
|
|
112
|
+
export function convertTreeObjectsToTableRows(source, selectionMode, tableRows, rowComparator, relationKey, hasChildrenKey, selectedKey, expandedStateKey, rowNavigatable, enableTristateMode = false) {
|
|
113
113
|
const rows = [];
|
|
114
114
|
const selectedRowsMap = getSelectionStatusByRowValue(source, selectionMode, tableRows, rowComparator);
|
|
115
115
|
source.forEach((item, index) => {
|
|
@@ -131,7 +131,7 @@ export function convertTreeObjectsToTableRows(source, selectionMode, tableRows,
|
|
|
131
131
|
row.navigatable = isRowNavigatable(item, rowNavigatable);
|
|
132
132
|
rows.push(row);
|
|
133
133
|
if (hasChildren) {
|
|
134
|
-
const children = convertTreeObjectsToTableRows(item[relationKey], selectionMode, tableRows, rowComparator, relationKey, hasChildrenKey, selectedKey, expandedStateKey, rowNavigatable);
|
|
134
|
+
const children = convertTreeObjectsToTableRows(item[relationKey], selectionMode, tableRows, rowComparator, relationKey, hasChildrenKey, selectedKey, expandedStateKey, rowNavigatable, enableTristateMode);
|
|
135
135
|
children.forEach((c) => {
|
|
136
136
|
c.parent = c.parent || row;
|
|
137
137
|
c.level = c.parent.level + 1;
|
|
@@ -159,6 +159,9 @@ export function convertTreeObjectsToTableRows(source, selectionMode, tableRows,
|
|
|
159
159
|
applySelectionToChildren(rows, r, [], []);
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
|
+
if (!enableTristateMode) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
162
165
|
if (selectedAll) {
|
|
163
166
|
r.checked = true;
|
|
164
167
|
return;
|
|
@@ -403,4 +406,4 @@ export function convertObjectsToTableRows(source, addedItems, selectedKey, rowNa
|
|
|
403
406
|
export function isTreeRowFirstCell(cellIndex, row, event) {
|
|
404
407
|
return (cellIndex === 0 && isTreeRow(row)) || (!!event && !row.isTree);
|
|
405
408
|
}
|
|
406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS1oZWxwZXJzL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJNUQsT0FBTyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBRWhDLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFZLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzlFLGNBQWM7QUFDZCxNQUFNLFVBQVUsV0FBVyxDQUFVLEdBQXlCO0lBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsT0FBTyxJQUFJLFlBQVksQ0FBQztRQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSTtRQUNuQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO1FBQzdC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QUMsVUFBVSxDQUFDO1FBQ2hELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsY0FBYztBQUNkLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFpQixFQUFFLEdBQWEsRUFBRSxLQUFhO0lBQzlFLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGZzLCBpc1N0cmluZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGlzRGF0YVNvdXJjZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXJyYXlUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2RvbWFpbi9hcnJheS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi9kb21haW4vb2JzZXJ2YWJsZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2RvbWFpbi90YWJsZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUYWJsZVJvd1R5cGUgfSBmcm9tICcuL2VudW1zL3Jvdy10eXBlLmVudW0nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZSwgU2VsZWN0aW9uTW9kZVZhbHVlIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3Rpb24tbW9kZS5lbnVtJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuL2VudW1zL3NvcnQtZGlyZWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZkcFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vbW9kZWxzL2RhdGEtc291cmNlLnR5cGUnO1xuaW1wb3J0IHsgUm93Q29tcGFyYXRvciB9IGZyb20gJy4vbW9kZWxzL3Jvdy1jb21wYXJhdG9yLm1vZGVsJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLWVzL2Nsb25lRGVlcCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC1lcy9zZXQnO1xuaW1wb3J0IHsgR3JvdXBUYWJsZVJvd1ZhbHVlVHlwZSwgVHJlZUxpa2UgfSBmcm9tICcuL21vZGVscy90cmVlLXRhYmxlLm1vZGVsJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLWVzL2dldCc7XG5pbXBvcnQgeyBpc1RhYmxlUm93LCBUYWJsZVJvdywgVGFibGVSb3dJbXBsIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtcm93Lm1vZGVsJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi90YWJsZS1jb2x1bW4nO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld1RhYmxlUm93PFQgPSBhbnk+KHJvdzogUGFydGlhbDxUYWJsZVJvdzxUPj4pOiBUYWJsZVJvdzxUPiB7XG4gICAgaWYgKCFyb3cudmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlLiBUYWJsZVJvdy52YWx1ZSBjYW5ub3QgYmUgdW5kZWZpbmVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGFibGVSb3dJbXBsKHtcbiAgICAgICAgdHlwZTogcm93LnR5cGUgfHwgVGFibGVSb3dUeXBlLklURU0sXG4gICAgICAgIGNoZWNrZWQ6IHJvdy5jaGVja2VkIHx8IGZhbHNlLFxuICAgICAgICBpbmRleDogcm93LmluZGV4IHx8IDAsXG4gICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgIHBhcmVudDogcm93LnBhcmVudCB8fCBudWxsLFxuICAgICAgICBsZXZlbDogcm93LmxldmVsIHx8IDAsXG4gICAgICAgIGV4cGFuZGFibGU6IHJvdy5leHBhbmRhYmxlIHx8IGZhbHNlLFxuICAgICAgICBleHBhbmRlZDogcm93LmV4cGFuZGVkIHx8IGZhbHNlLFxuICAgICAgICBoaWRkZW46IHJvdy5oaWRkZW4gfHwgZmFsc2UsXG4gICAgICAgIG5hdmlnYXRhYmxlOiByb3cubmF2aWdhdGFibGUgfHwgZmFsc2UsXG4gICAgICAgIHN0YXRlOiByb3cuc3RhdGUgfHwgJ3JlYWRvbmx5JyxcbiAgICAgICAgY2hpbGRyZW46IHJvdy5jaGlsZHJlbiB8fCBbXVxuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGFibGVSb3dzKHJvd3M6IFRhYmxlUm93W10sIHNlbGVjdGFibGVLZXk6IHN0cmluZyk6IFRhYmxlUm93W10ge1xuICAgIHJldHVybiByb3dzLmZpbHRlcigocm93KSA9PiBpc1NlbGVjdGFibGVSb3cocm93LCBzZWxlY3RhYmxlS2V5KSk7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZWxlY3RhYmxlUm93KHJvdzogVGFibGVSb3csIHNlbGVjdGFibGVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoaXNJdGVtUm93KHJvdykgfHwgaXNUcmVlUm93KHJvdykpICYmIHJvdy52YWx1ZVtzZWxlY3RhYmxlS2V5XSAhPT0gZmFsc2U7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVtUm93KHJvdzogVGFibGVSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJlZVJvdyhyb3c6IFRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuVFJFRTtcbn1cblxuLyoqXG4gKiBTaW5jZSB3ZSBkb250IHdvcmsgd2l0aCB0aGUgdHJlZSwgd2UgbmVlZCB0byBjb252ZXJ0IGluY29taW5nIHRyZWUgdG9cbiAqIGZsYXQgZm9ybWF0IHdoaWxlIG1haW50YWluaW5nIG9yaWdpbmFsIHN0YXRlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUcmVlVGFibGVSb3dUb0ZsYXRMaXN0PFQ+KHJvd3M6IFRhYmxlUm93PFQ+W10sIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogVGFibGVSb3c8VD5bXSB7XG4gICAgbGV0IGZsYXRMaXN0OiBUYWJsZVJvd1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygcm93cykge1xuICAgICAgICBpdGVtLm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShpdGVtIGFzIFQsIHJvd05hdmlnYXRhYmxlKTtcbiAgICAgICAgZmxhdExpc3QucHVzaChpdGVtKTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiAoYy5oaWRkZW4gPSAhaXRlbS5leHBhbmRlZCkpO1xuICAgICAgICAgICAgZmxhdExpc3QgPSBmbGF0TGlzdC5jb25jYXQoY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QoaXRlbS5jaGlsZHJlbiwgcm93TmF2aWdhdGFibGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhdExpc3Q7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSb3dOYXZpZ2F0YWJsZTxUPihyb3c6IFQsIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBJZiBrZXkgb2YgdGhlIHJvdydzIGl0ZW0gZmllbGQgcGFzc2VkICovXG4gICAgaWYgKGlzU3RyaW5nKHJvd05hdmlnYXRhYmxlKSkge1xuICAgICAgICByZXR1cm4gISFyb3dbcm93TmF2aWdhdGFibGUgYXMgc3RyaW5nXTtcbiAgICB9XG5cbiAgICByZXR1cm4gISFyb3dOYXZpZ2F0YWJsZTtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmVlemFibGVDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIGZyZWV6ZUNvbHVtbnNUbzogc3RyaW5nKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgaWYgKCFjb2x1bW5zLmxlbmd0aCB8fCAhZnJlZXplQ29sdW1uc1RvKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5OYW1lcztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmICghY29sdW1uLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXNpbmcgY29sdW1uTmFtZXMuc2l6ZSBhcyBpbmRleCBvZiBhIGNvbHVtblxuICAgICAgICBjb2x1bW5OYW1lcy5zZXQoY29sdW1uLm5hbWUsIGNvbHVtbk5hbWVzLnNpemUpO1xuXG4gICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gZnJlZXplQ29sdW1uc1RvKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uTmFtZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZyZWV6YWJsZUVuZENvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSwgZnJlZXplRW5kQ29sdW1uc1RvOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBpZiAoIWNvbHVtbnMubGVuZ3RoIHx8ICFmcmVlemVFbmRDb2x1bW5zVG8pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWVzO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBjb2x1bW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIC8vIHVzaW5nIGNvbHVtbk5hbWVzLnNpemUgYXMgaW5kZXggb2YgYSBjb2x1bW5cbiAgICAgICAgY29sdW1uTmFtZXMuc2V0KGNvbHVtbnNbaV0ubmFtZSwgY29sdW1uTmFtZXMuc2l6ZSk7XG5cbiAgICAgICAgaWYgKGNvbHVtbnNbaV0ubmFtZSA9PT0gZnJlZXplRW5kQ29sdW1uc1RvKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uTmFtZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzPFQ+KFxuICAgIHNvdXJjZTogVFtdLFxuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICB0YWJsZVJvd3M6IFRhYmxlUm93PFQ+W10sXG4gICAgcm93Q29tcGFyYXRvcjogUm93Q29tcGFyYXRvcjxUPixcbiAgICByZWxhdGlvbktleTogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRLZXk6IHN0cmluZyxcbiAgICBleHBhbmRlZFN0YXRlS2V5OiBzdHJpbmcsXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW5cbik6IFRhYmxlUm93PFQ+W10ge1xuICAgIGNvbnN0IHJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3NNYXAgPSBnZXRTZWxlY3Rpb25TdGF0dXNCeVJvd1ZhbHVlKHNvdXJjZSwgc2VsZWN0aW9uTW9kZSwgdGFibGVSb3dzLCByb3dDb21wYXJhdG9yKTtcblxuICAgIHNvdXJjZS5mb3JFYWNoKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID1cbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCByZWxhdGlvbktleSkgJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbVtyZWxhdGlvbktleV0pICYmXG4gICAgICAgICAgICBpdGVtW3JlbGF0aW9uS2V5XS5sZW5ndGg7XG5cbiAgICAgICAgY29uc3Qgcm93ID0gaXNUYWJsZVJvdyhpdGVtIGFzIFRhYmxlUm93PFQ+KVxuICAgICAgICAgICAgPyAoaXRlbSBhcyBUYWJsZVJvdzxUPilcbiAgICAgICAgICAgIDogbmV3VGFibGVSb3coe1xuICAgICAgICAgICAgICAgICAgdHlwZTogaGFzQ2hpbGRyZW4gfHwgaXRlbVtoYXNDaGlsZHJlbktleV0gPT09IHRydWUgPyBUYWJsZVJvd1R5cGUuVFJFRSA6IFRhYmxlUm93VHlwZS5JVEVNLFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbVtzZWxlY3RlZEtleV0gPz8gISFzZWxlY3RlZFJvd3NNYXAuZ2V0KGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICByb3cuZXhwYW5kZWQgPVxuICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZUtleSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgZXhwYW5kZWRTdGF0ZUtleSlcbiAgICAgICAgICAgICAgICA/IGl0ZW1bZXhwYW5kZWRTdGF0ZUtleV1cbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKGl0ZW0sIHJvd05hdmlnYXRhYmxlKTtcbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG5cbiAgICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIGl0ZW1bcmVsYXRpb25LZXldLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHJvd0NvbXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgcmVsYXRpb25LZXksXG4gICAgICAgICAgICAgICAgaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXksXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZUtleSxcbiAgICAgICAgICAgICAgICByb3dOYXZpZ2F0YWJsZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGMucGFyZW50ID0gYy5wYXJlbnQgfHwgcm93O1xuICAgICAgICAgICAgICAgIGMubGV2ZWwgPSBjLnBhcmVudC5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgYy5oaWRkZW4gPSAhYy5wYXJlbnQuZXhwYW5kZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5wdXNoKC4uLmNoaWxkcmVuKTtcblxuICAgICAgICAgICAgcm93cy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93LmxldmVsID09PSAwICYmIHJvdy5pc1RyZWUpIHtcbiAgICAgICAgICAgIGRmcyhbcm93XSwgKHIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHIuY2hpbGRyZW4gfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaGlsZHJlbjogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGVDaGlsZHJlbjogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLmNoZWNrZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGVDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRBbGwgPSBzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gY2hpbGRyZW4ubGVuZ3RoICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTb21lID0gc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIGlmIChyLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHJvd3MsIHIsIFtdLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHIuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkU29tZSB8fCBpbmRldGVybWluYXRlQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByLmNoZWNrZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFJ1bnMgYHJvd0NvbXBhcmF0b3JgIGZ1bmN0aW9uIGFnYWluc3QgY2hlY2tlZCByb3dzIGFuZCBjb21wYXJlcyB0aGVtIHdpdGggdGhlIG5ldyBgc291cmNlYFxuICogSWYgbWF0Y2hlZCwgY3JlYXRlcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBzb3VyY2UgaXRlbSBhbmQgY2hlY2tlZCBzdGF0dXMgb2YgY29ycmVzcG9uZGluZyByb3cuXG4gKlxuICogQHJldHVybnMgYE1hcGAgb2JqZWN0IHdpdGggdGhlIGBjaGVja2VkYCBzdGF0dXMgZm9yIHBhcnRpY3VsYXIgc291cmNlIGl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblN0YXR1c0J5Um93VmFsdWU8VD4oXG4gICAgc291cmNlOiBUW10sXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlLFxuICAgIHRhYmxlUm93czogVGFibGVSb3dbXSxcbiAgICByb3dDb21wYXJhdG9yOiBSb3dDb21wYXJhdG9yPFQ+XG4pOiBNYXA8VCwgYm9vbGVhbiB8IG51bGw+IHtcbiAgICBjb25zdCByb3dNYXAgPSBuZXcgTWFwPFQsIGJvb2xlYW4gfCBudWxsPigpO1xuICAgIGlmIChcbiAgICAgICAgKHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpICYmXG4gICAgICAgIHR5cGVvZiByb3dDb21wYXJhdG9yID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRSb3dzID0gdGFibGVSb3dzLmZpbHRlcigocikgPT4gci5jaGVja2VkKTtcbiAgICAgICAgY2hlY2tlZFJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IHNvdXJjZS5maW5kKChlKSA9PiByb3dDb21wYXJhdG9yKHJvdy52YWx1ZSwgZSkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcm93TWFwLnNldChmb3VuZCwgcm93LmNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd01hcDtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNlbGVjdGlvblRvQ2hpbGRyZW48VD4oXG4gICAgYWxsUm93czogQXJyYXk8VGFibGVSb3c8VD4+LFxuICAgIHJvdzogVGFibGVSb3csXG4gICAgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLFxuICAgIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdXG4pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxDaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihyb3csIGFsbFJvd3MpO1xuXG4gICAgYWxsQ2hpbGRyZW4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICByLmNoZWNrZWQgPSByb3cuY2hlY2tlZDtcbiAgICAgICAgci5jaGVja2VkID8gYWRkZWRSb3dzLnB1c2gocikgOiByZW1vdmVkUm93cy5wdXNoKHIpO1xuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSb3dDaGlsZHJlbjxUPihyb3c6IFRhYmxlUm93PFQ+LCBhbGxSb3dzOiBUYWJsZVJvdzxUPltdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgY29uc3Qgcm93c0xlbmd0aCA9IGFsbFJvd3MubGVuZ3RoO1xuXG4gICAgLyoqXG4gICAgICogU2luY2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGZsYXQgbGlzdFxuICAgICAqIGl0IG1lYW5zIGFsbCBjaGlsZHJlbiBnbyBuZXh0IHJpZ2h0IGFmdGVyIHRoZSBleHBhbmRhYmxlIHJvd1xuICAgICAqIHVudGlsIHRoZSBuZXh0IHJvdyBoYXMgYSBtdXR1YWwgcGFyZW50XG4gICAgICovXG5cbiAgICBsZXQgaW5kZXggPSBhbGxSb3dzLmluZGV4T2Yocm93KTtcbiAgICBjb25zdCBwYXJlbnRzID0gZ2V0Um93UGFyZW50cyhyb3cpO1xuICAgIGNvbnN0IGNoaWxkcmVuOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICB3aGlsZSAoaW5kZXgrKyA8IHJvd3NMZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV4dFJvdyA9IGFsbFJvd3NbaW5kZXhdO1xuICAgICAgICBpZiAoIW5leHRSb3c/LnBhcmVudCB8fCBwYXJlbnRzLmluY2x1ZGVzKG5leHRSb3cucGFyZW50KSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW4ucHVzaChuZXh0Um93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG5cbi8qKlxuICogR2V0IHJvdyBwYXJlbnRzIHBhdGggd2hlcmUgdGhlIGZpcnN0IGlzIHRoZSBkaXJlY3QgcGFyZW50XG4gKiBAcGFyYW0gcm93IFJvdyB3aGljaCBwYXJlbnRzIHdlIG5lZWQgdG8gZmluZFxuICogQHBhcmFtIHVudGlsUGFyZW50IFBhcmVudCB0byBzdG9wIGEgc2VhcmNoIG9uLiBEZWZhdWx0IGlzIFwibnVsbFwiIHRoYXQgbWVhbnMgbG9vayB1cCB1bnRpbCB0aGUgcm9vdFxuICogQHJldHVybnMgcGFyZW50cyBsaXN0IFtkaXJlY3QgcGFyZW50LCAuLi4sIGFuY2VzdG9yXVxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93UGFyZW50czxUPihyb3c6IFRhYmxlUm93PFQ+LCB1bnRpbFBhcmVudDogVGFibGVSb3c8VD4gfCBudWxsID0gbnVsbCk6IFRhYmxlUm93PFQ+W10ge1xuICAgIHVudGlsUGFyZW50ID0gdW50aWxQYXJlbnQgfHwgbnVsbDsgLy8gdG8gYXZvaWQgXCJ1bmRlZmluZWRcIlxuICAgIGNvbnN0IHBhcmVudHM6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICBsZXQgcGFyZW50ID0gcm93LnBhcmVudCB8fCBudWxsOyAvLyBlbXB0eSBwYXJlbnQgc2hvdWxkIGJlIGNvZXJjZWQgdG8gXCJudWxsXCIgZG8gbm90IGdldCBpbnRvIGluZmluaXRlIGxvb3BcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gdW50aWxQYXJlbnQpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRhU3RyZWFtPFQ+KHNvdXJjZTogRmRwVGFibGVEYXRhU291cmNlPFQ+KTogVGFibGVEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXNEYXRhU291cmNlKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZSBhcyBUYWJsZURhdGFTb3VyY2U8VD47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5VGFibGVEYXRhU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZVRhYmxlRGF0YVNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqIENyZWF0ZXMgYW4gZW1wdHkgY29sdW1uIHNrZWxldG9uIG9iamVjdC5cbiAqIEByZXR1cm5zIENvbHVtbiBtb2RlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTmV3Um93U2tlbGV0b248VD4oZWRpdGFibGVSb3dTa2VsZXRvbjogVCwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IFQge1xuICAgIGlmIChlZGl0YWJsZVJvd1NrZWxldG9uKSB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAoZWRpdGFibGVSb3dTa2VsZXRvbik7XG4gICAgfVxuXG4gICAgbGV0IG5ld1JvdyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIG5ld1JvdyA9IHNldChuZXdSb3csIGNvbHVtbi5rZXksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3Um93IGFzIFQ7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cFJvdyhyb3c6IFRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuR1JPVVA7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRyZWVMaWtlR3JvdXBlZFJvd3MoXG4gICAgZ3JvdXBlZFJvd3M6IFRyZWVMaWtlPFRhYmxlUm93PltdLFxuICAgIGdyb3VwUnVsZXNNYXA6IE1hcDxzdHJpbmcsIENvbGxlY3Rpb25Hcm91cD5cbik6IFRyZWVMaWtlPFRhYmxlUm93PltdIHtcbiAgICBpZiAoIWdyb3VwZWRSb3dzWzBdIHx8ICFpc0dyb3VwUm93KGdyb3VwZWRSb3dzWzBdKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXBlZFJvd3M7XG4gICAgfVxuXG4gICAgY29uc3QgdHJlZUxpa2VSb3dzID0gZ3JvdXBlZFJvd3MgYXMgVHJlZUxpa2U8VGFibGVSb3c8R3JvdXBUYWJsZVJvd1ZhbHVlVHlwZT4+W107XG4gICAgY29uc3QgZmlyc3RSb3cgPSB0cmVlTGlrZVJvd3NbMF07XG5cbiAgICB0cmVlTGlrZVJvd3MuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgZ3JvdXAuX2NoaWxkcmVuID0gc29ydFRyZWVMaWtlR3JvdXBlZFJvd3MoZ3JvdXAuX2NoaWxkcmVuLCBncm91cFJ1bGVzTWFwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZ3JvdXBSdWxlID0gZ3JvdXBSdWxlc01hcC5nZXQoZmlyc3RSb3cudmFsdWUuZmllbGQpO1xuXG4gICAgaWYgKCFncm91cFJ1bGUgfHwgZ3JvdXBSdWxlLmRpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5OT05FKSB7XG4gICAgICAgIHJldHVybiB0cmVlTGlrZVJvd3M7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gZ3JvdXBSdWxlLmRpcmVjdGlvbjtcbiAgICBjb25zdCBkaXJlY3Rpb25NdWx0aXBsaWVyID0gZGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQyA/IDEgOiBkaXJlY3Rpb24gPT09IFNvcnREaXJlY3Rpb24uREVTQyA/IC0xIDogMDtcblxuICAgIHJldHVybiB0cmVlTGlrZVJvd3Muc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFWYWx1ZSA9IGEudmFsdWUudmFsdWUgYXMgYW55O1xuICAgICAgICBjb25zdCBiVmFsdWUgPSBiLnZhbHVlLnZhbHVlIGFzIGFueTtcblxuICAgICAgICBjb25zdCBhTnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQoYVZhbHVlKTtcbiAgICAgICAgY29uc3QgYk51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KGJWYWx1ZSk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGFOdW1iZXIpICYmICFOdW1iZXIuaXNOYU4oYk51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAoYU51bWJlciAtIGJOdW1iZXIpICogZGlyZWN0aW9uTXVsdGlwbGllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoYVZhbHVlID4gYlZhbHVlID8gMSA6IC0xKSAqIGRpcmVjdGlvbk11bHRpcGxpZXI7XG4gICAgfSk7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRyZWVMaWtlVG9GbGF0TGlzdDxLPih0cmVlTGlrZUxpc3Q6IFRyZWVMaWtlPEs+W10pOiBLW10ge1xuICAgIGxldCBmbGF0TGlzdDogS1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdHJlZUxpa2VMaXN0KSB7XG4gICAgICAgIGZsYXRMaXN0LnB1c2goaXRlbSk7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbS5fY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBmbGF0TGlzdCA9IGZsYXRMaXN0LmNvbmNhdChjb252ZXJ0VHJlZUxpa2VUb0ZsYXRMaXN0KGl0ZW0uX2NoaWxkcmVuKSk7XG4gICAgICAgICAgICBkZWxldGUgaXRlbS5fY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdExpc3Q7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogR3JvdXAgdGFibGUgcm93cyBhbmQgcmV0dXJuIHRyZWUgbGlrZSByb3dzIGxpc3QuXG4gKiBJdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSBydWxlcyBncm91cCBydWxlcyB0byBncm91cCBieVxuICogQHBhcmFtIHJvd3Mgc291cmNlIHRhYmxlIHJvd3NcbiAqIEBwYXJhbSBwYXJlbnQgcm93IHBhcmVudFxuICogQHBhcmFtIGxldmVsIGxldmVsIG9mIG5lc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdyb3VwZWRUYWJsZVJvd3NUcmVlKFxuICAgIHJ1bGVzOiBDb2xsZWN0aW9uR3JvdXBbXSxcbiAgICByb3dzOiBUYWJsZVJvd1tdLFxuICAgIHBhcmVudDogVGFibGVSb3cgfCBudWxsID0gbnVsbCxcbiAgICBsZXZlbCA9IDBcbik6IFRyZWVMaWtlPFRhYmxlUm93PltdIHtcbiAgICBydWxlcyA9IFsuLi5ydWxlc107XG5cbiAgICBpZiAoIXJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAvLyBubyBydWxlcyBtZWFuIHRoYXQgaXQncyB0aGUgbGV2ZWwgb2Ygc291cmNlIGl0ZW1zXG4gICAgICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICByb3cucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgcm93LmxldmVsID0gbGV2ZWw7XG4gICAgICAgICAgICByb3cuaGlkZGVuID0gISFwYXJlbnQgJiYgIXBhcmVudC5leHBhbmRlZDtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJldHJpZXZlIGZpcnN0IGdyb3VwIHJ1bGVcbiAgICBjb25zdCBydWxlID0gcnVsZXMuc2hpZnQoKSE7XG5cbiAgICAvLyBCdWlsZCBtYXAgb2YgdW5pcXVlIHZhbHVlcyBmb3IgYSBnaXZlbiBncm91cCBydWxlXG4gICAgY29uc3QgdmFsdWVzSGFzaCA9IHJvd3NcbiAgICAgICAgLmZpbHRlcigocikgPT4gci5zdGF0ZSAhPT0gJ2VkaXRhYmxlJylcbiAgICAgICAgLnJlZHVjZSgoaGFzaCwgcm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gZ2V0KHJvdy52YWx1ZSwgcnVsZS5maWVsZCk7XG5cbiAgICAgICAgICAgIGlmICghaGFzaC5oYXMobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNoLnNldChtb2RlbFZhbHVlLCBbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhc2guZ2V0KG1vZGVsVmFsdWUpPy5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICB9LCBuZXcgTWFwPHVua25vd24sIFRhYmxlUm93W10+KCkpO1xuXG4gICAgLy8gQnVpbGQgdGFibGUgcm93cyB0cmVlXG4gICAgbGV0IGdyb3VwZWRUYWJsZVJvd3M6IFRyZWVMaWtlPFRhYmxlUm93PltdID0gW107XG5cbiAgICBpZiAocm93cy5zb21lKChyKSA9PiByLnN0YXRlID09PSAnZWRpdGFibGUnKSkge1xuICAgICAgICBncm91cGVkVGFibGVSb3dzID0gcm93c1xuICAgICAgICAgICAgLmZpbHRlcigocikgPT4gci5zdGF0ZSA9PT0gJ2VkaXRhYmxlJylcbiAgICAgICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgcm93LmxldmVsID0gLTE7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9ICEhcGFyZW50ICYmICFwYXJlbnQuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3ZhbHVlLCB2YWx1ZXNdIG9mIEFycmF5LmZyb20odmFsdWVzSGFzaCkpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gcm93cy5maWx0ZXIoKF9pdGVtKSA9PiB2YWx1ZXMuaW5jbHVkZXMoX2l0ZW0pKTtcblxuICAgICAgICBpZiAoZmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cFRhYmxlUm93OiBUcmVlTGlrZTxUYWJsZVJvdzxHcm91cFRhYmxlUm93VmFsdWVUeXBlPj4gPSBuZXdUYWJsZVJvdzxHcm91cFRhYmxlUm93VmFsdWVUeXBlPih7XG4gICAgICAgICAgICB0eXBlOiBUYWJsZVJvd1R5cGUuR1JPVVAsXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgdmFsdWU6IHsgZmllbGQ6IHJ1bGUuZmllbGQsIHZhbHVlLCBjb3VudDogMCB9LFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICBoaWRkZW46ICEhcGFyZW50ICYmICFwYXJlbnQuZXhwYW5kZWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRzIGdyb3VwJ3MgY2hpbGRyZW4gcm93c1xuICAgICAgICBncm91cFRhYmxlUm93Ll9jaGlsZHJlbiA9IGNyZWF0ZUdyb3VwZWRUYWJsZVJvd3NUcmVlKHJ1bGVzLCBmaWx0ZXJlZFJvd3MsIGdyb3VwVGFibGVSb3csIGxldmVsICsgMSk7XG5cbiAgICAgICAgZ3JvdXBUYWJsZVJvdy52YWx1ZS5jb3VudCA9IGdyb3VwVGFibGVSb3cuX2NoaWxkcmVuPy5sZW5ndGg7XG5cbiAgICAgICAgZ3JvdXBlZFRhYmxlUm93cy5wdXNoKGdyb3VwVGFibGVSb3cpO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cGVkVGFibGVSb3dzO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3M8VD4oXG4gICAgc291cmNlOiBUW10sXG4gICAgYWRkZWRJdGVtczogVFtdLFxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmcsXG4gICAgcm93TmF2aWdhdGFibGU6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlLFxuICAgIHJvd3M6IFRhYmxlUm93W10sXG4gICAgcm93Q29tcGFyYXRvcjogUm93Q29tcGFyYXRvclxuKTogVGFibGVSb3c8VD5bXSB7XG4gICAgY29uc3Qgcm93SXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICBpZiAoaXNUYWJsZVJvdyhyb3dJdGVtKSkge1xuICAgICAgICByZXR1cm4gc291cmNlIGFzIFRhYmxlUm93W107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzTWFwID0gZ2V0U2VsZWN0aW9uU3RhdHVzQnlSb3dWYWx1ZShzb3VyY2UsIHNlbGVjdGlvbk1vZGUsIHJvd3MsIHJvd0NvbXBhcmF0b3IpO1xuICAgIHJldHVybiBzb3VyY2UubWFwKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmV3SXRlbSA9IGFkZGVkSXRlbXMuaW5jbHVkZXMoaXRlbSk7XG4gICAgICAgIGNvbnN0IHJvdyA9IG5ld1RhYmxlUm93KHtcbiAgICAgICAgICAgIHR5cGU6IFRhYmxlUm93VHlwZS5JVEVNLFxuICAgICAgICAgICAgY2hlY2tlZDogaXRlbVtzZWxlY3RlZEtleV0gPz8gISFzZWxlY3RlZFJvd3NNYXAuZ2V0KGl0ZW0pLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICB9KTtcbiAgICAgICAgcm93Lm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShpdGVtLCByb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIHJvdy5zdGF0ZSA9IGlzTmV3SXRlbSA/ICdlZGl0YWJsZScgOiAncmVhZG9ubHknO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJlZVJvd0ZpcnN0Q2VsbChjZWxsSW5kZXg6IG51bWJlciwgcm93OiBUYWJsZVJvdywgZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoY2VsbEluZGV4ID09PSAwICYmIGlzVHJlZVJvdyhyb3cpKSB8fCAoISFldmVudCAmJiAhcm93LmlzVHJlZSk7XG59XG4iXX0=
|
|
409
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS1oZWxwZXJzL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJNUQsT0FBTyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBRWhDLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFZLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzlFLGNBQWM7QUFDZCxNQUFNLFVBQVUsV0FBVyxDQUFVLEdBQXlCO0lBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsT0FBTyxJQUFJLFlBQVksQ0FBQztRQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSTtRQUNuQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLO1FBQzdC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QUUsY0FBYyxDQUFDLENBQUM7UUFDekQsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2hELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsY0FBYztBQUNkLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFpQixFQUFFLEdBQWEsRUFBRSxLQUFhO0lBQzlFLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGZzLCBpc1N0cmluZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGlzRGF0YVNvdXJjZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXJyYXlUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2RvbWFpbi9hcnJheS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi9kb21haW4vb2JzZXJ2YWJsZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2RvbWFpbi90YWJsZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBUYWJsZVJvd1R5cGUgfSBmcm9tICcuL2VudW1zL3Jvdy10eXBlLmVudW0nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZSwgU2VsZWN0aW9uTW9kZVZhbHVlIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3Rpb24tbW9kZS5lbnVtJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuL2VudW1zL3NvcnQtZGlyZWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZkcFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vbW9kZWxzL2RhdGEtc291cmNlLnR5cGUnO1xuaW1wb3J0IHsgUm93Q29tcGFyYXRvciB9IGZyb20gJy4vbW9kZWxzL3Jvdy1jb21wYXJhdG9yLm1vZGVsJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoLWVzL2Nsb25lRGVlcCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC1lcy9zZXQnO1xuaW1wb3J0IHsgR3JvdXBUYWJsZVJvd1ZhbHVlVHlwZSwgVHJlZUxpa2UgfSBmcm9tICcuL21vZGVscy90cmVlLXRhYmxlLm1vZGVsJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLWVzL2dldCc7XG5pbXBvcnQgeyBpc1RhYmxlUm93LCBUYWJsZVJvdywgVGFibGVSb3dJbXBsIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtcm93Lm1vZGVsJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi90YWJsZS1jb2x1bW4nO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld1RhYmxlUm93PFQgPSBhbnk+KHJvdzogUGFydGlhbDxUYWJsZVJvdzxUPj4pOiBUYWJsZVJvdzxUPiB7XG4gICAgaWYgKCFyb3cudmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlLiBUYWJsZVJvdy52YWx1ZSBjYW5ub3QgYmUgdW5kZWZpbmVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGFibGVSb3dJbXBsKHtcbiAgICAgICAgdHlwZTogcm93LnR5cGUgfHwgVGFibGVSb3dUeXBlLklURU0sXG4gICAgICAgIGNoZWNrZWQ6IHJvdy5jaGVja2VkIHx8IGZhbHNlLFxuICAgICAgICBpbmRleDogcm93LmluZGV4IHx8IDAsXG4gICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgIHBhcmVudDogcm93LnBhcmVudCB8fCBudWxsLFxuICAgICAgICBsZXZlbDogcm93LmxldmVsIHx8IDAsXG4gICAgICAgIGV4cGFuZGFibGU6IHJvdy5leHBhbmRhYmxlIHx8IGZhbHNlLFxuICAgICAgICBleHBhbmRlZDogcm93LmV4cGFuZGVkIHx8IGZhbHNlLFxuICAgICAgICBoaWRkZW46IHJvdy5oaWRkZW4gfHwgZmFsc2UsXG4gICAgICAgIG5hdmlnYXRhYmxlOiByb3cubmF2aWdhdGFibGUgfHwgZmFsc2UsXG4gICAgICAgIHN0YXRlOiByb3cuc3RhdGUgfHwgJ3JlYWRvbmx5JyxcbiAgICAgICAgY2hpbGRyZW46IHJvdy5jaGlsZHJlbiB8fCBbXVxuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGFibGVSb3dzKHJvd3M6IFRhYmxlUm93W10sIHNlbGVjdGFibGVLZXk6IHN0cmluZyk6IFRhYmxlUm93W10ge1xuICAgIHJldHVybiByb3dzLmZpbHRlcigocm93KSA9PiBpc1NlbGVjdGFibGVSb3cocm93LCBzZWxlY3RhYmxlS2V5KSk7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZWxlY3RhYmxlUm93KHJvdzogVGFibGVSb3csIHNlbGVjdGFibGVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoaXNJdGVtUm93KHJvdykgfHwgaXNUcmVlUm93KHJvdykpICYmIHJvdy52YWx1ZVtzZWxlY3RhYmxlS2V5XSAhPT0gZmFsc2U7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJdGVtUm93KHJvdzogVGFibGVSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJlZVJvdyhyb3c6IFRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuVFJFRTtcbn1cblxuLyoqXG4gKiBTaW5jZSB3ZSBkb250IHdvcmsgd2l0aCB0aGUgdHJlZSwgd2UgbmVlZCB0byBjb252ZXJ0IGluY29taW5nIHRyZWUgdG9cbiAqIGZsYXQgZm9ybWF0IHdoaWxlIG1haW50YWluaW5nIG9yaWdpbmFsIHN0YXRlLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUcmVlVGFibGVSb3dUb0ZsYXRMaXN0PFQ+KHJvd3M6IFRhYmxlUm93PFQ+W10sIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogVGFibGVSb3c8VD5bXSB7XG4gICAgbGV0IGZsYXRMaXN0OiBUYWJsZVJvd1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygcm93cykge1xuICAgICAgICBpdGVtLm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShpdGVtIGFzIFQsIHJvd05hdmlnYXRhYmxlKTtcbiAgICAgICAgZmxhdExpc3QucHVzaChpdGVtKTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiAoYy5oaWRkZW4gPSAhaXRlbS5leHBhbmRlZCkpO1xuICAgICAgICAgICAgZmxhdExpc3QgPSBmbGF0TGlzdC5jb25jYXQoY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QoaXRlbS5jaGlsZHJlbiwgcm93TmF2aWdhdGFibGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmxhdExpc3Q7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSb3dOYXZpZ2F0YWJsZTxUPihyb3c6IFQsIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBJZiBrZXkgb2YgdGhlIHJvdydzIGl0ZW0gZmllbGQgcGFzc2VkICovXG4gICAgaWYgKGlzU3RyaW5nKHJvd05hdmlnYXRhYmxlKSkge1xuICAgICAgICByZXR1cm4gISFyb3dbcm93TmF2aWdhdGFibGUgYXMgc3RyaW5nXTtcbiAgICB9XG5cbiAgICByZXR1cm4gISFyb3dOYXZpZ2F0YWJsZTtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmVlemFibGVDb2x1bW5zKGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIGZyZWV6ZUNvbHVtbnNUbzogc3RyaW5nKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgaWYgKCFjb2x1bW5zLmxlbmd0aCB8fCAhZnJlZXplQ29sdW1uc1RvKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5OYW1lcztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmICghY29sdW1uLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXNpbmcgY29sdW1uTmFtZXMuc2l6ZSBhcyBpbmRleCBvZiBhIGNvbHVtblxuICAgICAgICBjb2x1bW5OYW1lcy5zZXQoY29sdW1uLm5hbWUsIGNvbHVtbk5hbWVzLnNpemUpO1xuXG4gICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gZnJlZXplQ29sdW1uc1RvKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uTmFtZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZyZWV6YWJsZUVuZENvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bW5bXSwgZnJlZXplRW5kQ29sdW1uc1RvOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBpZiAoIWNvbHVtbnMubGVuZ3RoIHx8ICFmcmVlemVFbmRDb2x1bW5zVG8pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbk5hbWVzO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBjb2x1bW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIC8vIHVzaW5nIGNvbHVtbk5hbWVzLnNpemUgYXMgaW5kZXggb2YgYSBjb2x1bW5cbiAgICAgICAgY29sdW1uTmFtZXMuc2V0KGNvbHVtbnNbaV0ubmFtZSwgY29sdW1uTmFtZXMuc2l6ZSk7XG5cbiAgICAgICAgaWYgKGNvbHVtbnNbaV0ubmFtZSA9PT0gZnJlZXplRW5kQ29sdW1uc1RvKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uTmFtZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzPFQ+KFxuICAgIHNvdXJjZTogVFtdLFxuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICB0YWJsZVJvd3M6IFRhYmxlUm93PFQ+W10sXG4gICAgcm93Q29tcGFyYXRvcjogUm93Q29tcGFyYXRvcjxUPixcbiAgICByZWxhdGlvbktleTogc3RyaW5nLFxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRLZXk6IHN0cmluZyxcbiAgICBleHBhbmRlZFN0YXRlS2V5OiBzdHJpbmcsXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4sXG4gICAgZW5hYmxlVHJpc3RhdGVNb2RlID0gZmFsc2Vcbik6IFRhYmxlUm93PFQ+W10ge1xuICAgIGNvbnN0IHJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3NNYXAgPSBnZXRTZWxlY3Rpb25TdGF0dXNCeVJvd1ZhbHVlKHNvdXJjZSwgc2VsZWN0aW9uTW9kZSwgdGFibGVSb3dzLCByb3dDb21wYXJhdG9yKTtcblxuICAgIHNvdXJjZS5mb3JFYWNoKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID1cbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCByZWxhdGlvbktleSkgJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbVtyZWxhdGlvbktleV0pICYmXG4gICAgICAgICAgICBpdGVtW3JlbGF0aW9uS2V5XS5sZW5ndGg7XG5cbiAgICAgICAgY29uc3Qgcm93ID0gaXNUYWJsZVJvdyhpdGVtIGFzIFRhYmxlUm93PFQ+KVxuICAgICAgICAgICAgPyAoaXRlbSBhcyBUYWJsZVJvdzxUPilcbiAgICAgICAgICAgIDogbmV3VGFibGVSb3coe1xuICAgICAgICAgICAgICAgICAgdHlwZTogaGFzQ2hpbGRyZW4gfHwgaXRlbVtoYXNDaGlsZHJlbktleV0gPT09IHRydWUgPyBUYWJsZVJvd1R5cGUuVFJFRSA6IFRhYmxlUm93VHlwZS5JVEVNLFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbVtzZWxlY3RlZEtleV0gPz8gISFzZWxlY3RlZFJvd3NNYXAuZ2V0KGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICByb3cuZXhwYW5kZWQgPVxuICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZUtleSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgZXhwYW5kZWRTdGF0ZUtleSlcbiAgICAgICAgICAgICAgICA/IGl0ZW1bZXhwYW5kZWRTdGF0ZUtleV1cbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKGl0ZW0sIHJvd05hdmlnYXRhYmxlKTtcbiAgICAgICAgcm93cy5wdXNoKHJvdyk7XG5cbiAgICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIGl0ZW1bcmVsYXRpb25LZXldLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHJvd0NvbXBhcmF0b3IsXG4gICAgICAgICAgICAgICAgcmVsYXRpb25LZXksXG4gICAgICAgICAgICAgICAgaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXksXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRTdGF0ZUtleSxcbiAgICAgICAgICAgICAgICByb3dOYXZpZ2F0YWJsZSxcbiAgICAgICAgICAgICAgICBlbmFibGVUcmlzdGF0ZU1vZGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjLnBhcmVudCA9IGMucGFyZW50IHx8IHJvdztcbiAgICAgICAgICAgICAgICBjLmxldmVsID0gYy5wYXJlbnQubGV2ZWwgKyAxO1xuICAgICAgICAgICAgICAgIGMuaGlkZGVuID0gIWMucGFyZW50LmV4cGFuZGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3cuY2hpbGRyZW4ucHVzaCguLi5jaGlsZHJlbik7XG5cbiAgICAgICAgICAgIHJvd3MucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdy5sZXZlbCA9PT0gMCAmJiByb3cuaXNUcmVlKSB7XG4gICAgICAgICAgICBkZnMoW3Jvd10sIChyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW46IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRldGVybWluYXRlQ2hpbGRyZW46IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQWxsID0gc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IGNoaWxkcmVuLmxlbmd0aCAmJiBjaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU29tZSA9IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICBpZiAoci5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihyb3dzLCByLCBbXSwgW10pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZW5hYmxlVHJpc3RhdGVNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHIuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkU29tZSB8fCBpbmRldGVybWluYXRlQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByLmNoZWNrZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqIFJ1bnMgYHJvd0NvbXBhcmF0b3JgIGZ1bmN0aW9uIGFnYWluc3QgY2hlY2tlZCByb3dzIGFuZCBjb21wYXJlcyB0aGVtIHdpdGggdGhlIG5ldyBgc291cmNlYFxuICogSWYgbWF0Y2hlZCwgY3JlYXRlcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBzb3VyY2UgaXRlbSBhbmQgY2hlY2tlZCBzdGF0dXMgb2YgY29ycmVzcG9uZGluZyByb3cuXG4gKlxuICogQHJldHVybnMgYE1hcGAgb2JqZWN0IHdpdGggdGhlIGBjaGVja2VkYCBzdGF0dXMgZm9yIHBhcnRpY3VsYXIgc291cmNlIGl0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblN0YXR1c0J5Um93VmFsdWU8VD4oXG4gICAgc291cmNlOiBUW10sXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlLFxuICAgIHRhYmxlUm93czogVGFibGVSb3dbXSxcbiAgICByb3dDb21wYXJhdG9yOiBSb3dDb21wYXJhdG9yPFQ+XG4pOiBNYXA8VCwgYm9vbGVhbiB8IG51bGw+IHtcbiAgICBjb25zdCByb3dNYXAgPSBuZXcgTWFwPFQsIGJvb2xlYW4gfCBudWxsPigpO1xuICAgIGlmIChcbiAgICAgICAgKHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpICYmXG4gICAgICAgIHR5cGVvZiByb3dDb21wYXJhdG9yID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRSb3dzID0gdGFibGVSb3dzLmZpbHRlcigocikgPT4gci5jaGVja2VkKTtcbiAgICAgICAgY2hlY2tlZFJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IHNvdXJjZS5maW5kKChlKSA9PiByb3dDb21wYXJhdG9yKHJvdy52YWx1ZSwgZSkpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcm93TWFwLnNldChmb3VuZCwgcm93LmNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd01hcDtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNlbGVjdGlvblRvQ2hpbGRyZW48VD4oXG4gICAgYWxsUm93czogQXJyYXk8VGFibGVSb3c8VD4+LFxuICAgIHJvdzogVGFibGVSb3csXG4gICAgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLFxuICAgIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdXG4pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxDaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihyb3csIGFsbFJvd3MpO1xuXG4gICAgYWxsQ2hpbGRyZW4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICByLmNoZWNrZWQgPSByb3cuY2hlY2tlZDtcbiAgICAgICAgci5jaGVja2VkID8gYWRkZWRSb3dzLnB1c2gocikgOiByZW1vdmVkUm93cy5wdXNoKHIpO1xuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSb3dDaGlsZHJlbjxUPihyb3c6IFRhYmxlUm93PFQ+LCBhbGxSb3dzOiBUYWJsZVJvdzxUPltdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgY29uc3Qgcm93c0xlbmd0aCA9IGFsbFJvd3MubGVuZ3RoO1xuXG4gICAgLyoqXG4gICAgICogU2luY2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGZsYXQgbGlzdFxuICAgICAqIGl0IG1lYW5zIGFsbCBjaGlsZHJlbiBnbyBuZXh0IHJpZ2h0IGFmdGVyIHRoZSBleHBhbmRhYmxlIHJvd1xuICAgICAqIHVudGlsIHRoZSBuZXh0IHJvdyBoYXMgYSBtdXR1YWwgcGFyZW50XG4gICAgICovXG5cbiAgICBsZXQgaW5kZXggPSBhbGxSb3dzLmluZGV4T2Yocm93KTtcbiAgICBjb25zdCBwYXJlbnRzID0gZ2V0Um93UGFyZW50cyhyb3cpO1xuICAgIGNvbnN0IGNoaWxkcmVuOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICB3aGlsZSAoaW5kZXgrKyA8IHJvd3NMZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV4dFJvdyA9IGFsbFJvd3NbaW5kZXhdO1xuICAgICAgICBpZiAoIW5leHRSb3c/LnBhcmVudCB8fCBwYXJlbnRzLmluY2x1ZGVzKG5leHRSb3cucGFyZW50KSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW4ucHVzaChuZXh0Um93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG5cbi8qKlxuICogR2V0IHJvdyBwYXJlbnRzIHBhdGggd2hlcmUgdGhlIGZpcnN0IGlzIHRoZSBkaXJlY3QgcGFyZW50XG4gKiBAcGFyYW0gcm93IFJvdyB3aGljaCBwYXJlbnRzIHdlIG5lZWQgdG8gZmluZFxuICogQHBhcmFtIHVudGlsUGFyZW50IFBhcmVudCB0byBzdG9wIGEgc2VhcmNoIG9uLiBEZWZhdWx0IGlzIFwibnVsbFwiIHRoYXQgbWVhbnMgbG9vayB1cCB1bnRpbCB0aGUgcm9vdFxuICogQHJldHVybnMgcGFyZW50cyBsaXN0IFtkaXJlY3QgcGFyZW50LCAuLi4sIGFuY2VzdG9yXVxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93UGFyZW50czxUPihyb3c6IFRhYmxlUm93PFQ+LCB1bnRpbFBhcmVudDogVGFibGVSb3c8VD4gfCBudWxsID0gbnVsbCk6IFRhYmxlUm93PFQ+W10ge1xuICAgIHVudGlsUGFyZW50ID0gdW50aWxQYXJlbnQgfHwgbnVsbDsgLy8gdG8gYXZvaWQgXCJ1bmRlZmluZWRcIlxuICAgIGNvbnN0IHBhcmVudHM6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICBsZXQgcGFyZW50ID0gcm93LnBhcmVudCB8fCBudWxsOyAvLyBlbXB0eSBwYXJlbnQgc2hvdWxkIGJlIGNvZXJjZWQgdG8gXCJudWxsXCIgZG8gbm90IGdldCBpbnRvIGluZmluaXRlIGxvb3BcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gdW50aWxQYXJlbnQpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRhU3RyZWFtPFQ+KHNvdXJjZTogRmRwVGFibGVEYXRhU291cmNlPFQ+KTogVGFibGVEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXNEYXRhU291cmNlKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZSBhcyBUYWJsZURhdGFTb3VyY2U8VD47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5VGFibGVEYXRhU291cmNlKHNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZVRhYmxlRGF0YVNvdXJjZShzb3VyY2UpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqIENyZWF0ZXMgYW4gZW1wdHkgY29sdW1uIHNrZWxldG9uIG9iamVjdC5cbiAqIEByZXR1cm5zIENvbHVtbiBtb2RlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTmV3Um93U2tlbGV0b248VD4oZWRpdGFibGVSb3dTa2VsZXRvbjogVCwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IFQge1xuICAgIGlmIChlZGl0YWJsZVJvd1NrZWxldG9uKSB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAoZWRpdGFibGVSb3dTa2VsZXRvbik7XG4gICAgfVxuXG4gICAgbGV0IG5ld1JvdyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIG5ld1JvdyA9IHNldChuZXdSb3csIGNvbHVtbi5rZXksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3Um93IGFzIFQ7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cFJvdyhyb3c6IFRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuR1JPVVA7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRyZWVMaWtlR3JvdXBlZFJvd3MoXG4gICAgZ3JvdXBlZFJvd3M6IFRyZWVMaWtlPFRhYmxlUm93PltdLFxuICAgIGdyb3VwUnVsZXNNYXA6IE1hcDxzdHJpbmcsIENvbGxlY3Rpb25Hcm91cD5cbik6IFRyZWVMaWtlPFRhYmxlUm93PltdIHtcbiAgICBpZiAoIWdyb3VwZWRSb3dzWzBdIHx8ICFpc0dyb3VwUm93KGdyb3VwZWRSb3dzWzBdKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXBlZFJvd3M7XG4gICAgfVxuXG4gICAgY29uc3QgdHJlZUxpa2VSb3dzID0gZ3JvdXBlZFJvd3MgYXMgVHJlZUxpa2U8VGFibGVSb3c8R3JvdXBUYWJsZVJvd1ZhbHVlVHlwZT4+W107XG4gICAgY29uc3QgZmlyc3RSb3cgPSB0cmVlTGlrZVJvd3NbMF07XG5cbiAgICB0cmVlTGlrZVJvd3MuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgZ3JvdXAuX2NoaWxkcmVuID0gc29ydFRyZWVMaWtlR3JvdXBlZFJvd3MoZ3JvdXAuX2NoaWxkcmVuLCBncm91cFJ1bGVzTWFwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZ3JvdXBSdWxlID0gZ3JvdXBSdWxlc01hcC5nZXQoZmlyc3RSb3cudmFsdWUuZmllbGQpO1xuXG4gICAgaWYgKCFncm91cFJ1bGUgfHwgZ3JvdXBSdWxlLmRpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5OT05FKSB7XG4gICAgICAgIHJldHVybiB0cmVlTGlrZVJvd3M7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gZ3JvdXBSdWxlLmRpcmVjdGlvbjtcbiAgICBjb25zdCBkaXJlY3Rpb25NdWx0aXBsaWVyID0gZGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQyA/IDEgOiBkaXJlY3Rpb24gPT09IFNvcnREaXJlY3Rpb24uREVTQyA/IC0xIDogMDtcblxuICAgIHJldHVybiB0cmVlTGlrZVJvd3Muc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFWYWx1ZSA9IGEudmFsdWUudmFsdWUgYXMgYW55O1xuICAgICAgICBjb25zdCBiVmFsdWUgPSBiLnZhbHVlLnZhbHVlIGFzIGFueTtcblxuICAgICAgICBjb25zdCBhTnVtYmVyID0gTnVtYmVyLnBhcnNlRmxvYXQoYVZhbHVlKTtcbiAgICAgICAgY29uc3QgYk51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KGJWYWx1ZSk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGFOdW1iZXIpICYmICFOdW1iZXIuaXNOYU4oYk51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAoYU51bWJlciAtIGJOdW1iZXIpICogZGlyZWN0aW9uTXVsdGlwbGllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoYVZhbHVlID4gYlZhbHVlID8gMSA6IC0xKSAqIGRpcmVjdGlvbk11bHRpcGxpZXI7XG4gICAgfSk7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRyZWVMaWtlVG9GbGF0TGlzdDxLPih0cmVlTGlrZUxpc3Q6IFRyZWVMaWtlPEs+W10pOiBLW10ge1xuICAgIGxldCBmbGF0TGlzdDogS1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdHJlZUxpa2VMaXN0KSB7XG4gICAgICAgIGZsYXRMaXN0LnB1c2goaXRlbSk7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbS5fY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBmbGF0TGlzdCA9IGZsYXRMaXN0LmNvbmNhdChjb252ZXJ0VHJlZUxpa2VUb0ZsYXRMaXN0KGl0ZW0uX2NoaWxkcmVuKSk7XG4gICAgICAgICAgICBkZWxldGUgaXRlbS5fY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdExpc3Q7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogR3JvdXAgdGFibGUgcm93cyBhbmQgcmV0dXJuIHRyZWUgbGlrZSByb3dzIGxpc3QuXG4gKiBJdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSBydWxlcyBncm91cCBydWxlcyB0byBncm91cCBieVxuICogQHBhcmFtIHJvd3Mgc291cmNlIHRhYmxlIHJvd3NcbiAqIEBwYXJhbSBwYXJlbnQgcm93IHBhcmVudFxuICogQHBhcmFtIGxldmVsIGxldmVsIG9mIG5lc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdyb3VwZWRUYWJsZVJvd3NUcmVlKFxuICAgIHJ1bGVzOiBDb2xsZWN0aW9uR3JvdXBbXSxcbiAgICByb3dzOiBUYWJsZVJvd1tdLFxuICAgIHBhcmVudDogVGFibGVSb3cgfCBudWxsID0gbnVsbCxcbiAgICBsZXZlbCA9IDBcbik6IFRyZWVMaWtlPFRhYmxlUm93PltdIHtcbiAgICBydWxlcyA9IFsuLi5ydWxlc107XG5cbiAgICBpZiAoIXJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAvLyBubyBydWxlcyBtZWFuIHRoYXQgaXQncyB0aGUgbGV2ZWwgb2Ygc291cmNlIGl0ZW1zXG4gICAgICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICByb3cucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgcm93LmxldmVsID0gbGV2ZWw7XG4gICAgICAgICAgICByb3cuaGlkZGVuID0gISFwYXJlbnQgJiYgIXBhcmVudC5leHBhbmRlZDtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJldHJpZXZlIGZpcnN0IGdyb3VwIHJ1bGVcbiAgICBjb25zdCBydWxlID0gcnVsZXMuc2hpZnQoKSE7XG5cbiAgICAvLyBCdWlsZCBtYXAgb2YgdW5pcXVlIHZhbHVlcyBmb3IgYSBnaXZlbiBncm91cCBydWxlXG4gICAgY29uc3QgdmFsdWVzSGFzaCA9IHJvd3NcbiAgICAgICAgLmZpbHRlcigocikgPT4gci5zdGF0ZSAhPT0gJ2VkaXRhYmxlJylcbiAgICAgICAgLnJlZHVjZSgoaGFzaCwgcm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gZ2V0KHJvdy52YWx1ZSwgcnVsZS5maWVsZCk7XG5cbiAgICAgICAgICAgIGlmICghaGFzaC5oYXMobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNoLnNldChtb2RlbFZhbHVlLCBbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhc2guZ2V0KG1vZGVsVmFsdWUpPy5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICB9LCBuZXcgTWFwPHVua25vd24sIFRhYmxlUm93W10+KCkpO1xuXG4gICAgLy8gQnVpbGQgdGFibGUgcm93cyB0cmVlXG4gICAgbGV0IGdyb3VwZWRUYWJsZVJvd3M6IFRyZWVMaWtlPFRhYmxlUm93PltdID0gW107XG5cbiAgICBpZiAocm93cy5zb21lKChyKSA9PiByLnN0YXRlID09PSAnZWRpdGFibGUnKSkge1xuICAgICAgICBncm91cGVkVGFibGVSb3dzID0gcm93c1xuICAgICAgICAgICAgLmZpbHRlcigocikgPT4gci5zdGF0ZSA9PT0gJ2VkaXRhYmxlJylcbiAgICAgICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgcm93LmxldmVsID0gLTE7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9ICEhcGFyZW50ICYmICFwYXJlbnQuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3ZhbHVlLCB2YWx1ZXNdIG9mIEFycmF5LmZyb20odmFsdWVzSGFzaCkpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gcm93cy5maWx0ZXIoKF9pdGVtKSA9PiB2YWx1ZXMuaW5jbHVkZXMoX2l0ZW0pKTtcblxuICAgICAgICBpZiAoZmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cFRhYmxlUm93OiBUcmVlTGlrZTxUYWJsZVJvdzxHcm91cFRhYmxlUm93VmFsdWVUeXBlPj4gPSBuZXdUYWJsZVJvdzxHcm91cFRhYmxlUm93VmFsdWVUeXBlPih7XG4gICAgICAgICAgICB0eXBlOiBUYWJsZVJvd1R5cGUuR1JPVVAsXG4gICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgdmFsdWU6IHsgZmllbGQ6IHJ1bGUuZmllbGQsIHZhbHVlLCBjb3VudDogMCB9LFxuICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICBoaWRkZW46ICEhcGFyZW50ICYmICFwYXJlbnQuZXhwYW5kZWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRzIGdyb3VwJ3MgY2hpbGRyZW4gcm93c1xuICAgICAgICBncm91cFRhYmxlUm93Ll9jaGlsZHJlbiA9IGNyZWF0ZUdyb3VwZWRUYWJsZVJvd3NUcmVlKHJ1bGVzLCBmaWx0ZXJlZFJvd3MsIGdyb3VwVGFibGVSb3csIGxldmVsICsgMSk7XG5cbiAgICAgICAgZ3JvdXBUYWJsZVJvdy52YWx1ZS5jb3VudCA9IGdyb3VwVGFibGVSb3cuX2NoaWxkcmVuPy5sZW5ndGg7XG5cbiAgICAgICAgZ3JvdXBlZFRhYmxlUm93cy5wdXNoKGdyb3VwVGFibGVSb3cpO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cGVkVGFibGVSb3dzO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3M8VD4oXG4gICAgc291cmNlOiBUW10sXG4gICAgYWRkZWRJdGVtczogVFtdLFxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmcsXG4gICAgcm93TmF2aWdhdGFibGU6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlLFxuICAgIHJvd3M6IFRhYmxlUm93W10sXG4gICAgcm93Q29tcGFyYXRvcjogUm93Q29tcGFyYXRvclxuKTogVGFibGVSb3c8VD5bXSB7XG4gICAgY29uc3Qgcm93SXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICBpZiAoaXNUYWJsZVJvdyhyb3dJdGVtKSkge1xuICAgICAgICByZXR1cm4gc291cmNlIGFzIFRhYmxlUm93W107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzTWFwID0gZ2V0U2VsZWN0aW9uU3RhdHVzQnlSb3dWYWx1ZShzb3VyY2UsIHNlbGVjdGlvbk1vZGUsIHJvd3MsIHJvd0NvbXBhcmF0b3IpO1xuICAgIHJldHVybiBzb3VyY2UubWFwKChpdGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmV3SXRlbSA9IGFkZGVkSXRlbXMuaW5jbHVkZXMoaXRlbSk7XG4gICAgICAgIGNvbnN0IHJvdyA9IG5ld1RhYmxlUm93KHtcbiAgICAgICAgICAgIHR5cGU6IFRhYmxlUm93VHlwZS5JVEVNLFxuICAgICAgICAgICAgY2hlY2tlZDogaXRlbVtzZWxlY3RlZEtleV0gPz8gISFzZWxlY3RlZFJvd3NNYXAuZ2V0KGl0ZW0pLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICB9KTtcbiAgICAgICAgcm93Lm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShpdGVtLCByb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIHJvdy5zdGF0ZSA9IGlzTmV3SXRlbSA/ICdlZGl0YWJsZScgOiAncmVhZG9ubHknO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJlZVJvd0ZpcnN0Q2VsbChjZWxsSW5kZXg6IG51bWJlciwgcm93OiBUYWJsZVJvdywgZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoY2VsbEluZGV4ID09PSAwICYmIGlzVHJlZVJvdyhyb3cpKSB8fCAoISFldmVudCAmJiAhcm93LmlzVHJlZSk7XG59XG4iXX0=
|
|
@@ -114,7 +114,7 @@ export class MoveToComponent {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
MoveToComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MoveToComponent, deps: [{ token: i1.DialogRef }, { token: i1.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
117
|
-
MoveToComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MoveToComponent, selector: "ng-component", ngImport: i0, template: "<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 class=\"fd-title--bold\" *ngIf=\"!_currentFolder\" fd-title>\n {{ 'platformUploadCollection.moveToTitle' | fdTranslate }}\n </h1>\n <ng-container *ngIf=\"_currentFolder\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n (click)=\"_goToParentFolder()\"\n ></button>\n <h1 fd-title>\n <span>{{ 'platformUploadCollection.moveToTitleFolder' | fdTranslate }}</span>\n {{ _currentFolder.name }}\n </h1>\n </ng-container>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformUploadCollection.moveToNewFolderBtnLabel' | fdTranslate\"\n (click)=\"_newFolder()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body class=\"fd-dialog__body--no-horizontal-padding\">\n <ul fd-list>\n <li *ngIf=\"!_currentFolder\" fd-list-item class=\"fd-list__item--title-background\">\n <span fd-list-title>{{ 'platformUploadCollection.moveToAllFilesSubHeaderLabel' | fdTranslate }}</span>\n </li>\n <li\n fd-list-item\n *ngFor=\"let folder of _foldersList\"\n [selected]=\"selectedFolder?.documentId === folder.documentId\"\n >\n <a fd-list-link (click)=\"_hasFolders(folder.files) ? _openFolder(folder) : _selectFolder(folder)\">\n <fd-icon class=\"fdp-upload-collection__fd-icon\" glyph=\"folder-blank\"></fd-icon>\n <span fd-list-title>{{ folder.name }}</span>\n <i *ngIf=\"_hasFolders(folder.files)\" fd-list-icon glyph=\"slim-arrow-right\"></i>\n </a>\n </li>\n </ul>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n type=\"submit\"\n [disabled]=\"\n !(\n (selectedFolder && originalFolder?.documentId !== selectedFolder.documentId) ||\n (!selectedFolder && originalFolder?.documentId !== _currentFolder?.documentId)\n )\n \"\n (click)=\"_confirm()\"\n >\n {{ 'platformUploadCollection.moveToConfirmBtn' | fdTranslate }}\n </fd-button-bar>\n <fd-button-bar (click)=\"_close()\">\n {{ 'platformUploadCollection.moveToCloseBtn' | fdTranslate }}\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n", styles: [".fd-list__item--title-background{background-color:var(--sapList_HeaderBackground)}.fd-dialog__body--no-horizontal-padding{padding-left:0!important;padding-right:0!important}.fd-title--bold{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i4.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i4.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i5.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i6.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i7.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i8.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i8.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "directive", type: i8.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i8.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "directive", type: i8.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "pipe", type: i9.FdTranslatePipe, name: "fdTranslate" }] });
|
|
117
|
+
MoveToComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MoveToComponent, selector: "ng-component", ngImport: i0, template: "<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 class=\"fd-title--bold\" *ngIf=\"!_currentFolder\" fd-title>\n {{ 'platformUploadCollection.moveToTitle' | fdTranslate }}\n </h1>\n <ng-container *ngIf=\"_currentFolder\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n (click)=\"_goToParentFolder()\"\n ></button>\n <h1 fd-title>\n <span>{{ 'platformUploadCollection.moveToTitleFolder' | fdTranslate }}</span>\n {{ _currentFolder.name }}\n </h1>\n </ng-container>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformUploadCollection.moveToNewFolderBtnLabel' | fdTranslate\"\n (click)=\"_newFolder()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body class=\"fd-dialog__body--no-horizontal-padding\">\n <ul fd-list>\n <li *ngIf=\"!_currentFolder\" fd-list-item class=\"fd-list__item--title-background\">\n <span fd-list-title>{{ 'platformUploadCollection.moveToAllFilesSubHeaderLabel' | fdTranslate }}</span>\n </li>\n <li\n fd-list-item\n *ngFor=\"let folder of _foldersList\"\n [selected]=\"selectedFolder?.documentId === folder.documentId\"\n >\n <a fd-list-link (click)=\"_hasFolders(folder.files) ? _openFolder(folder) : _selectFolder(folder)\">\n <fd-icon class=\"fdp-upload-collection__fd-icon\" glyph=\"folder-blank\"></fd-icon>\n <span fd-list-title>{{ folder.name }}</span>\n <i *ngIf=\"_hasFolders(folder.files)\" fd-list-icon glyph=\"slim-arrow-right\"></i>\n </a>\n </li>\n </ul>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n type=\"submit\"\n [disabled]=\"\n !(\n (selectedFolder && originalFolder?.documentId !== selectedFolder.documentId) ||\n (!selectedFolder && originalFolder?.documentId !== _currentFolder?.documentId)\n )\n \"\n (click)=\"_confirm()\"\n >\n {{ 'platformUploadCollection.moveToConfirmBtn' | fdTranslate }}\n </fd-button-bar>\n <fd-button-bar (click)=\"_close()\">\n {{ 'platformUploadCollection.moveToCloseBtn' | fdTranslate }}\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n", styles: [".fd-list__item--title-background{background-color:var(--sapList_HeaderBackground)}.fd-dialog__body--no-horizontal-padding{padding-left:0!important;padding-right:0!important}.fd-title--bold{font-weight:700}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i4.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i4.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i5.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i6.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i7.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i8.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i8.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText", "ariaRole"], outputs: ["keyDown"] }, { kind: "directive", type: i8.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i8.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "directive", type: i8.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "pipe", type: i9.FdTranslatePipe, name: "fdTranslate" }] });
|
|
118
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MoveToComponent, decorators: [{
|
|
119
119
|
type: Component,
|
|
120
120
|
args: [{ template: "<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h1 class=\"fd-title--bold\" *ngIf=\"!_currentFolder\" fd-title>\n {{ 'platformUploadCollection.moveToTitle' | fdTranslate }}\n </h1>\n <ng-container *ngIf=\"_currentFolder\">\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"navigation-left-arrow\"\n (click)=\"_goToParentFolder()\"\n ></button>\n <h1 fd-title>\n <span>{{ 'platformUploadCollection.moveToTitleFolder' | fdTranslate }}</span>\n {{ _currentFolder.name }}\n </h1>\n </ng-container>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformUploadCollection.moveToNewFolderBtnLabel' | fdTranslate\"\n (click)=\"_newFolder()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body class=\"fd-dialog__body--no-horizontal-padding\">\n <ul fd-list>\n <li *ngIf=\"!_currentFolder\" fd-list-item class=\"fd-list__item--title-background\">\n <span fd-list-title>{{ 'platformUploadCollection.moveToAllFilesSubHeaderLabel' | fdTranslate }}</span>\n </li>\n <li\n fd-list-item\n *ngFor=\"let folder of _foldersList\"\n [selected]=\"selectedFolder?.documentId === folder.documentId\"\n >\n <a fd-list-link (click)=\"_hasFolders(folder.files) ? _openFolder(folder) : _selectFolder(folder)\">\n <fd-icon class=\"fdp-upload-collection__fd-icon\" glyph=\"folder-blank\"></fd-icon>\n <span fd-list-title>{{ folder.name }}</span>\n <i *ngIf=\"_hasFolders(folder.files)\" fd-list-icon glyph=\"slim-arrow-right\"></i>\n </a>\n </li>\n </ul>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n fdType=\"emphasized\"\n type=\"submit\"\n [disabled]=\"\n !(\n (selectedFolder && originalFolder?.documentId !== selectedFolder.documentId) ||\n (!selectedFolder && originalFolder?.documentId !== _currentFolder?.documentId)\n )\n \"\n (click)=\"_confirm()\"\n >\n {{ 'platformUploadCollection.moveToConfirmBtn' | fdTranslate }}\n </fd-button-bar>\n <fd-button-bar (click)=\"_close()\">\n {{ 'platformUploadCollection.moveToCloseBtn' | fdTranslate }}\n </fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n", styles: [".fd-list__item--title-background{background-color:var(--sapList_HeaderBackground)}.fd-dialog__body--no-horizontal-padding{padding-left:0!important;padding-right:0!important}.fd-title--bold{font-weight:700}\n"] }]
|