tango-app-ui-store-builder 1.2.16 → 1.2.18
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/esm2022/lib/components/access-denied/access-denied.component.mjs +31 -0
- package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +25 -3
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +133 -21
- package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +25 -9
- package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +28 -5
- package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +6 -5
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
- package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
- package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +6 -5
- package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -3
- package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +3 -3
- package/esm2022/lib/functions/feature-access.guard.mjs +20 -0
- package/esm2022/lib/functions/plano.function.mjs +22 -1
- package/esm2022/lib/services/store-builder.service.mjs +24 -3
- package/esm2022/lib/tango-store-builder-routing.module.mjs +35 -55
- package/esm2022/lib/tango-store-builder.module.mjs +14 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +5863 -376
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/access-denied/access-denied.component.d.ts +18 -0
- package/lib/components/fixture-template-table/fixture-template-table.component.d.ts +6 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +1 -0
- package/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +8 -0
- package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
- package/lib/components/plano-library/fixture-library/fixture-library.component.d.ts +5 -1
- package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
- package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
- package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
- package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
- package/lib/functions/feature-access.guard.d.ts +9 -0
- package/lib/functions/plano.function.d.ts +9 -0
- package/lib/services/store-builder.service.d.ts +16 -0
- package/lib/tango-store-builder.module.d.ts +62 -58
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { catchError, map, of } from 'rxjs';
|
|
4
|
+
import { StoreBuilderService } from '../services/store-builder.service';
|
|
5
|
+
/**
|
|
6
|
+
* Route guard for the Find & Replace pages. Allows navigation only when the
|
|
7
|
+
* session user's email is in the planostaticdatas `allowedFindReplaceUsers`
|
|
8
|
+
* allowlist (checked server-side via StoreBuilderService.getFindReplaceAccess).
|
|
9
|
+
* Denied users — and any error resolving access — are redirected to the shared
|
|
10
|
+
* Access-denied view. Same email-based mechanism the Looks feature uses.
|
|
11
|
+
*/
|
|
12
|
+
export const findReplaceAccessGuard = () => {
|
|
13
|
+
const storeBuilderService = inject(StoreBuilderService);
|
|
14
|
+
const router = inject(Router);
|
|
15
|
+
const denied = () => router.createUrlTree(['/manage/planogram/access-denied'], {
|
|
16
|
+
queryParams: { feature: 'Find and Replace' },
|
|
17
|
+
});
|
|
18
|
+
return storeBuilderService.getFindReplaceAccess().pipe(map((res) => (res?.data?.allowed ? true : denied())), catchError(() => of(denied())));
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1hY2Nlc3MuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvZnVuY3Rpb25zL2ZlYXR1cmUtYWNjZXNzLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFpQixNQUFNLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFeEU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQWtCLEdBQWtDLEVBQUU7SUFDdkYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUIsTUFBTSxNQUFNLEdBQUcsR0FBWSxFQUFFLENBQzNCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFO1FBQ3hELFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRTtLQUM3QyxDQUFDLENBQUM7SUFFTCxPQUFPLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUNwRCxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUN6RCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FDL0IsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRlIGd1YXJkIGZvciB0aGUgRmluZCAmIFJlcGxhY2UgcGFnZXMuIEFsbG93cyBuYXZpZ2F0aW9uIG9ubHkgd2hlbiB0aGVcclxuICogc2Vzc2lvbiB1c2VyJ3MgZW1haWwgaXMgaW4gdGhlIHBsYW5vc3RhdGljZGF0YXMgYGFsbG93ZWRGaW5kUmVwbGFjZVVzZXJzYFxyXG4gKiBhbGxvd2xpc3QgKGNoZWNrZWQgc2VydmVyLXNpZGUgdmlhIFN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0RmluZFJlcGxhY2VBY2Nlc3MpLlxyXG4gKiBEZW5pZWQgdXNlcnMg4oCUIGFuZCBhbnkgZXJyb3IgcmVzb2x2aW5nIGFjY2VzcyDigJQgYXJlIHJlZGlyZWN0ZWQgdG8gdGhlIHNoYXJlZFxyXG4gKiBBY2Nlc3MtZGVuaWVkIHZpZXcuIFNhbWUgZW1haWwtYmFzZWQgbWVjaGFuaXNtIHRoZSBMb29rcyBmZWF0dXJlIHVzZXMuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZmluZFJlcGxhY2VBY2Nlc3NHdWFyZDogQ2FuQWN0aXZhdGVGbiA9ICgpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiA9PiB7XHJcbiAgY29uc3Qgc3RvcmVCdWlsZGVyU2VydmljZSA9IGluamVjdChTdG9yZUJ1aWxkZXJTZXJ2aWNlKTtcclxuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHJcbiAgY29uc3QgZGVuaWVkID0gKCk6IFVybFRyZWUgPT5cclxuICAgIHJvdXRlci5jcmVhdGVVcmxUcmVlKFsnL21hbmFnZS9wbGFub2dyYW0vYWNjZXNzLWRlbmllZCddLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IGZlYXR1cmU6ICdGaW5kIGFuZCBSZXBsYWNlJyB9LFxyXG4gICAgfSk7XHJcblxyXG4gIHJldHVybiBzdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldEZpbmRSZXBsYWNlQWNjZXNzKCkucGlwZShcclxuICAgIG1hcCgocmVzOiBhbnkpID0+IChyZXM/LmRhdGE/LmFsbG93ZWQgPyB0cnVlIDogZGVuaWVkKCkpKSxcclxuICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoZGVuaWVkKCkpKSxcclxuICApO1xyXG59O1xyXG4iXX0=
|
|
@@ -192,6 +192,27 @@ export const getFixtureCanvasLabel = (fixture) => {
|
|
|
192
192
|
.filter((v) => v !== null && v !== undefined && v !== "")
|
|
193
193
|
.join("-");
|
|
194
194
|
};
|
|
195
|
+
/**
|
|
196
|
+
* Computes a fixture's product capacity as the live sum of its individual
|
|
197
|
+
* shelf capacities, mirroring the backend rule: a tray holds
|
|
198
|
+
* productPerShelf x trayRows, a plain shelf holds productPerShelf, and
|
|
199
|
+
* VM-only shelves carry no products. Always derive the displayed "Products"
|
|
200
|
+
* count from this (the shelf config) rather than the stored fixtureCapacity,
|
|
201
|
+
* which can be stale relative to the current shelves.
|
|
202
|
+
*/
|
|
203
|
+
export const getFixtureProductCapacity = (shelfConfig) => {
|
|
204
|
+
if (!Array.isArray(shelfConfig))
|
|
205
|
+
return 0;
|
|
206
|
+
return shelfConfig.reduce((total, shelf) => {
|
|
207
|
+
if (!shelf || shelf.shelfType === "vmonly")
|
|
208
|
+
return total;
|
|
209
|
+
const perShelf = Number(shelf.productPerShelf) || 0;
|
|
210
|
+
if (shelf.shelfType === "tray") {
|
|
211
|
+
return total + perShelf * (Number(shelf.trayRows) || 0);
|
|
212
|
+
}
|
|
213
|
+
return total + perShelf;
|
|
214
|
+
}, 0);
|
|
215
|
+
};
|
|
195
216
|
export const lightenColor = (hex, amount = 0.3) => {
|
|
196
217
|
if (!hex)
|
|
197
218
|
return hex;
|
|
@@ -204,4 +225,4 @@ export const lightenColor = (hex, amount = 0.3) => {
|
|
|
204
225
|
b = Math.round(b + (255 - b) * amount);
|
|
205
226
|
return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, "0")}`;
|
|
206
227
|
};
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbm8uZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBTyxFQUFFO0lBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUc7YUFDUCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN6RTtTQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDbEQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7b0JBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3JCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFD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TUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUVsQixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUV2QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3hFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yRm4sXHJcbiAgRm9ybUFycmF5LFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUVtcHR5RmllbGRzID0gKG9iajogYW55KTogYW55ID0+IHtcclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICByZXR1cm4gb2JqXHJcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHJlbW92ZUVtcHR5RmllbGRzKGl0ZW0pKVxyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBcIlwiKTtcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgb2JqICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVtb3ZlRW1wdHlGaWVsZHMob2JqW2tleV0pO1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCByZ2JUb0hleCA9IChyZ2I/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghcmdiKSByZXR1cm4gXCIjZmZmXCI7XHJcbiAgY29uc3QgcmVzdWx0ID0gcmdiXHJcbiAgICAucmVwbGFjZSgvXFxzKy9nLCBcIlwiKSAvLyByZW1vdmUgc3BhY2VzXHJcbiAgICAubWF0Y2goL15yZ2JhP1xcKChcXGQrKSwoXFxkKyksKFxcZCspL2kpOyAvLyBtYXRjaCByLCBnLCBiXHJcblxyXG4gIGlmICghcmVzdWx0KSByZXR1cm4gXCIjMDAwMDAwXCI7IC8vIGZhbGxiYWNrXHJcblxyXG4gIGNvbnN0IHIgPSBwYXJzZUludChyZXN1bHRbMV0pLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIik7XHJcbiAgY29uc3QgZyA9IHBhcnNlSW50KHJlc3VsdFsyXSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcclxuICBjb25zdCBiID0gcGFyc2VJbnQocmVzdWx0WzNdKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG5cclxuICByZXR1cm4gYCMke3J9JHtnfSR7Yn1gLnRvVXBwZXJDYXNlKCk7IC8vIG9wdGlvbmFsOiAudG9Mb3dlckNhc2UoKVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZXBFcXVhbCA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4ge1xyXG4gIGlmIChhID09PSBiKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlmIChhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHtcclxuICAgIHJldHVybiBhID09PSBiO1xyXG4gIH1cclxuXHJcbiAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghZGVlcEVxdWFsKGFbaV0sIGJbaV0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhhKTtcclxuICAgICAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcclxuICAgICAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFLZXlzKSB7XHJcbiAgICAgICAgaWYgKCFiLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdlbmVyYWxWYWxpZGF0b3IgPSAoKTogVmFsaWRhdG9yRm4gPT4ge1xyXG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDsgLy8gYWxsb3cgcmVxdWlyZWQgdmFsaWRhdG9yIHRvIGhhbmRsZSBlbXB0eVxyXG5cclxuICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XHJcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgLy8gb25seSB3aGl0ZXNwYWNlXHJcbiAgICAgIHJldHVybiB7IHdoaXRlc3BhY2U6IHRydWUgfTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSAhPT0gdHJpbW1lZCkge1xyXG4gICAgICAvLyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2VcclxuICAgICAgcmV0dXJuIHsgdHJpbVNwYWNlczogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgLy8gQWNjZXB0IGFueSBjaGFyYWN0ZXJzIG90aGVyd2lzZVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtTnVtYmVyID0gKHtcclxuICBwYXJhbXMsXHJcbiAga2V5LFxyXG4gIGZhbGxiYWNrLFxyXG4gIG1pbixcclxuICBtYXgsXHJcbn06IHtcclxuICBwYXJhbXM6IGFueTtcclxuICBrZXk6IHN0cmluZztcclxuICBmYWxsYmFjazogbnVtYmVyO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbn0pOiBudW1iZXIgPT4ge1xyXG4gIGNvbnN0IHZhbHVlID0gTnVtYmVyKHBhcmFtcz8uZ2V0KGtleSkpO1xyXG5cclxuICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbHVlIDwgbWluKSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gbWF4KSByZXR1cm4gZmFsbGJhY2s7XHJcblxyXG4gIHJldHVybiB2YWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtU3RyaW5nID0gKHtcclxuICBwYXJhbXMsXHJcbiAga2V5LFxyXG4gIGZhbGxiYWNrLFxyXG4gIGFsbG93ZWQsXHJcbn06IHtcclxuICBwYXJhbXM6IGFueTtcclxuICBrZXk6IHN0cmluZztcclxuICBmYWxsYmFjazogc3RyaW5nO1xyXG4gIGFsbG93ZWQ/OiBzdHJpbmdbXTtcclxufSk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgdmFsdWUgPSBwYXJhbXM/LmdldChrZXkpO1xyXG5cclxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsbGJhY2s7XHJcbiAgaWYgKGFsbG93ZWQgJiYgIWFsbG93ZWQuaW5jbHVkZXModmFsdWUpKSByZXR1cm4gZmFsbGJhY2s7XHJcblxyXG4gIHJldHVybiB2YWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVGaWVsZEluRm9ybUFycmF5VmFsaWRhdG9yKFxyXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxyXG4pOiBWYWxpZGF0b3JGbiB7XHJcbiAgcmV0dXJuIChmb3JtQXJyYXk6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgIGlmICghKGZvcm1BcnJheSBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1BcnJheS5jb250cm9sc1xyXG4gICAgICAubWFwKChjdHJsKSA9PiBjdHJsLmdldChmaWVsZE5hbWUpPy52YWx1ZT8udHJpbT8uKCkpXHJcbiAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiAhIXYpO1xyXG5cclxuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSB2YWx1ZXMuZmlsdGVyKCh2YWwsIGlkeCkgPT4gdmFsdWVzLmluZGV4T2YodmFsKSAhPT0gaWR4KTtcclxuXHJcbiAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGgpIHtcclxuICAgICAgLy8gTWFyayBkdXBsaWNhdGVzIGluZGl2aWR1YWxseVxyXG4gICAgICBmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY3RybCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdHJsLmdldChmaWVsZE5hbWUpO1xyXG4gICAgICAgIGlmIChjb250cm9sKSB7XHJcbiAgICAgICAgICBpZiAoZHVwbGljYXRlcy5pbmNsdWRlcyhjb250cm9sLnZhbHVlPy50cmltPy4oKSkpIHtcclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyAuLi4oY29udHJvbC5lcnJvcnMgfHwge30pLCBub3RVbmlxdWU6IHRydWUgfSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wuZXJyb3JzPy5bXCJub3RVbmlxdWVcIl0pIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIG9ubHkgbm90VW5pcXVlIGVycm9yXHJcbiAgICAgICAgICAgIGNvbnN0IHsgbm90VW5pcXVlLCAuLi5yZXN0IH0gPSBjb250cm9sLmVycm9ycztcclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID8gcmVzdCA6IG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB7IG5vdFVuaXF1ZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIGlmIGZpeGVkXHJcbiAgICBmb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY3RybCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gY3RybC5nZXQoZmllbGROYW1lKTtcclxuICAgICAgaWYgKGNvbnRyb2w/LmVycm9ycz8uW1wibm90VW5pcXVlXCJdKSB7XHJcbiAgICAgICAgY29uc3QgeyBub3RVbmlxdWUsIC4uLnJlc3QgfSA9IGNvbnRyb2wuZXJyb3JzO1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5rZXlzKHJlc3QpLmxlbmd0aCA/IHJlc3QgOiBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5hbWVGcm9tRW1haWwgPSAoZW1haWw6IHN0cmluZykgPT4ge1xyXG4gIGlmICghZW1haWwgfHwgIWVtYWlsLmluY2x1ZGVzKFwiQFwiKSkgcmV0dXJuIFwiXCI7XHJcblxyXG4gIHJldHVybiBlbWFpbFxyXG4gICAgLnNwbGl0KFwiQFwiKVswXSAvLyB0YWtlIGxvY2FsIHBhcnRcclxuICAgIC5yZXBsYWNlKC9bLl8tXSsvZywgXCIgXCIpIC8vIHJlcGxhY2Ugc2VwYXJhdG9yc1xyXG4gICAgLnJlcGxhY2UoL1xcZCsvZywgXCJcIikgLy8gcmVtb3ZlIG51bWJlcnNcclxuICAgIC50cmltKClcclxuICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgKGMpID0+IGMudG9VcHBlckNhc2UoKSk7IC8vIGNhcGl0YWxpemVcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbmRpYW5QaW5jb2RlVmFsaWRhdG9yID0gKCk6IFZhbGlkYXRvckZuID0+IHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDsgLy8gbGV0IHJlcXVpcmVkIGhhbmRsZSBlbXB0eVxyXG5cclxuICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XHJcblxyXG4gICAgLy8gd2hpdGVzcGFjZS1vbmx5XHJcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHsgd2hpdGVzcGFjZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzXHJcbiAgICBpZiAodmFsdWUgIT09IHRyaW1tZWQpIHtcclxuICAgICAgcmV0dXJuIHsgdHJpbVNwYWNlczogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG11c3QgYmUgZXhhY3RseSA2IGRpZ2l0cyAmIG5vdCBzdGFydCB3aXRoIDBcclxuICAgIGNvbnN0IHBpbmNvZGVSZWdleCA9IC9eWzEtOV1bMC05XXs1fSQvO1xyXG5cclxuICAgIGlmICghcGluY29kZVJlZ2V4LnRlc3QodHJpbW1lZCkpIHtcclxuICAgICAgcmV0dXJuIHsgaW52YWxpZFBpbmNvZGU6IHRydWUgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZpeHR1cmVDYW52YXNMYWJlbCA9IChmaXh0dXJlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghZml4dHVyZSkgcmV0dXJuIFwiXCI7XHJcbiAgcmV0dXJuIFtcclxuICAgIGZpeHR1cmUudGVtcGxhdGVHcm91cE5hbWUsXHJcbiAgICBmaXh0dXJlLmZpeHR1cmVDYXRlZ29yeSxcclxuICAgIGZpeHR1cmUuZml4dHVyZVdpZHRoPy52YWx1ZSxcclxuICAgIGZpeHR1cmUuZml4dHVyZVdpZHRoPy51bml0LFxyXG4gIF1cclxuICAgIC5maWx0ZXIoKHYpID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IFwiXCIpXHJcbiAgICAuam9pbihcIi1cIik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbGlnaHRlbkNvbG9yID0gKGhleDogc3RyaW5nLCBhbW91bnQgPSAwLjMpID0+IHtcclxuICBpZiAoIWhleCkgcmV0dXJuIGhleDtcclxuXHJcbiAgY29uc3QgbnVtID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEpLCAxNik7XHJcbiAgbGV0IHIgPSBudW0gPj4gMTY7XHJcbiAgbGV0IGcgPSAobnVtID4+IDgpICYgMjU1O1xyXG4gIGxldCBiID0gbnVtICYgMjU1O1xyXG5cclxuICByID0gTWF0aC5yb3VuZChyICsgKDI1NSAtIHIpICogYW1vdW50KTtcclxuICBnID0gTWF0aC5yb3VuZChnICsgKDI1NSAtIGcpICogYW1vdW50KTtcclxuICBiID0gTWF0aC5yb3VuZChiICsgKDI1NSAtIGIpICogYW1vdW50KTtcclxuXHJcbiAgcmV0dXJuIGAjJHsoKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCBiKS50b1N0cmluZygxNikucGFkU3RhcnQoNiwgXCIwXCIpfWA7XHJcbn07XHJcbiJdfQ==
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbm8uZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBTyxFQUFFO0lBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUc7YUFDUCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN6RTtTQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDbEQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1lBQ3JCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7b0JBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3JCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFD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QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDeEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBWYWxpZGF0b3JGbixcclxuICBGb3JtQXJyYXksXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgcmVtb3ZlRW1wdHlGaWVsZHMgPSAob2JqOiBhbnkpOiBhbnkgPT4ge1xyXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgIHJldHVybiBvYmpcclxuICAgICAgLm1hcCgoaXRlbSkgPT4gcmVtb3ZlRW1wdHlGaWVsZHMoaXRlbSkpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IG51bGwgJiYgaXRlbSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0gIT09IFwiXCIpO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwpIHtcclxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZW1vdmVFbXB0eUZpZWxkcyhvYmpba2V5XSk7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IFwiXCIpIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHJnYlRvSGV4ID0gKHJnYj86IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFyZ2IpIHJldHVybiBcIiNmZmZcIjtcclxuICBjb25zdCByZXN1bHQgPSByZ2JcclxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpIC8vIHJlbW92ZSBzcGFjZXNcclxuICAgIC5tYXRjaCgvXnJnYmE/XFwoKFxcZCspLChcXGQrKSwoXFxkKykvaSk7IC8vIG1hdGNoIHIsIGcsIGJcclxuXHJcbiAgaWYgKCFyZXN1bHQpIHJldHVybiBcIiMwMDAwMDBcIjsgLy8gZmFsbGJhY2tcclxuXHJcbiAgY29uc3QgciA9IHBhcnNlSW50KHJlc3VsdFsxXSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcclxuICBjb25zdCBnID0gcGFyc2VJbnQocmVzdWx0WzJdKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gIGNvbnN0IGIgPSBwYXJzZUludChyZXN1bHRbM10pLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIik7XHJcblxyXG4gIHJldHVybiBgIyR7cn0ke2d9JHtifWAudG9VcHBlckNhc2UoKTsgLy8gb3B0aW9uYWw6IC50b0xvd2VyQ2FzZSgpXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZGVlcEVxdWFsID0gKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgaWYgKGEgPT09IGIpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGEgPT09IGI7XHJcbiAgfVxyXG5cclxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIGEgPT09IFwib2JqZWN0XCIpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xyXG4gICAgICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xyXG4gICAgICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgYUtleXMpIHtcclxuICAgICAgICBpZiAoIWIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2VuZXJhbFZhbGlkYXRvciA9ICgpOiBWYWxpZGF0b3JGbiA9PiB7XHJcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsOyAvLyBhbGxvdyByZXF1aXJlZCB2YWxpZGF0b3IgdG8gaGFuZGxlIGVtcHR5XHJcblxyXG4gICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcclxuICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAvLyBvbmx5IHdoaXRlc3BhY2VcclxuICAgICAgcmV0dXJuIHsgd2hpdGVzcGFjZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlICE9PSB0cmltbWVkKSB7XHJcbiAgICAgIC8vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZVxyXG4gICAgICByZXR1cm4geyB0cmltU3BhY2VzOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICAvLyBBY2NlcHQgYW55IGNoYXJhY3RlcnMgb3RoZXJ3aXNlXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5UGFyYW1OdW1iZXIgPSAoe1xyXG4gIHBhcmFtcyxcclxuICBrZXksXHJcbiAgZmFsbGJhY2ssXHJcbiAgbWluLFxyXG4gIG1heCxcclxufToge1xyXG4gIHBhcmFtczogYW55O1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGZhbGxiYWNrOiBudW1iZXI7XHJcbiAgbWluPzogbnVtYmVyO1xyXG4gIG1heD86IG51bWJlcjtcclxufSk6IG51bWJlciA9PiB7XHJcbiAgY29uc3QgdmFsdWUgPSBOdW1iZXIocGFyYW1zPy5nZXQoa2V5KSk7XHJcblxyXG4gIGlmIChpc05hTih2YWx1ZSkpIHJldHVybiBmYWxsYmFjaztcclxuICBpZiAobWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBtaW4pIHJldHVybiBmYWxsYmFjaztcclxuICBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPiBtYXgpIHJldHVybiBmYWxsYmFjaztcclxuXHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFF1ZXJ5UGFyYW1TdHJpbmcgPSAoe1xyXG4gIHBhcmFtcyxcclxuICBrZXksXHJcbiAgZmFsbGJhY2ssXHJcbiAgYWxsb3dlZCxcclxufToge1xyXG4gIHBhcmFtczogYW55O1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGZhbGxiYWNrOiBzdHJpbmc7XHJcbiAgYWxsb3dlZD86IHN0cmluZ1tdO1xyXG59KTogc3RyaW5nID0+IHtcclxuICBjb25zdCB2YWx1ZSA9IHBhcmFtcz8uZ2V0KGtleSk7XHJcblxyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxsYmFjaztcclxuICBpZiAoYWxsb3dlZCAmJiAhYWxsb3dlZC5pbmNsdWRlcyh2YWx1ZSkpIHJldHVybiBmYWxsYmFjaztcclxuXHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUZpZWxkSW5Gb3JtQXJyYXlWYWxpZGF0b3IoXHJcbiAgZmllbGROYW1lOiBzdHJpbmcsXHJcbik6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGZvcm1BcnJheTogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgaWYgKCEoZm9ybUFycmF5IGluc3RhbmNlb2YgRm9ybUFycmF5KSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgdmFsdWVzID0gZm9ybUFycmF5LmNvbnRyb2xzXHJcbiAgICAgIC5tYXAoKGN0cmwpID0+IGN0cmwuZ2V0KGZpZWxkTmFtZSk/LnZhbHVlPy50cmltPy4oKSlcclxuICAgICAgLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+ICEhdik7XHJcblxyXG4gICAgY29uc3QgZHVwbGljYXRlcyA9IHZhbHVlcy5maWx0ZXIoKHZhbCwgaWR4KSA9PiB2YWx1ZXMuaW5kZXhPZih2YWwpICE9PSBpZHgpO1xyXG5cclxuICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCkge1xyXG4gICAgICAvLyBNYXJrIGR1cGxpY2F0ZXMgaW5kaXZpZHVhbGx5XHJcbiAgICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjdHJsKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGN0cmwuZ2V0KGZpZWxkTmFtZSk7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgIGlmIChkdXBsaWNhdGVzLmluY2x1ZGVzKGNvbnRyb2wudmFsdWU/LnRyaW0/LigpKSkge1xyXG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IC4uLihjb250cm9sLmVycm9ycyB8fCB7fSksIG5vdFVuaXF1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC5lcnJvcnM/LltcIm5vdFVuaXF1ZVwiXSkge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgb25seSBub3RVbmlxdWUgZXJyb3JcclxuICAgICAgICAgICAgY29uc3QgeyBub3RVbmlxdWUsIC4uLnJlc3QgfSA9IGNvbnRyb2wuZXJyb3JzO1xyXG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhyZXN0KS5sZW5ndGggPyByZXN0IDogbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHsgbm90VW5pcXVlOiB0cnVlIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xlYXIgaWYgZml4ZWRcclxuICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjdHJsKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdHJsLmdldChmaWVsZE5hbWUpO1xyXG4gICAgICBpZiAoY29udHJvbD8uZXJyb3JzPy5bXCJub3RVbmlxdWVcIl0pIHtcclxuICAgICAgICBjb25zdCB7IG5vdFVuaXF1ZSwgLi4ucmVzdCB9ID0gY29udHJvbC5lcnJvcnM7XHJcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID8gcmVzdCA6IG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TmFtZUZyb21FbWFpbCA9IChlbWFpbDogc3RyaW5nKSA9PiB7XHJcbiAgaWYgKCFlbWFpbCB8fCAhZW1haWwuaW5jbHVkZXMoXCJAXCIpKSByZXR1cm4gXCJcIjtcclxuXHJcbiAgcmV0dXJuIGVtYWlsXHJcbiAgICAuc3BsaXQoXCJAXCIpWzBdIC8vIHRha2UgbG9jYWwgcGFydFxyXG4gICAgLnJlcGxhY2UoL1suXy1dKy9nLCBcIiBcIikgLy8gcmVwbGFjZSBzZXBhcmF0b3JzXHJcbiAgICAucmVwbGFjZSgvXFxkKy9nLCBcIlwiKSAvLyByZW1vdmUgbnVtYmVyc1xyXG4gICAgLnRyaW0oKVxyXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCAoYykgPT4gYy50b1VwcGVyQ2FzZSgpKTsgLy8gY2FwaXRhbGl6ZVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluZGlhblBpbmNvZGVWYWxpZGF0b3IgPSAoKTogVmFsaWRhdG9yRm4gPT4ge1xyXG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsOyAvLyBsZXQgcmVxdWlyZWQgaGFuZGxlIGVtcHR5XHJcblxyXG4gICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICAvLyB3aGl0ZXNwYWNlLW9ubHlcclxuICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4geyB3aGl0ZXNwYWNlOiB0cnVlIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXNcclxuICAgIGlmICh2YWx1ZSAhPT0gdHJpbW1lZCkge1xyXG4gICAgICByZXR1cm4geyB0cmltU3BhY2VzOiB0cnVlIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbXVzdCBiZSBleGFjdGx5IDYgZGlnaXRzICYgbm90IHN0YXJ0IHdpdGggMFxyXG4gICAgY29uc3QgcGluY29kZVJlZ2V4ID0gL15bMS05XVswLTldezV9JC87XHJcblxyXG4gICAgaWYgKCFwaW5jb2RlUmVnZXgudGVzdCh0cmltbWVkKSkge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkUGluY29kZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Rml4dHVyZUNhbnZhc0xhYmVsID0gKGZpeHR1cmU6IGFueSk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFmaXh0dXJlKSByZXR1cm4gXCJcIjtcclxuICByZXR1cm4gW1xyXG4gICAgZml4dHVyZS50ZW1wbGF0ZUdyb3VwTmFtZSxcclxuICAgIGZpeHR1cmUuZml4dHVyZUNhdGVnb3J5LFxyXG4gICAgZml4dHVyZS5maXh0dXJlV2lkdGg/LnZhbHVlLFxyXG4gICAgZml4dHVyZS5maXh0dXJlV2lkdGg/LnVuaXQsXHJcbiAgXVxyXG4gICAgLmZpbHRlcigodikgPT4gdiAhPT0gbnVsbCAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gXCJcIilcclxuICAgIC5qb2luKFwiLVwiKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb21wdXRlcyBhIGZpeHR1cmUncyBwcm9kdWN0IGNhcGFjaXR5IGFzIHRoZSBsaXZlIHN1bSBvZiBpdHMgaW5kaXZpZHVhbFxyXG4gKiBzaGVsZiBjYXBhY2l0aWVzLCBtaXJyb3JpbmcgdGhlIGJhY2tlbmQgcnVsZTogYSB0cmF5IGhvbGRzXHJcbiAqIHByb2R1Y3RQZXJTaGVsZiB4IHRyYXlSb3dzLCBhIHBsYWluIHNoZWxmIGhvbGRzIHByb2R1Y3RQZXJTaGVsZiwgYW5kXHJcbiAqIFZNLW9ubHkgc2hlbHZlcyBjYXJyeSBubyBwcm9kdWN0cy4gQWx3YXlzIGRlcml2ZSB0aGUgZGlzcGxheWVkIFwiUHJvZHVjdHNcIlxyXG4gKiBjb3VudCBmcm9tIHRoaXMgKHRoZSBzaGVsZiBjb25maWcpIHJhdGhlciB0aGFuIHRoZSBzdG9yZWQgZml4dHVyZUNhcGFjaXR5LFxyXG4gKiB3aGljaCBjYW4gYmUgc3RhbGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc2hlbHZlcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRGaXh0dXJlUHJvZHVjdENhcGFjaXR5ID0gKHNoZWxmQ29uZmlnOiBhbnkpOiBudW1iZXIgPT4ge1xyXG4gIGlmICghQXJyYXkuaXNBcnJheShzaGVsZkNvbmZpZykpIHJldHVybiAwO1xyXG4gIHJldHVybiBzaGVsZkNvbmZpZy5yZWR1Y2UoKHRvdGFsOiBudW1iZXIsIHNoZWxmOiBhbnkpID0+IHtcclxuICAgIGlmICghc2hlbGYgfHwgc2hlbGYuc2hlbGZUeXBlID09PSBcInZtb25seVwiKSByZXR1cm4gdG90YWw7XHJcbiAgICBjb25zdCBwZXJTaGVsZiA9IE51bWJlcihzaGVsZi5wcm9kdWN0UGVyU2hlbGYpIHx8IDA7XHJcbiAgICBpZiAoc2hlbGYuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICByZXR1cm4gdG90YWwgKyBwZXJTaGVsZiAqIChOdW1iZXIoc2hlbGYudHJheVJvd3MpIHx8IDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvdGFsICsgcGVyU2hlbGY7XHJcbiAgfSwgMCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbGlnaHRlbkNvbG9yID0gKGhleDogc3RyaW5nLCBhbW91bnQgPSAwLjMpID0+IHtcclxuICBpZiAoIWhleCkgcmV0dXJuIGhleDtcclxuXHJcbiAgY29uc3QgbnVtID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEpLCAxNik7XHJcbiAgbGV0IHIgPSBudW0gPj4gMTY7XHJcbiAgbGV0IGcgPSAobnVtID4+IDgpICYgMjU1O1xyXG4gIGxldCBiID0gbnVtICYgMjU1O1xyXG5cclxuICByID0gTWF0aC5yb3VuZChyICsgKDI1NSAtIHIpICogYW1vdW50KTtcclxuICBnID0gTWF0aC5yb3VuZChnICsgKDI1NSAtIGcpICogYW1vdW50KTtcclxuICBiID0gTWF0aC5yb3VuZChiICsgKDI1NSAtIGIpICogYW1vdW50KTtcclxuXHJcbiAgcmV0dXJuIGAjJHsoKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCBiKS50b1N0cmluZygxNikucGFkU3RhcnQoNiwgXCIwXCIpfWA7XHJcbn07XHJcbiJdfQ==
|