@libs-ui/components-popover 0.1.1-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # popover
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,4 @@
1
+ import { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';
2
+ export declare const KEY_QUERY_POPOVER_TIMER_DESTROY = "popover-timer-destroy";
3
+ export declare const getPopoverTimerDestroyInQueryUrl: () => number;
4
+ export declare const getListDirections: (direction: TYPE_POPOVER_DIRECTION) => Array<TYPE_POPOVER_DIRECTION>;
@@ -0,0 +1,15 @@
1
+ import { get, UtilsUrlSearchParams } from '@libs-ui/utils';
2
+ export const KEY_QUERY_POPOVER_TIMER_DESTROY = 'popover-timer-destroy';
3
+ const timerDestroy = parseInt(new UtilsUrlSearchParams(location.href).get(KEY_QUERY_POPOVER_TIMER_DESTROY) || '0');
4
+ export const getPopoverTimerDestroyInQueryUrl = () => {
5
+ return timerDestroy;
6
+ };
7
+ export const getListDirections = (direction) => {
8
+ return get({
9
+ bottom: ['bottom', 'top', 'right', 'left'],
10
+ right: ['right', 'left', 'bottom', 'top'],
11
+ left: ['left', 'right', 'bottom', 'top'],
12
+ top: ['top', 'bottom', 'right', 'left'],
13
+ }, direction);
14
+ };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wb3BvdmVyL3NyYy9kZWZpbmVzL2NvbnN0YW50cy5kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLHVCQUF1QixDQUFDO0FBRXZFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUVuSCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFXLEVBQUU7SUFDM0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxTQUFpQyxFQUFpQyxFQUFFO0lBQ3BHLE9BQU8sR0FBRyxDQUNSO1FBQ0UsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQzFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQztRQUN6QyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUM7UUFDeEMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO0tBQ3hDLEVBQ0QsU0FBUyxDQUNWLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXQsIFV0aWxzVXJsU2VhcmNoUGFyYW1zIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVFlQRV9QT1BPVkVSX0RJUkVDVElPTiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9wb3Zlci50eXBlJztcblxuZXhwb3J0IGNvbnN0IEtFWV9RVUVSWV9QT1BPVkVSX1RJTUVSX0RFU1RST1kgPSAncG9wb3Zlci10aW1lci1kZXN0cm95JztcblxuY29uc3QgdGltZXJEZXN0cm95ID0gcGFyc2VJbnQobmV3IFV0aWxzVXJsU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhyZWYpLmdldChLRVlfUVVFUllfUE9QT1ZFUl9USU1FUl9ERVNUUk9ZKSB8fCAnMCcpO1xuXG5leHBvcnQgY29uc3QgZ2V0UG9wb3ZlclRpbWVyRGVzdHJveUluUXVlcnlVcmwgPSAoKTogbnVtYmVyID0+IHtcbiAgcmV0dXJuIHRpbWVyRGVzdHJveTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaXN0RGlyZWN0aW9ucyA9IChkaXJlY3Rpb246IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04pOiBBcnJheTxUWVBFX1BPUE9WRVJfRElSRUNUSU9OPiA9PiB7XG4gIHJldHVybiBnZXQoXG4gICAge1xuICAgICAgYm90dG9tOiBbJ2JvdHRvbScsICd0b3AnLCAncmlnaHQnLCAnbGVmdCddLFxuICAgICAgcmlnaHQ6IFsncmlnaHQnLCAnbGVmdCcsICdib3R0b20nLCAndG9wJ10sXG4gICAgICBsZWZ0OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJywgJ3RvcCddLFxuICAgICAgdG9wOiBbJ3RvcCcsICdib3R0b20nLCAncmlnaHQnLCAnbGVmdCddLFxuICAgIH0sXG4gICAgZGlyZWN0aW9uXG4gICk7XG59O1xuIl19
@@ -0,0 +1,4 @@
1
+ export * from './popover.component';
2
+ export * from './interfaces';
3
+ export * from './defines/constants.define';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wb3BvdmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWZpbmVzL2NvbnN0YW50cy5kZWZpbmUnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZy1tb3VzZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvaW50ZXJmYWNlcy9mbGFnLW1vdXNlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRmxhZ01vdXNlIHtcbiAgaXNNb3VzZUVudGVyOiBib29sZWFuO1xuICBpc01vdXNlRW50ZXJDb250ZW50OiBib29sZWFuO1xuICBpc0NvbnRhaW5lckhhc1Njcm9sbD86IGJvb2xlYW47XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICBzaG93UG9wb3ZlcjogKGVsZW1lbnRSZWY/OiBIVE1MRWxlbWVudCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVtb3ZlUG9wb3Zlck92ZXJsYXk6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFJlY3RDb250YWluZXI6ICgpID0+IFByb21pc2U8SUJvdW5kaW5nQ2xpZW50UmVjdD47XG4gIGdldFJlY3RDb250ZW50OiAoKSA9PiBQcm9taXNlPElCb3VuZGluZ0NsaWVudFJlY3Q+O1xuICB1cGRhdGVQb3BvdmVyT3ZlcmxheTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export * from './popover.interface';
2
+ export * from './popover.type';
3
+ export * from './overlay.interface';
4
+ export * from './flag-mouse.interface';
5
+ export * from './function-control.interface';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3BvcG92ZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcG9wb3Zlci50eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vb3ZlcmxheS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFnLW1vdXNlLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvaW50ZXJmYWNlcy9vdmVybGF5LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04sIFRZUEVfUE9QT1ZFUl9QT1NJVElPTl9NT0RFIH0gZnJvbSAnLi9wb3BvdmVyLnR5cGUnO1xuaW1wb3J0IHsgSVNjcm9sbE92ZXJsYXlPcHRpb25zIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBvcG92ZXJPdmVybGF5IHtcbiAgaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudD86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgd2lkdGhCeVBhcmVudD86IGJvb2xlYW47IC8vIG7hur91IG114buRbiBwb3B1cCBQb3BvdmVyIHRvIGLhurFuZyB0aOG6uyBjaGFcbiAgcGFyZW50Qm9yZGVyV2lkdGg/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBtaW5XaWR0aD86IG51bWJlcjtcbiAgbWF4V2lkdGg/OiBudW1iZXI7XG4gIG1heEhlaWdodD86IG51bWJlciB8IG51bGw7IC8vIHNldCBtYXhIZWlnaHQgPSBudWxsIMSR4buDIHThu7EgxJHhu5luZyB0w61uaCB0b8OhbiBtYXhIZWlnaHQgdGhlbyB3aW5kb3cgaGVpZ2h0XG4gIHBhZGRpbmdUb3A/OiBudW1iZXI7XG4gIHBhZGRpbmdSaWdodD86IG51bWJlcjtcbiAgcGFkZGluZ0xlZnQ/OiBudW1iZXI7XG4gIHBhZGRpbmdCb3R0b20/OiBudW1iZXI7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7IC8vIETDuW5nIGNvbnRlbnQgdGjDrCBrbyBkw7luZyB0ZW1wbGF0ZVxuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47IC8vIETDuW5nIHRlbXBsYXRlIHRow6wga2jDtG5nIGTDuW5nIGNvbnRlbnRcbiAgaXRlbUNvbnRleHQ/OiBhbnk7XG4gIGNsYXNzSW5jbHVkZU92ZXJsYXlCb2R5Pzogc3RyaW5nO1xuICB3aGl0ZVRoZW1lPzogYm9vbGVhbjtcbiAgdGltZXJEZXN0cm95PzogbnVtYmVyO1xuICB6SW5kZXg/OiBudW1iZXI7XG4gIGRpcmVjdGlvbj86IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT047XG4gIGRpcmVjdGlvbkRpc3RhbmNlPzogbnVtYmVyO1xuICBwb3NpdGlvbj86IHtcbiAgICBtb2RlOiBUWVBFX1BPUE9WRVJfUE9TSVRJT05fTU9ERTtcbiAgICBkaXN0YW5jZTogbnVtYmVyO1xuICAgIGF1dG9VcGRhdGVQb3NpdGlvbj86IHtcbiAgICAgIHN0YXJ0RGlzdGFuY2U6IG51bWJlcjtcbiAgICAgIGVuZERpc3RhbmNlOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgaWdub3JlQXJyb3c/OiBib29sZWFuO1xuICBhcnJvd1Bvc2l0aW9uQ3VzdG9tPzogbnVtYmVyO1xuICBuZ1N0eWxlcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGFuaW1hdGlvbkNvbmZpZz86IHtcbiAgICB0aW1lPzogbnVtYmVyO1xuICAgIGRpc3RhbmNlPzogbnVtYmVyO1xuICB9O1xuICBzY3JvbGxPdmVybGF5T3B0aW9ucz86IElTY3JvbGxPdmVybGF5T3B0aW9ucztcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvaW50ZXJmYWNlcy9wb3BvdmVyLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElQb3BvdmVyT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVFlQRV9QT1BPVkVSX1RZUEUsIFRZUEVfUE9QT1ZFUl9NT0RFIH0gZnJvbSAnLi9wb3BvdmVyLnR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQb3BvdmVyIHtcbiAgdHlwZT86IFRZUEVfUE9QT1ZFUl9UWVBFO1xuICBtb2RlPzogVFlQRV9QT1BPVkVSX01PREU7XG4gIGRhdGFWaWV3Pzogc3RyaW5nO1xuICBjb25maWc/OiBJUG9wb3Zlck92ZXJsYXkgfCB1bmRlZmluZWQ7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgaWdub3JlU2hvd1BvcG92ZXI/OiBib29sZWFuO1xuICBpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlPzogYm9vbGVhbjtcbiAgZWxlbWVudFJlZkN1c3RvbT86IEhUTUxFbGVtZW50O1xuICBpc0FkZENvbnRlbnRUb1BhcmVudERvY3VtZW50PzogYm9vbGVhbjtcbiAgdGVtcGxhdGVDdXN0b21Db250ZW50PzogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3BvcG92ZXIvc3JjL2ludGVyZmFjZXMvcG9wb3Zlci50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBUWVBFX1BPUE9WRVJfVFlQRSA9ICd0ZXh0JyB8ICdvdGhlcic7XG5leHBvcnQgdHlwZSBUWVBFX1BPUE9WRVJfRElSRUNUSU9OID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5leHBvcnQgdHlwZSBUWVBFX1BPUE9WRVJfUE9TSVRJT05fTU9ERSA9ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnO1xuZXhwb3J0IHR5cGUgVFlQRV9QT1BPVkVSX01PREUgPSAnaG92ZXInIHwgJ2NsaWNrJyB8ICdjbGljay10b2dnbGUnIHwgJ2NsaWNrX29wZW5fYW5kX2NsaWNrX3BhbmVsX2NvbnRlbnRfaGlkZGVuJztcblxuZXhwb3J0IHR5cGUgVFlQRV9QT1BPVkVSX0VWRU5UID0gJ3Nob3cnIHwgJ3JlbW92ZScgfCAnY2xpY2snIHwgJ21vdXNlZW50ZXItZWxlbWVudCcgfCAnbW91c2VsZWF2ZS1lbGVtZW50JyB8ICdtb3VzZWVudGVyLWNvbnRlbnQnIHwgJ21vdXNlbGVhdmUtY29udGVudCc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLXBvcG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvbGlicy11aS1jb21wb25lbnRzLXBvcG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,311 @@
1
+ import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, ElementRef, inject, signal, viewChild } from '@angular/core';
3
+ import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
4
+ import { UtilsUrlSearchParams, cloneDeep, cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';
5
+ import { TranslateModule } from '@ngx-translate/core';
6
+ import { Subject, interval, take, takeUntil } from 'rxjs';
7
+ import { getListDirections } from '../defines/constants.define';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@ngx-translate/core";
10
+ export class LibsUiComponentsPopoverOverlayComponent {
11
+ /* PROPERTIES */
12
+ currentDirection = signal('bottom');
13
+ arrowClass = signal('');
14
+ top = signal(0);
15
+ left = signal(0);
16
+ arrowLeft = signal(0);
17
+ arrowTop = signal(0);
18
+ config = signal({});
19
+ timeout = signal(0);
20
+ onDestroy = new Subject();
21
+ // #region OUTPUT
22
+ outEvent = new Subject();
23
+ /* VIEW CHILD */
24
+ container = viewChild.required('container');
25
+ // #region INJECT
26
+ elementRef = inject(ElementRef);
27
+ // #region FUNCTIONS
28
+ get ElementRef() {
29
+ return this.elementRef;
30
+ }
31
+ get ContainerElement() {
32
+ return this.container().nativeElement;
33
+ }
34
+ setConfig(rectOrigin, config, isAddContentToParentDocument) {
35
+ isAddContentToParentDocument = isAddContentToParentDocument || config.isAddContentToParentDocument;
36
+ rectOrigin = cloneIBoundingClientRect(rectOrigin);
37
+ this.config.set(cloneDeep(config));
38
+ this.container().nativeElement.style.opacity = 0;
39
+ if (this.config().widthByParent) {
40
+ this.config.update((config) => ({ ...config, width: rectOrigin.width - (config?.parentBorderWidth || 0) * 2 }));
41
+ }
42
+ let viewPort = getViewport();
43
+ let rectFrame = undefined;
44
+ if (isAddContentToParentDocument) {
45
+ viewPort = getViewport(window.parent);
46
+ const url = new UtilsUrlSearchParams(location.href);
47
+ const iframeId = url.get('iframeId');
48
+ rectFrame = window.parent.document.getElementById(`iframe-${iframeId}`)?.getBoundingClientRect();
49
+ if (rectFrame) {
50
+ rectOrigin.top += rectFrame.top;
51
+ rectOrigin.left += rectFrame.left;
52
+ }
53
+ }
54
+ if (this.config().maxHeight === null) {
55
+ this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - 44 }));
56
+ }
57
+ clearTimeout(this.timeout());
58
+ this.setVariableCss();
59
+ this.setDirections(rectOrigin, viewPort, rectFrame);
60
+ let rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());
61
+ if (rectFrame) {
62
+ rectContent.top += rectFrame.top;
63
+ rectContent.left += rectFrame.left;
64
+ }
65
+ interval(250)
66
+ .pipe(take(4), takeUntil(this.onDestroy))
67
+ .subscribe(() => {
68
+ const rect = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());
69
+ if (rectFrame) {
70
+ rect.top += rectFrame.top;
71
+ rect.left += rectFrame.left;
72
+ }
73
+ if (rect.width !== rectContent.width || rect.height !== rectContent.height || rect.top !== rectContent.top || rect.left !== rectContent.left) {
74
+ clearTimeout(this.timeout());
75
+ this.setDirections(rectOrigin, viewPort, rectFrame);
76
+ rectContent = rect;
77
+ }
78
+ });
79
+ }
80
+ setDirections(rectOrigin, viewPort, rectFrame) {
81
+ const directions = getListDirections(this.config().direction || 'bottom');
82
+ const positionLast = directions.length - 1;
83
+ this.timeout.set(setTimeout(async () => {
84
+ const rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());
85
+ if (rectFrame) {
86
+ rectContent.top += rectFrame.top;
87
+ rectContent.left += rectFrame.left;
88
+ }
89
+ for (const index in directions) {
90
+ if (await this.loopDirection(rectOrigin, rectContent, directions[index], positionLast === +index, viewPort)) {
91
+ return;
92
+ }
93
+ }
94
+ const directionByHeight = viewPort.height - rectOrigin.top - rectOrigin.height > rectOrigin.top - 4 ? 'bottom' : 'top';
95
+ this.loopDirection(rectOrigin, rectContent, directionByHeight, true, viewPort);
96
+ }, 50));
97
+ }
98
+ loopDirection(rectOrigin, rectContent, direction, isLast, viewPort) {
99
+ return new Promise((resolve) => {
100
+ const positionMode = this.config().position?.mode || 'start';
101
+ const { position } = this.config();
102
+ let result = this.setPosition(direction, rectOrigin, rectContent, viewPort, isLast);
103
+ if (!result) {
104
+ if (position) {
105
+ position.mode = positionMode === 'center' || positionMode === 'start' ? 'end' : 'start';
106
+ if (!this.config().ignoreArrow && position.autoUpdatePosition) {
107
+ position.distance = position.mode === 'end' ? position.autoUpdatePosition.endDistance : position.autoUpdatePosition.startDistance;
108
+ }
109
+ this.config.update((config) => ({ ...config }));
110
+ }
111
+ result = this.setPosition(direction, rectOrigin, rectContent, viewPort, isLast);
112
+ }
113
+ if (!result && positionMode === 'center') {
114
+ if (position) {
115
+ position.mode = position.mode === 'start' ? 'end' : 'start';
116
+ this.config.update((config) => ({ ...config }));
117
+ }
118
+ result = this.setPosition(direction, rectOrigin, rectContent, viewPort, isLast);
119
+ }
120
+ if (!result) {
121
+ if (position) {
122
+ position.mode = positionMode;
123
+ this.config.update((config) => ({ ...config }));
124
+ }
125
+ return resolve(false);
126
+ }
127
+ this.currentDirection.set(direction);
128
+ this.setVariableCss();
129
+ this.setClassArrow(direction);
130
+ this.container().nativeElement.style.opacity = 1;
131
+ this.outEvent.next(direction);
132
+ return resolve(true);
133
+ });
134
+ }
135
+ setPosition(direction, rectOrigin, rectContent, viewPort, isLast) {
136
+ const halfSquare = 6;
137
+ const distanceArrow = 4;
138
+ let bottomPositionRectContent = 0;
139
+ let positionTop = 0;
140
+ let positionLeft = 0;
141
+ let top = 0;
142
+ let left = 0;
143
+ const configValue = this.config();
144
+ switch (direction) {
145
+ case 'bottom':
146
+ positionTop = rectOrigin.top + rectOrigin.height + distanceArrow;
147
+ positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;
148
+ top = positionTop + halfSquare;
149
+ left = positionLeft - rectContent.width / 2 + halfSquare;
150
+ if (configValue.ignoreArrow) {
151
+ top = top - halfSquare - distanceArrow;
152
+ }
153
+ top += configValue.directionDistance || 0;
154
+ if (configValue.position?.mode === 'start') {
155
+ left = rectOrigin.left + (configValue.position.distance || 0);
156
+ }
157
+ if (configValue.position?.mode === 'end') {
158
+ left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);
159
+ }
160
+ left += configValue.parentBorderWidth || 0;
161
+ this.arrowLeft.set(positionLeft - left);
162
+ this.arrowTop.set(-6);
163
+ this.top.set(top);
164
+ this.left.set(left);
165
+ if (top + rectContent.height < viewPort.height && left >= 0 && left + rectContent.width < viewPort.width) {
166
+ return true;
167
+ }
168
+ if (isLast) {
169
+ if (this.config) {
170
+ this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - rectOrigin.height }));
171
+ }
172
+ this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));
173
+ return true;
174
+ }
175
+ return false;
176
+ case 'right':
177
+ positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;
178
+ positionLeft = rectOrigin.left + rectOrigin.width + distanceArrow;
179
+ top = positionTop - rectContent.height / 2 + halfSquare;
180
+ left = positionLeft + halfSquare;
181
+ if (configValue.ignoreArrow) {
182
+ left = positionLeft - distanceArrow;
183
+ }
184
+ left += configValue.directionDistance || 0;
185
+ if (configValue.position?.mode === 'start') {
186
+ top = rectOrigin.top + (configValue.position?.distance || 0);
187
+ }
188
+ if (configValue.position?.mode === 'end') {
189
+ top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);
190
+ }
191
+ bottomPositionRectContent = top + rectContent.height;
192
+ if (bottomPositionRectContent > viewPort.height) {
193
+ top = top - (bottomPositionRectContent - viewPort.height);
194
+ }
195
+ this.arrowTop.set(positionTop - top + 2);
196
+ this.arrowLeft.set(-9);
197
+ this.top.set(top);
198
+ this.left.set(left);
199
+ if (top > 0 && left + rectContent.width < viewPort.width) {
200
+ return true;
201
+ }
202
+ if (isLast) {
203
+ if (this.config) {
204
+ this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));
205
+ }
206
+ this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));
207
+ return true;
208
+ }
209
+ return false;
210
+ case 'left':
211
+ positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;
212
+ positionLeft = rectOrigin.left - halfSquare * 2 - distanceArrow;
213
+ top = positionTop - rectContent.height / 2 + halfSquare;
214
+ left = positionLeft - rectContent.width + halfSquare;
215
+ if (configValue.ignoreArrow) {
216
+ left = left + halfSquare + distanceArrow;
217
+ }
218
+ left -= configValue?.directionDistance || 0;
219
+ if (configValue.position?.mode === 'start') {
220
+ top = rectOrigin.top + (configValue.position.distance || 0);
221
+ }
222
+ if (configValue.position?.mode === 'end') {
223
+ top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);
224
+ }
225
+ bottomPositionRectContent = top + rectContent.height;
226
+ if (bottomPositionRectContent > viewPort.height) {
227
+ top = top - (bottomPositionRectContent - viewPort.height);
228
+ }
229
+ this.arrowTop.set(positionTop - top + 2);
230
+ this.arrowLeft.set(rectContent.width - 3);
231
+ this.top.set(top);
232
+ this.left.set(left);
233
+ if (left > 0 && top > 0) {
234
+ return true;
235
+ }
236
+ if (isLast) {
237
+ if (this.config) {
238
+ this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));
239
+ }
240
+ this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));
241
+ return true;
242
+ }
243
+ return false;
244
+ case 'top':
245
+ positionTop = rectOrigin.top - halfSquare * 2 - distanceArrow;
246
+ positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;
247
+ top = positionTop - rectContent.height + halfSquare;
248
+ left = positionLeft - rectContent.width / 2 + halfSquare;
249
+ if (configValue.ignoreArrow) {
250
+ top = top + halfSquare + distanceArrow;
251
+ }
252
+ top -= configValue.directionDistance || 0;
253
+ if (configValue.position && configValue.position?.mode === 'start') {
254
+ left = rectOrigin.left + (configValue.position.distance || 0);
255
+ }
256
+ if (configValue.position && configValue.position?.mode === 'end') {
257
+ left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);
258
+ }
259
+ left += configValue.parentBorderWidth || 0;
260
+ this.arrowLeft.set(positionLeft - left);
261
+ this.arrowTop.set(rectContent.height);
262
+ this.top.set(top);
263
+ this.left.set(left);
264
+ if (top > 0 && left >= 0 && left + rectContent.width < viewPort.width) {
265
+ return true;
266
+ }
267
+ if (isLast) {
268
+ this.config.update((config) => ({ ...config, maxHeight: rectOrigin.top - 4 }));
269
+ top = 0;
270
+ this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));
271
+ return true;
272
+ }
273
+ return false;
274
+ }
275
+ }
276
+ setClassArrow(direction) {
277
+ if (direction === 'right') {
278
+ return this.arrowClass.set('libs-ui-popover-overlay-arrow-right');
279
+ }
280
+ if (direction === 'left') {
281
+ return this.arrowClass.set('libs-ui-popover-overlay-arrow-left');
282
+ }
283
+ if (direction === 'top') {
284
+ return this.arrowClass.set('libs-ui-popover-overlay-arrow-down');
285
+ }
286
+ return this.arrowClass.set('libs-ui-popover-overlay-arrow-up');
287
+ }
288
+ setVariableCss() {
289
+ const configValue = this.config();
290
+ this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-time', `${configValue.animationConfig?.time || 0.4}s`);
291
+ this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-distance', `${this.currentDirection() === 'top' ? '-' : ''}${configValue.animationConfig?.distance || 12}px`);
292
+ }
293
+ getLeftPositionIsLast(isLast, currentLeft, viewPort, rectOrigin, rectContent, halfSquare) {
294
+ if (viewPort.width - (rectOrigin.left + rectOrigin.width + rectContent.width + halfSquare) > 0) {
295
+ return rectOrigin.left + rectOrigin.width + halfSquare;
296
+ }
297
+ return currentLeft;
298
+ }
299
+ ngOnDestroy() {
300
+ clearTimeout(this.timeout());
301
+ this.onDestroy.next();
302
+ this.onDestroy.complete();
303
+ }
304
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPopoverOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
305
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPopoverOverlayComponent, isStandalone: true, selector: "libs_ui-components-popover-overlay", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}.libs-ui-popover-overlay{position:fixed;background-color:#071631;border-radius:8px;z-index:1000;top:-10000px;left:-10000px}.libs-ui-popover-overlay-animation-move{animation:animation-move ease var(--libs-ui-popover-overlay-time-animation-time)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow{position:absolute;width:12px;height:6px;fill:#071631}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=bottom]{transform:rotate(180deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=left]{transform:rotate(270deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=right]{transform:rotate(90deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-white-theme{fill:#fff}.libs-ui-popover-overlay .libs-ui-popover-overlay-body{color:#fff;word-break:break-word}.libs-ui-popover-overlay .libs-ui-popover-overlay-body[isTemplate=true]{font-size:inherit}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme{background-color:#fff;box-shadow:0 1px 1px #00143305,0 4px 16px #0014331a}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme .libs-ui-popover-overlay-body{color:#071631}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
306
+ }
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPopoverOverlayComponent, decorators: [{
308
+ type: Component,
309
+ args: [{ selector: 'libs_ui-components-popover-overlay', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, NgStyle, AsyncPipe, LibsUiComponentsScrollOverlayDirective, NgTemplateOutlet], template: "<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}.libs-ui-popover-overlay{position:fixed;background-color:#071631;border-radius:8px;z-index:1000;top:-10000px;left:-10000px}.libs-ui-popover-overlay-animation-move{animation:animation-move ease var(--libs-ui-popover-overlay-time-animation-time)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow{position:absolute;width:12px;height:6px;fill:#071631}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=bottom]{transform:rotate(180deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=left]{transform:rotate(270deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=right]{transform:rotate(90deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-white-theme{fill:#fff}.libs-ui-popover-overlay .libs-ui-popover-overlay-body{color:#fff;word-break:break-word}.libs-ui-popover-overlay .libs-ui-popover-overlay-body[isTemplate=true]{font-size:inherit}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme{background-color:#fff;box-shadow:0 1px 1px #00143305,0 4px 16px #0014331a}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme .libs-ui-popover-overlay-body{color:#071631}\n"] }]
310
+ }] });
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wb3BvdmVyL3NyYy9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFVaEUsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxnQkFBZ0I7SUFDTixnQkFBZ0IsR0FBRyxNQUFNLENBQXlCLFFBQVEsQ0FBQyxDQUFDO0lBQzVELFVBQVUsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEMsR0FBRyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4QixJQUFJLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lB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QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsZUFBZSxFQUFFLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xNLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFlLEVBQUUsV0FBbUIsRUFBRSxRQUEyQyxFQUFFLFVBQStCLEVBQUUsV0FBZ0MsRUFBRSxVQUFrQjtRQUNwTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRixPQUFPLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXRXVSx1Q0FBdUM7NEZBQXZDLHVDQUF1QyxzTkNuQnBELDRuRUFnREEsKzdDRC9CWSxlQUFlLDRGQUFFLE9BQU8sc0VBQUUsU0FBUyw4Q0FBRSxzQ0FBc0MsNlNBQUUsZ0JBQWdCOzs0RkFFNUYsdUNBQXVDO2tCQVRuRCxTQUFTOytCQUVFLG9DQUFvQyxjQUdsQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQ0FBc0MsRUFBRSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIGluamVjdCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBVdGlsc1VybFNlYXJjaFBhcmFtcywgY2xvbmVEZWVwLCBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QsIGdldFZpZXdwb3J0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBpbnRlcnZhbCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJUG9wb3Zlck92ZXJsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL292ZXJsYXkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvcG92ZXIudHlwZSc7XG5pbXBvcnQgeyBnZXRMaXN0RGlyZWN0aW9ucyB9IGZyb20gJy4uL2RlZmluZXMvY29uc3RhbnRzLmRlZmluZSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlci1vdmVybGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL292ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBOZ1N0eWxlLCBBc3luY1BpcGUsIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyogUFJPUEVSVElFUyAqL1xuICBwcm90ZWN0ZWQgY3VycmVudERpcmVjdGlvbiA9IHNpZ25hbDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OPignYm90dG9tJyk7XG4gIHByb3RlY3RlZCBhcnJvd0NsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgdG9wID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBsZWZ0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBhcnJvd0xlZnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGFycm93VG9wID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBjb25maWcgPSBzaWduYWw8SVBvcG92ZXJPdmVybGF5Pih7fSk7XG4gIHByaXZhdGUgdGltZW91dCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0RXZlbnQ6IFN1YmplY3Q8VFlQRV9QT1BPVkVSX0RJUkVDVElPTj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSBjb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lcicpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEVsZW1lbnRSZWYoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ29udGFpbmVyRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIHNldENvbmZpZyhyZWN0T3JpZ2luOiBJQm91bmRpbmdDbGllbnRSZWN0LCBjb25maWc6IElQb3BvdmVyT3ZlcmxheSwgaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudD86IGJvb2xlYW4pIHtcbiAgICBpc0FkZENvbnRlbnRUb1BhcmVudERvY3VtZW50ID0gaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudCB8fCBjb25maWcuaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudDtcbiAgICByZWN0T3JpZ2luID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KHJlY3RPcmlnaW4pO1xuICAgIHRoaXMuY29uZmlnLnNldChjbG9uZURlZXAoY29uZmlnKSk7XG5cbiAgICB0aGlzLmNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgaWYgKHRoaXMuY29uZmlnKCkud2lkdGhCeVBhcmVudCkge1xuICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgd2lkdGg6IHJlY3RPcmlnaW4ud2lkdGggLSAoY29uZmlnPy5wYXJlbnRCb3JkZXJXaWR0aCB8fCAwKSAqIDIgfSkpO1xuICAgIH1cbiAgICBsZXQgdmlld1BvcnQgPSBnZXRWaWV3cG9ydCgpO1xuICAgIGxldCByZWN0RnJhbWU6IElCb3VuZGluZ0NsaWVudFJlY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudCkge1xuICAgICAgdmlld1BvcnQgPSBnZXRWaWV3cG9ydCh3aW5kb3cucGFyZW50KTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVdGlsc1VybFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5ocmVmKTtcbiAgICAgIGNvbnN0IGlmcmFtZUlkID0gdXJsLmdldCgnaWZyYW1lSWQnKTtcblxuICAgICAgcmVjdEZyYW1lID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaWZyYW1lLSR7aWZyYW1lSWR9YCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHJlY3RGcmFtZSkge1xuICAgICAgICByZWN0T3JpZ2luLnRvcCArPSByZWN0RnJhbWUudG9wO1xuICAgICAgICByZWN0T3JpZ2luLmxlZnQgKz0gcmVjdEZyYW1lLmxlZnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnKCkubWF4SGVpZ2h0ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCAtIHJlY3RPcmlnaW4udG9wIC0gNDQgfSkpO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQoKSk7XG4gICAgdGhpcy5zZXRWYXJpYWJsZUNzcygpO1xuICAgIHRoaXMuc2V0RGlyZWN0aW9ucyhyZWN0T3JpZ2luLCB2aWV3UG9ydCwgcmVjdEZyYW1lKTtcbiAgICBsZXQgcmVjdENvbnRlbnQgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICAgIGlmIChyZWN0RnJhbWUpIHtcbiAgICAgIHJlY3RDb250ZW50LnRvcCArPSByZWN0RnJhbWUudG9wO1xuICAgICAgcmVjdENvbnRlbnQubGVmdCArPSByZWN0RnJhbWUubGVmdDtcbiAgICB9XG5cbiAgICBpbnRlcnZhbCgyNTApXG4gICAgICAucGlwZSh0YWtlKDQpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICAgICAgICBpZiAocmVjdEZyYW1lKSB7XG4gICAgICAgICAgcmVjdC50b3AgKz0gcmVjdEZyYW1lLnRvcDtcbiAgICAgICAgICByZWN0LmxlZnQgKz0gcmVjdEZyYW1lLmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3Qud2lkdGggIT09IHJlY3RDb250ZW50LndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Q29udGVudC5oZWlnaHQgfHwgcmVjdC50b3AgIT09IHJlY3RDb250ZW50LnRvcCB8fCByZWN0LmxlZnQgIT09IHJlY3RDb250ZW50LmxlZnQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KCkpO1xuICAgICAgICAgIHRoaXMuc2V0RGlyZWN0aW9ucyhyZWN0T3JpZ2luLCB2aWV3UG9ydCwgcmVjdEZyYW1lKTtcbiAgICAgICAgICByZWN0Q29udGVudCA9IHJlY3Q7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXJlY3Rpb25zKHJlY3RPcmlnaW46IElCb3VuZGluZ0NsaWVudFJlY3QsIHZpZXdQb3J0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sIHJlY3RGcmFtZT86IElCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0gZ2V0TGlzdERpcmVjdGlvbnModGhpcy5jb25maWcoKS5kaXJlY3Rpb24gfHwgJ2JvdHRvbScpO1xuICAgIGNvbnN0IHBvc2l0aW9uTGFzdCA9IGRpcmVjdGlvbnMubGVuZ3RoIC0gMTtcblxuICAgIHRoaXMudGltZW91dC5zZXQoXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdENvbnRlbnQgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICAgICAgICBpZiAocmVjdEZyYW1lKSB7XG4gICAgICAgICAgcmVjdENvbnRlbnQudG9wICs9IHJlY3RGcmFtZS50b3A7XG4gICAgICAgICAgcmVjdENvbnRlbnQubGVmdCArPSByZWN0RnJhbWUubGVmdDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIGRpcmVjdGlvbnMpIHtcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5sb29wRGlyZWN0aW9uKHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBkaXJlY3Rpb25zW2luZGV4XSwgcG9zaXRpb25MYXN0ID09PSAraW5kZXgsIHZpZXdQb3J0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkJ5SGVpZ2h0ID0gdmlld1BvcnQuaGVpZ2h0IC0gcmVjdE9yaWdpbi50b3AgLSByZWN0T3JpZ2luLmhlaWdodCA+IHJlY3RPcmlnaW4udG9wIC0gNCA/ICdib3R0b20nIDogJ3RvcCc7XG5cbiAgICAgICAgdGhpcy5sb29wRGlyZWN0aW9uKHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBkaXJlY3Rpb25CeUhlaWdodCwgdHJ1ZSwgdmlld1BvcnQpO1xuICAgICAgfSwgNTApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9vcERpcmVjdGlvbihyZWN0T3JpZ2luOiBJQm91bmRpbmdDbGllbnRSZWN0LCByZWN0Q29udGVudDogSUJvdW5kaW5nQ2xpZW50UmVjdCwgZGlyZWN0aW9uOiBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBpc0xhc3Q6IGJvb2xlYW4sIHZpZXdQb3J0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uTW9kZSA9IHRoaXMuY29uZmlnKCkucG9zaXRpb24/Lm1vZGUgfHwgJ3N0YXJ0JztcbiAgICAgIGNvbnN0IHsgcG9zaXRpb24gfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5zZXRQb3NpdGlvbihkaXJlY3Rpb24sIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50IGFzIElCb3VuZGluZ0NsaWVudFJlY3QsIHZpZXdQb3J0LCBpc0xhc3QpO1xuXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBpZiAocG9zaXRpb24pIHtcbiAgICAgICAgICBwb3NpdGlvbi5tb2RlID0gcG9zaXRpb25Nb2RlID09PSAnY2VudGVyJyB8fCBwb3NpdGlvbk1vZGUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZygpLmlnbm9yZUFycm93ICYmIHBvc2l0aW9uLmF1dG9VcGRhdGVQb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24uZGlzdGFuY2UgPSBwb3NpdGlvbi5tb2RlID09PSAnZW5kJyA/IHBvc2l0aW9uLmF1dG9VcGRhdGVQb3NpdGlvbi5lbmREaXN0YW5jZSA6IHBvc2l0aW9uLmF1dG9VcGRhdGVQb3NpdGlvbi5zdGFydERpc3RhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB0aGlzLnNldFBvc2l0aW9uKGRpcmVjdGlvbiwgcmVjdE9yaWdpbiwgcmVjdENvbnRlbnQgYXMgSUJvdW5kaW5nQ2xpZW50UmVjdCwgdmlld1BvcnQsIGlzTGFzdCk7XG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VsdCAmJiBwb3NpdGlvbk1vZGUgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgIHBvc2l0aW9uLm1vZGUgPSBwb3NpdGlvbi5tb2RlID09PSAnc3RhcnQnID8gJ2VuZCcgOiAnc3RhcnQnO1xuICAgICAgICAgIHRoaXMuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiAoeyAuLi5jb25maWcgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuc2V0UG9zaXRpb24oZGlyZWN0aW9uLCByZWN0T3JpZ2luLCByZWN0Q29udGVudCBhcyBJQm91bmRpbmdDbGllbnRSZWN0LCB2aWV3UG9ydCwgaXNMYXN0KTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgIHBvc2l0aW9uLm1vZGUgPSBwb3NpdGlvbk1vZGU7XG4gICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZyB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24uc2V0KGRpcmVjdGlvbik7XG4gICAgICB0aGlzLnNldFZhcmlhYmxlQ3NzKCk7XG4gICAgICB0aGlzLnNldENsYXNzQXJyb3coZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuY29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgIHRoaXMub3V0RXZlbnQubmV4dChkaXJlY3Rpb24pO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9zaXRpb24oZGlyZWN0aW9uOiBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCByZWN0T3JpZ2luOiBJQm91bmRpbmdDbGllbnRSZWN0LCByZWN0Q29udGVudDogSUJvdW5kaW5nQ2xpZW50UmVjdCwgdmlld1BvcnQ6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSwgaXNMYXN0OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFsZlNxdWFyZSA9IDY7XG4gICAgY29uc3QgZGlzdGFuY2VBcnJvdyA9IDQ7XG4gICAgbGV0IGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgPSAwO1xuICAgIGxldCBwb3NpdGlvblRvcCA9IDA7XG4gICAgbGV0IHBvc2l0aW9uTGVmdCA9IDA7XG4gICAgbGV0IHRvcCA9IDA7XG4gICAgbGV0IGxlZnQgPSAwO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gdGhpcy5jb25maWcoKTtcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICBwb3NpdGlvblRvcCA9IHJlY3RPcmlnaW4udG9wICsgcmVjdE9yaWdpbi5oZWlnaHQgKyBkaXN0YW5jZUFycm93O1xuICAgICAgICBwb3NpdGlvbkxlZnQgPSByZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoIC8gMiAtIGhhbGZTcXVhcmU7XG4gICAgICAgIHRvcCA9IHBvc2l0aW9uVG9wICsgaGFsZlNxdWFyZTtcbiAgICAgICAgbGVmdCA9IHBvc2l0aW9uTGVmdCAtIHJlY3RDb250ZW50LndpZHRoIC8gMiArIGhhbGZTcXVhcmU7XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5pZ25vcmVBcnJvdykge1xuICAgICAgICAgIHRvcCA9IHRvcCAtIGhhbGZTcXVhcmUgLSBkaXN0YW5jZUFycm93O1xuICAgICAgICB9XG4gICAgICAgIHRvcCArPSBjb25maWdWYWx1ZS5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBsZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICBsZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgcmVjdE9yaWdpbi53aWR0aCAtIHJlY3RDb250ZW50LndpZHRoICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGxlZnQgKz0gY29uZmlnVmFsdWUucGFyZW50Qm9yZGVyV2lkdGggfHwgMDtcblxuICAgICAgICB0aGlzLmFycm93TGVmdC5zZXQocG9zaXRpb25MZWZ0IC0gbGVmdCk7XG4gICAgICAgIHRoaXMuYXJyb3dUb3Auc2V0KC02KTtcbiAgICAgICAgdGhpcy50b3Auc2V0KHRvcCk7XG4gICAgICAgIHRoaXMubGVmdC5zZXQobGVmdCk7XG5cbiAgICAgICAgaWYgKHRvcCArIHJlY3RDb250ZW50LmhlaWdodCA8IHZpZXdQb3J0LmhlaWdodCAmJiBsZWZ0ID49IDAgJiYgbGVmdCArIHJlY3RDb250ZW50LndpZHRoIDwgdmlld1BvcnQud2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCAtIHJlY3RPcmlnaW4udG9wIC0gcmVjdE9yaWdpbi5oZWlnaHQgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxlZnQuc2V0KHRoaXMuZ2V0TGVmdFBvc2l0aW9uSXNMYXN0KGlzTGFzdCwgbGVmdCA+PSAwID8gbGVmdCA6IDAsIHZpZXdQb3J0LCByZWN0T3JpZ2luLCByZWN0Q29udGVudCwgaGFsZlNxdWFyZSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgcG9zaXRpb25Ub3AgPSByZWN0T3JpZ2luLnRvcCArIHJlY3RPcmlnaW4uaGVpZ2h0IC8gMiAtIGhhbGZTcXVhcmU7XG4gICAgICAgIHBvc2l0aW9uTGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggKyBkaXN0YW5jZUFycm93O1xuICAgICAgICB0b3AgPSBwb3NpdGlvblRvcCAtIHJlY3RDb250ZW50LmhlaWdodCAvIDIgKyBoYWxmU3F1YXJlO1xuICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0ICsgaGFsZlNxdWFyZTtcblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUuaWdub3JlQXJyb3cpIHtcbiAgICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0IC0gZGlzdGFuY2VBcnJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgKz0gY29uZmlnVmFsdWUuZGlyZWN0aW9uRGlzdGFuY2UgfHwgMDtcbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgdG9wID0gcmVjdE9yaWdpbi50b3AgKyAoY29uZmlnVmFsdWUucG9zaXRpb24/LmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnZW5kJykge1xuICAgICAgICAgIHRvcCA9IHJlY3RPcmlnaW4udG9wICsgcmVjdE9yaWdpbi5oZWlnaHQgLSByZWN0Q29udGVudC5oZWlnaHQgKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBib3R0b21Qb3NpdGlvblJlY3RDb250ZW50ID0gdG9wICsgcmVjdENvbnRlbnQuaGVpZ2h0O1xuXG4gICAgICAgIGlmIChib3R0b21Qb3NpdGlvblJlY3RDb250ZW50ID4gdmlld1BvcnQuaGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gdG9wIC0gKGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgLSB2aWV3UG9ydC5oZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcnJvd1RvcC5zZXQocG9zaXRpb25Ub3AgLSB0b3AgKyAyKTtcbiAgICAgICAgdGhpcy5hcnJvd0xlZnQuc2V0KC05KTtcblxuICAgICAgICB0aGlzLnRvcC5zZXQodG9wKTtcbiAgICAgICAgdGhpcy5sZWZ0LnNldChsZWZ0KTtcbiAgICAgICAgaWYgKHRvcCA+IDAgJiYgbGVmdCArIHJlY3RDb250ZW50LndpZHRoIDwgdmlld1BvcnQud2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGVmdC5zZXQodGhpcy5nZXRMZWZ0UG9zaXRpb25Jc0xhc3QoaXNMYXN0LCBsZWZ0ID49IDAgPyBsZWZ0IDogMCwgdmlld1BvcnQsIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBoYWxmU3F1YXJlKSk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHBvc2l0aW9uVG9wID0gcmVjdE9yaWdpbi50b3AgKyByZWN0T3JpZ2luLmhlaWdodCAvIDIgLSBoYWxmU3F1YXJlO1xuICAgICAgICBwb3NpdGlvbkxlZnQgPSByZWN0T3JpZ2luLmxlZnQgLSBoYWxmU3F1YXJlICogMiAtIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIHRvcCA9IHBvc2l0aW9uVG9wIC0gcmVjdENvbnRlbnQuaGVpZ2h0IC8gMiArIGhhbGZTcXVhcmU7XG4gICAgICAgIGxlZnQgPSBwb3NpdGlvbkxlZnQgLSByZWN0Q29udGVudC53aWR0aCArIGhhbGZTcXVhcmU7XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5pZ25vcmVBcnJvdykge1xuICAgICAgICAgIGxlZnQgPSBsZWZ0ICsgaGFsZlNxdWFyZSArIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0IC09IGNvbmZpZ1ZhbHVlPy5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICB0b3AgPSByZWN0T3JpZ2luLnRvcCArIChjb25maWdWYWx1ZS5wb3NpdGlvbi5kaXN0YW5jZSB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICB0b3AgPSByZWN0T3JpZ2luLnRvcCArIHJlY3RPcmlnaW4uaGVpZ2h0IC0gcmVjdENvbnRlbnQuaGVpZ2h0ICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgYm90dG9tUG9zaXRpb25SZWN0Q29udGVudCA9IHRvcCArIHJlY3RDb250ZW50LmhlaWdodDtcblxuICAgICAgICBpZiAoYm90dG9tUG9zaXRpb25SZWN0Q29udGVudCA+IHZpZXdQb3J0LmhlaWdodCkge1xuICAgICAgICAgIHRvcCA9IHRvcCAtIChib3R0b21Qb3NpdGlvblJlY3RDb250ZW50IC0gdmlld1BvcnQuaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXJyb3dUb3Auc2V0KHBvc2l0aW9uVG9wIC0gdG9wICsgMik7XG4gICAgICAgIHRoaXMuYXJyb3dMZWZ0LnNldChyZWN0Q29udGVudC53aWR0aCAtIDMpO1xuXG4gICAgICAgIHRoaXMudG9wLnNldCh0b3ApO1xuICAgICAgICB0aGlzLmxlZnQuc2V0KGxlZnQpO1xuICAgICAgICBpZiAobGVmdCA+IDAgJiYgdG9wID4gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgbWF4SGVpZ2h0OiB2aWV3UG9ydC5oZWlnaHQgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxlZnQuc2V0KHRoaXMuZ2V0TGVmdFBvc2l0aW9uSXNMYXN0KGlzTGFzdCwgbGVmdCA+PSAwID8gbGVmdCA6IDAsIHZpZXdQb3J0LCByZWN0T3JpZ2luLCByZWN0Q29udGVudCwgaGFsZlNxdWFyZSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHBvc2l0aW9uVG9wID0gcmVjdE9yaWdpbi50b3AgLSBoYWxmU3F1YXJlICogMiAtIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIHBvc2l0aW9uTGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggLyAyIC0gaGFsZlNxdWFyZTtcbiAgICAgICAgdG9wID0gcG9zaXRpb25Ub3AgLSByZWN0Q29udGVudC5oZWlnaHQgKyBoYWxmU3F1YXJlO1xuICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0IC0gcmVjdENvbnRlbnQud2lkdGggLyAyICsgaGFsZlNxdWFyZTtcblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUuaWdub3JlQXJyb3cpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgKyBoYWxmU3F1YXJlICsgZGlzdGFuY2VBcnJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHRvcCAtPSBjb25maWdWYWx1ZS5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbiAmJiBjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGxlZnQgPSByZWN0T3JpZ2luLmxlZnQgKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24gJiYgY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgbGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggLSByZWN0Q29udGVudC53aWR0aCArIChjb25maWdWYWx1ZS5wb3NpdGlvbi5kaXN0YW5jZSB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgKz0gY29uZmlnVmFsdWUucGFyZW50Qm9yZGVyV2lkdGggfHwgMDtcbiAgICAgICAgdGhpcy5hcnJvd0xlZnQuc2V0KHBvc2l0aW9uTGVmdCAtIGxlZnQpO1xuICAgICAgICB0aGlzLmFycm93VG9wLnNldChyZWN0Q29udGVudC5oZWlnaHQpO1xuICAgICAgICB0aGlzLnRvcC5zZXQodG9wKTtcbiAgICAgICAgdGhpcy5sZWZ0LnNldChsZWZ0KTtcbiAgICAgICAgaWYgKHRvcCA+IDAgJiYgbGVmdCA+PSAwICYmIGxlZnQgKyByZWN0Q29udGVudC53aWR0aCA8IHZpZXdQb3J0LndpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgbWF4SGVpZ2h0OiByZWN0T3JpZ2luLnRvcCAtIDQgfSkpO1xuICAgICAgICAgIHRvcCA9IDA7XG4gICAgICAgICAgdGhpcy5sZWZ0LnNldCh0aGlzLmdldExlZnRQb3NpdGlvbklzTGFzdChpc0xhc3QsIGxlZnQgPj0gMCA/IGxlZnQgOiAwLCB2aWV3UG9ydCwgcmVjdE9yaWdpbiwgcmVjdENvbnRlbnQsIGhhbGZTcXVhcmUpKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2xhc3NBcnJvdyhkaXJlY3Rpb246IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctcmlnaHQnKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctbGVmdCcpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9uID09PSAndG9wJykge1xuICAgICAgcmV0dXJuIHRoaXMuYXJyb3dDbGFzcy5zZXQoJ2xpYnMtdWktcG9wb3Zlci1vdmVybGF5LWFycm93LWRvd24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctdXAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFyaWFibGVDc3MoKSB7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSB0aGlzLmNvbmZpZygpO1xuICAgIHRoaXMuQ29udGFpbmVyRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXBvcG92ZXItb3ZlcmxheS10aW1lLWFuaW1hdGlvbi10aW1lJywgYCR7Y29uZmlnVmFsdWUuYW5pbWF0aW9uQ29uZmlnPy50aW1lIHx8IDAuNH1zYCk7XG4gICAgdGhpcy5Db250YWluZXJFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXRpbWUtYW5pbWF0aW9uLWRpc3RhbmNlJywgYCR7dGhpcy5jdXJyZW50RGlyZWN0aW9uKCkgPT09ICd0b3AnID8gJy0nIDogJyd9JHtjb25maWdWYWx1ZS5hbmltYXRpb25Db25maWc/LmRpc3RhbmNlIHx8IDEyfXB4YCk7XG4gIH1cblxuICBwcml2YXRlIGdldExlZnRQb3NpdGlvbklzTGFzdChpc0xhc3Q6IGJvb2xlYW4sIGN1cnJlbnRMZWZ0OiBudW1iZXIsIHZpZXdQb3J0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sIHJlY3RPcmlnaW46IElCb3VuZGluZ0NsaWVudFJlY3QsIHJlY3RDb250ZW50OiBJQm91bmRpbmdDbGllbnRSZWN0LCBoYWxmU3F1YXJlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh2aWV3UG9ydC53aWR0aCAtIChyZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoICsgcmVjdENvbnRlbnQud2lkdGggKyBoYWxmU3F1YXJlKSA+IDApIHtcbiAgICAgIHJldHVybiByZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoICsgaGFsZlNxdWFyZTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRMZWZ0O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCgpKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwibGlicy11aS1wb3BvdmVyLW92ZXJsYXkge3sgY29uZmlnKCkuY2xhc3NJbmNsdWRlIHx8ICcnIH19XCJcbiAgW2NsYXNzLmxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXdoaXRlLXRoZW1lXT1cImNvbmZpZygpLndoaXRlVGhlbWVcIlxuICBbY2xhc3MubGlicy11aS1wb3BvdmVyLW92ZXJsYXktYW5pbWF0aW9uLW1vdmVdPVwiY29uZmlnKCkuYW5pbWF0aW9uQ29uZmlnXCJcbiAgW25nU3R5bGVdPVwiY29uZmlnKCkubmdTdHlsZXMgfHwge31cIlxuICBbc3R5bGUud2lkdGhdPVwiY29uZmlnKCkud2lkdGggPyBjb25maWcoKS53aWR0aCArICdweCcgOiAnYXV0bydcIlxuICBbc3R5bGUubWF4V2lkdGgucHhdPVwiY29uZmlnKCkubWF4V2lkdGhcIlxuICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImNvbmZpZygpLm1heEhlaWdodFwiXG4gIFtzdHlsZS50b3AucHhdPVwidG9wKClcIlxuICBbc3R5bGUubGVmdC5weF09XCJsZWZ0KClcIlxuICBbc3R5bGUuekluZGV4XT1cImNvbmZpZygpLnpJbmRleCB8fCAxMFwiPlxuICBAaWYgKGNvbmZpZygpKSB7XG4gICAgQGlmICghY29uZmlnKCkuaWdub3JlQXJyb3cpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1hcnJvdyAnICsgYXJyb3dDbGFzcygpICsgKGNvbmZpZygpLndoaXRlVGhlbWUgPyAnIGxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXdoaXRlLXRoZW1lICcgOiAnJylcIlxuICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiYXJyb3dUb3AoKVwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiYXJyb3dMZWZ0KClcIlxuICAgICAgICAgIFthdHRyLmRpcmVjdGlvbl09XCJvdXRFdmVudCB8IGFzeW5jXCI+XG4gICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMCwwIDYsNiAxMiwwXCIgLz5cbiAgICAgICAgICBTb3JyeSwgeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgaW5saW5lIFNWRy5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjb25maWcoKS50ZW1wbGF0ZTsgYXMgdGVtcGxhdGVDb25maWcpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1ib2R5IHt7IGNvbmZpZygpLmNsYXNzSW5jbHVkZU92ZXJsYXlCb2R5IHx8ICcnIH19XCJcbiAgICAgICAgW2F0dHIuaXNUZW1wbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiY29uZmlnKCkubWF4SGVpZ2h0ICsgJ3B4J1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVDb25maWc7IGNvbnRleHQ6IHsgaXRlbUNvbnRleHQ6IGNvbmZpZygpLml0ZW1Db250ZXh0IH1cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICBAbGV0IGNvbnN0SHRtbENvbnRlbnQgPSBjb25maWcoKS5jb250ZW50IHx8ICcgJztcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1ib2R5IGxpYnMtdWktZm9udC1oN3Ige3sgY29uZmlnKCkuY2xhc3NJbmNsdWRlT3ZlcmxheUJvZHkgfHwgJycgfX1cIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBbb3B0aW9uc109XCJjb25maWcoKS5zY3JvbGxPdmVybGF5T3B0aW9uc1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiY29uZmlnKCkubWF4SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdUb3AucHhdPVwiY29uZmlnKCkucGFkZGluZ1RvcCA/PyA4XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weF09XCJjb25maWcoKS5wYWRkaW5nUmlnaHQgPz8gOFwiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCJjb25maWcoKS5wYWRkaW5nTGVmdCA/PyA4XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdCb3R0b20ucHhdPVwiY29uZmlnKCkucGFkZGluZ0JvdHRvbSA/PyA4XCJcbiAgICAgICAgW2lubmVySHRtbF09XCJjb25zdEh0bWxDb250ZW50IHwgdHJhbnNsYXRlXCI+PC9kaXY+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==