@pepperi-addons/ngx-lib 0.4.2-beta.12 → 0.4.2-beta.14

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.
Files changed (33) hide show
  1. package/core/common/services/color.service.d.ts +1 -0
  2. package/esm2020/bread-crumbs/bread-crumbs.component.mjs +3 -3
  3. package/esm2020/core/common/services/color.service.mjs +27 -1
  4. package/esm2020/form/internal-list.component.mjs +3 -3
  5. package/esm2020/list/list.component.mjs +3 -3
  6. package/esm2020/profile-data-views-list/profile-data-view/profile-data-view.component.mjs +3 -3
  7. package/esm2020/profile-data-views-list/profile-data-views-card/profile-data-views-card.component.mjs +3 -3
  8. package/esm2020/top-bar/top-bar.component.mjs +3 -3
  9. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs +2 -2
  10. package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
  11. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +2 -2
  12. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  13. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +2 -2
  14. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  15. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
  16. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  17. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
  18. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  19. package/fesm2015/pepperi-addons-ngx-lib.mjs +26 -0
  20. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  21. package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs +2 -2
  22. package/fesm2020/pepperi-addons-ngx-lib-bread-crumbs.mjs.map +1 -1
  23. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +2 -2
  24. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  25. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +2 -2
  26. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  27. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +4 -4
  28. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  29. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
  30. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  31. package/fesm2020/pepperi-addons-ngx-lib.mjs +26 -0
  32. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  33. package/package.json +1 -1
@@ -46,6 +46,7 @@ export declare class PepColorService {
46
46
  relativeLuminance({ r, g, b }: IPepRgbColor): number;
47
47
  findClosestAccessibleColor(adjustableColor: string, otherColor: string, contrastRatio: number): string;
48
48
  convertHslToStringHsl(hsl: IPepHslColor): string;
49
+ lightOrDark(color: any): 'light' | 'dark';
49
50
  static ɵfac: i0.ɵɵFactoryDeclaration<PepColorService, never>;
50
51
  static ɵprov: i0.ɵɵInjectableDeclaration<PepColorService>;
51
52
  }
@@ -66,11 +66,11 @@ export class PepBreadCrumbsComponent {
66
66
  }
67
67
  }
68
68
  PepBreadCrumbsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepBreadCrumbsComponent, deps: [{ token: i1.PepLayoutService }], target: i0.ɵɵFactoryTarget.Component });
69
- PepBreadCrumbsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: { items: "items", displayType: "displayType", addSpacing: "addSpacing" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\">&nbsp;{{ charSeparator }}&nbsp;</span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-md ellipsis current color-main\" title=\"{{ items[items.length - 1]?.text }}\">\n <span>{{ items[items.length - 1]?.text }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemsTemplate>\n <ul *ngIf=\"items?.length > 0\" class=\"bread-crumbs-items body-sm ellipsis\">\n <ng-container *ngIf=\"shrinkItems; then shrinkTemplate; else regularTemplate\">\n </ng-container>\n\n <ng-template #shrinkTemplate>\n <li>\n <a class=\"color-link\" [matMenuTriggerFor]=\"menu\" href=\"javascript:void(0)\">...</a>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let menuItem of items; let isLast = last\">\n <button mat-menu-item *ngIf=\"!isLast\" (click)=\"onBreadCrumbItemClick(menuItem)\"\n [title]=\"menuItem.title || menuItem.text\" [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ disabled: menuItem.disabled }\">\n <span>\n {{ menuItem.text }}\n </span>\n </button>\n </ng-container>\n </mat-menu>\n </li>\n <li>\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n <li>\n <span [title]=\"items[items.length - 1]?.title || items[items.length - 1]?.text\">\n {{ items[items.length - 1]?.text }}\n </span>\n </li>\n </ng-template>\n <ng-template #regularTemplate>\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <li>\n <a *ngIf=\"!item.disabled\" [title]=\"item.title || item.text\" href=\"javascript:void(0)\"\n class=\" color-link\" (click)=\"onBreadCrumbItemClick(item)\">{{ item.text }}</a>\n <span *ngIf=\"item.disabled\" [title]=\"item.title || item.text\">{{ item.text }}</span>\n </li>\n <li *ngIf=\"!isLast\">\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n </ng-container>\n </ng-template>\n </ul>\n</ng-template>", styles: [":host{display:grid}.bread-crumbs-label{height:calc(var(--pep-top-bar-spacing-bottom, .5rem) + var(--pep-top-bar-field-height, 2.5rem));display:flex;flex-flow:wrap;align-items:center}ul.bread-crumbs-items{padding:0;margin:0;list-style-type:none;display:flex;align-items:center}ul.bread-crumbs-items li{display:inline-flex}ul.bread-crumbs-items li .separator{height:1rem;width:1rem}ul.bread-crumbs-items li a{text-decoration:unset}\n", ""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }] });
69
+ PepBreadCrumbsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepBreadCrumbsComponent, selector: "pep-bread-crumbs", inputs: { items: "items", displayType: "displayType", addSpacing: "addSpacing" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\">&nbsp;{{ charSeparator }}&nbsp;</span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-2xs ellipsis current color-main\" title=\"{{ items[items.length - 1]?.text }}\">\n <span>{{ items[items.length - 1]?.text }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemsTemplate>\n <ul *ngIf=\"items?.length > 0\" class=\"bread-crumbs-items body-sm ellipsis\">\n <ng-container *ngIf=\"shrinkItems; then shrinkTemplate; else regularTemplate\">\n </ng-container>\n\n <ng-template #shrinkTemplate>\n <li>\n <a class=\"color-link\" [matMenuTriggerFor]=\"menu\" href=\"javascript:void(0)\">...</a>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let menuItem of items; let isLast = last\">\n <button mat-menu-item *ngIf=\"!isLast\" (click)=\"onBreadCrumbItemClick(menuItem)\"\n [title]=\"menuItem.title || menuItem.text\" [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ disabled: menuItem.disabled }\">\n <span>\n {{ menuItem.text }}\n </span>\n </button>\n </ng-container>\n </mat-menu>\n </li>\n <li>\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n <li>\n <span [title]=\"items[items.length - 1]?.title || items[items.length - 1]?.text\">\n {{ items[items.length - 1]?.text }}\n </span>\n </li>\n </ng-template>\n <ng-template #regularTemplate>\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <li>\n <a *ngIf=\"!item.disabled\" [title]=\"item.title || item.text\" href=\"javascript:void(0)\"\n class=\" color-link\" (click)=\"onBreadCrumbItemClick(item)\">{{ item.text }}</a>\n <span *ngIf=\"item.disabled\" [title]=\"item.title || item.text\">{{ item.text }}</span>\n </li>\n <li *ngIf=\"!isLast\">\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n </ng-container>\n </ng-template>\n </ul>\n</ng-template>", styles: [":host{display:grid}.bread-crumbs-label{height:calc(var(--pep-top-bar-spacing-bottom, .5rem) + var(--pep-top-bar-field-height, 2.5rem));display:flex;flex-flow:wrap;align-items:center}ul.bread-crumbs-items{padding:0;margin:0;list-style-type:none;display:flex;align-items:center}ul.bread-crumbs-items li{display:inline-flex}ul.bread-crumbs-items li .separator{height:1rem;width:1rem}ul.bread-crumbs-items li a{text-decoration:unset}\n", ""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }] });
70
70
  PepBreadCrumbsComponent.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepBreadCrumbsComponent });
71
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepBreadCrumbsComponent, decorators: [{
72
72
  type: Component,
73
- args: [{ selector: 'pep-bread-crumbs', template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\">&nbsp;{{ charSeparator }}&nbsp;</span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-md ellipsis current color-main\" title=\"{{ items[items.length - 1]?.text }}\">\n <span>{{ items[items.length - 1]?.text }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemsTemplate>\n <ul *ngIf=\"items?.length > 0\" class=\"bread-crumbs-items body-sm ellipsis\">\n <ng-container *ngIf=\"shrinkItems; then shrinkTemplate; else regularTemplate\">\n </ng-container>\n\n <ng-template #shrinkTemplate>\n <li>\n <a class=\"color-link\" [matMenuTriggerFor]=\"menu\" href=\"javascript:void(0)\">...</a>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let menuItem of items; let isLast = last\">\n <button mat-menu-item *ngIf=\"!isLast\" (click)=\"onBreadCrumbItemClick(menuItem)\"\n [title]=\"menuItem.title || menuItem.text\" [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ disabled: menuItem.disabled }\">\n <span>\n {{ menuItem.text }}\n </span>\n </button>\n </ng-container>\n </mat-menu>\n </li>\n <li>\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n <li>\n <span [title]=\"items[items.length - 1]?.title || items[items.length - 1]?.text\">\n {{ items[items.length - 1]?.text }}\n </span>\n </li>\n </ng-template>\n <ng-template #regularTemplate>\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <li>\n <a *ngIf=\"!item.disabled\" [title]=\"item.title || item.text\" href=\"javascript:void(0)\"\n class=\" color-link\" (click)=\"onBreadCrumbItemClick(item)\">{{ item.text }}</a>\n <span *ngIf=\"item.disabled\" [title]=\"item.title || item.text\">{{ item.text }}</span>\n </li>\n <li *ngIf=\"!isLast\">\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n </ng-container>\n </ng-template>\n </ul>\n</ng-template>", styles: [":host{display:grid}.bread-crumbs-label{height:calc(var(--pep-top-bar-spacing-bottom, .5rem) + var(--pep-top-bar-field-height, 2.5rem));display:flex;flex-flow:wrap;align-items:center}ul.bread-crumbs-items{padding:0;margin:0;list-style-type:none;display:flex;align-items:center}ul.bread-crumbs-items li{display:inline-flex}ul.bread-crumbs-items li .separator{height:1rem;width:1rem}ul.bread-crumbs-items li a{text-decoration:unset}\n"] }]
73
+ args: [{ selector: 'pep-bread-crumbs', template: "<ng-container *ngIf=\"displayType === 'label'; then labelTemplate; else itemsTemplate\">\n</ng-container>\n<ng-template #labelTemplate>\n <div *ngIf=\"items?.length > 0\" class=\"bread-crumbs-label color-dimmed ellipsis\" [ngClass]=\"{ 'pep-spacing-element': addSpacing }\"\n [title]=\"getLabelTitle()\">\n <div class=\"body-xs ellipsis\">\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <span *ngIf=\"!isFirst && !isLast\">&nbsp;{{ charSeparator }}&nbsp;</span>\n <span *ngIf=\"!isLast\">{{ item.text }}</span>\n </ng-container>\n </div>\n <div class=\" title-2xs ellipsis current color-main\" title=\"{{ items[items.length - 1]?.text }}\">\n <span>{{ items[items.length - 1]?.text }}</span>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemsTemplate>\n <ul *ngIf=\"items?.length > 0\" class=\"bread-crumbs-items body-sm ellipsis\">\n <ng-container *ngIf=\"shrinkItems; then shrinkTemplate; else regularTemplate\">\n </ng-container>\n\n <ng-template #shrinkTemplate>\n <li>\n <a class=\"color-link\" [matMenuTriggerFor]=\"menu\" href=\"javascript:void(0)\">...</a>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let menuItem of items; let isLast = last\">\n <button mat-menu-item *ngIf=\"!isLast\" (click)=\"onBreadCrumbItemClick(menuItem)\"\n [title]=\"menuItem.title || menuItem.text\" [disabled]=\"menuItem.disabled\"\n [ngClass]=\"{ disabled: menuItem.disabled }\">\n <span>\n {{ menuItem.text }}\n </span>\n </button>\n </ng-container>\n </mat-menu>\n </li>\n <li>\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n <li>\n <span [title]=\"items[items.length - 1]?.title || items[items.length - 1]?.text\">\n {{ items[items.length - 1]?.text }}\n </span>\n </li>\n </ng-template>\n <ng-template #regularTemplate>\n <ng-container *ngFor=\"let item of items; let isFirst = first; let isLast = last\">\n <li>\n <a *ngIf=\"!item.disabled\" [title]=\"item.title || item.text\" href=\"javascript:void(0)\"\n class=\" color-link\" (click)=\"onBreadCrumbItemClick(item)\">{{ item.text }}</a>\n <span *ngIf=\"item.disabled\" [title]=\"item.title || item.text\">{{ item.text }}</span>\n </li>\n <li *ngIf=\"!isLast\">\n <mat-icon class=\"separator pep-spacing-element\">\n <pep-icon [name]=\"iconSeparator\">\n </pep-icon>\n </mat-icon>\n </li>\n </ng-container>\n </ng-template>\n </ul>\n</ng-template>", styles: [":host{display:grid}.bread-crumbs-label{height:calc(var(--pep-top-bar-spacing-bottom, .5rem) + var(--pep-top-bar-field-height, 2.5rem));display:flex;flex-flow:wrap;align-items:center}ul.bread-crumbs-items{padding:0;margin:0;list-style-type:none;display:flex;align-items:center}ul.bread-crumbs-items li{display:inline-flex}ul.bread-crumbs-items li .separator{height:1rem;width:1rem}ul.bread-crumbs-items li a{text-decoration:unset}\n"] }]
74
74
  }, {
75
75
  type: Injectable
76
76
  }], ctorParameters: function () { return [{ type: i1.PepLayoutService }]; }, propDecorators: { items: [{
@@ -82,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
82
82
  }], itemClick: [{
83
83
  type: Output
84
84
  }] } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2JyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBRUwsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ3BCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFPdEMsTUFBTSxPQUFPLHVCQUF1QjtJQStCaEMsWUFBb0IsYUFBK0I7UUFBL0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBOUIzQyxXQUFNLEdBQTZCLEVBQUUsQ0FBQztRQVV0QyxpQkFBWSxHQUE4QixPQUFPLENBQUM7UUFVakQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUc1QixjQUFTLEdBQStDLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBRXpHLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQVcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBR21DLENBQUM7SUE3QnhELElBQ0ksS0FBSyxDQUFDLEtBQStCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUdELElBQ0ksV0FBVyxDQUFDLEtBQWdDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQWNELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDWCxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztxQkFDcEM7b0JBRUQsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUN4QzthQUNKO1NBQ0o7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBdUI7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOztvSEF2RVEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsK0tDeEJwQyw4ckdBaUVjO3dIRHpDRCx1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxrQkFBa0I7O2tCQUkvQixVQUFVO3VHQUlILEtBQUs7c0JBRFIsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixTQUFTO3NCQURSLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcExheW91dFNlcnZpY2UsIFBlcFNjcmVlblNpemVUeXBlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHtcbiAgICBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50LFxuICAgIFBlcEJyZWFkQ3J1bWJJdGVtLFxuICAgIFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUsXG59IGZyb20gJy4vYnJlYWQtY3J1bWJzLm1vZGVsJztcbmltcG9ydCB7XG4gICAgcGVwSWNvbkFycm93TGVmdCxcbiAgICBwZXBJY29uQXJyb3dSaWdodCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvaWNvbic7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1icmVhZC1jcnVtYnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkLWNydW1icy5jb21wb25lbnQuc2NzcycsICcuL2JyZWFkLWNydW1icy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXBCcmVhZENydW1ic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IEFycmF5PFBlcEJyZWFkQ3J1bWJJdGVtPiA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4pIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXR1cFNocmlua0l0ZW1zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtcygpOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVR5cGU6IFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUgPSAnbGFiZWwnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc3BsYXlUeXBlKHZhbHVlOiBQZXBCcmVhZENydW1ic0Rpc3BsYXlUeXBlKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlUeXBlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgIH1cbiAgICBnZXQgZGlzcGxheVR5cGUoKTogUGVwQnJlYWRDcnVtYnNEaXNwbGF5VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhZGRTcGFjaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIGNoYXJTZXBhcmF0b3IgPSAnIC8gJztcbiAgICBpY29uU2VwYXJhdG9yOiBzdHJpbmcgPSBwZXBJY29uQXJyb3dSaWdodC5uYW1lO1xuICAgIHNocmlua0l0ZW1zID0gZmFsc2U7XG4gICAgc2NyZWVuU2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JlZW5TaXplID0gc2l6ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclNlcGFyYXRvciA9ICcgXFxcXCAnO1xuICAgICAgICAgICAgdGhpcy5pY29uU2VwYXJhdG9yID0gcGVwSWNvbkFycm93TGVmdC5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFNocmlua0l0ZW1zKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VHlwZSA9PT0gJ2l0ZW1zJyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2hyaW5rSXRlbXMgPSB0aGlzLnNjcmVlblNpemUgPiBQZXBTY3JlZW5TaXplVHlwZS5TTTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExhYmVsVGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGxhYmVsVGl0bGUgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRpdGxlICs9IHRoaXMuY2hhclNlcGFyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVGl0bGUgKz0gdGhpcy5pdGVtc1tpbmRleF0udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFiZWxUaXRsZTtcbiAgICB9XG5cbiAgICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogUGVwQnJlYWRDcnVtYkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh7IHNvdXJjZTogaXRlbSB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdsYWJlbCc7IHRoZW4gbGFiZWxUZW1wbGF0ZTsgZWxzZSBpdGVtc1RlbXBsYXRlXCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImJyZWFkLWNydW1icy1sYWJlbCBjb2xvci1kaW1tZWQgZWxsaXBzaXNcIiBbbmdDbGFzc109XCJ7ICdwZXAtc3BhY2luZy1lbGVtZW50JzogYWRkU3BhY2luZyB9XCJcbiAgICAgICAgW3RpdGxlXT1cImdldExhYmVsVGl0bGUoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keS14cyBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0ZpcnN0ICYmICFpc0xhc3RcIj4mbmJzcDt7eyBjaGFyU2VwYXJhdG9yIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTGFzdFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiB0aXRsZS1tZCBlbGxpcHNpcyBjdXJyZW50IGNvbG9yLW1haW5cIiB0aXRsZT1cInt7IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdPy50ZXh0IH19XCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1zVGVtcGxhdGU+XG4gICAgPHVsICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImJyZWFkLWNydW1icy1pdGVtcyBib2R5LXNtIGVsbGlwc2lzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaHJpbmtJdGVtczsgdGhlbiBzaHJpbmtUZW1wbGF0ZTsgZWxzZSByZWd1bGFyVGVtcGxhdGVcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaHJpbmtUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImNvbG9yLWxpbmtcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj4uLi48L2E+XG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBpdGVtczsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cIiFpc0xhc3RcIiAoY2xpY2spPVwib25CcmVhZENydW1iSXRlbUNsaWNrKG1lbnVJdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm1lbnVJdGVtLnRpdGxlIHx8IG1lbnVJdGVtLnRleHRcIiBbZGlzYWJsZWRdPVwibWVudUl0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IG1lbnVJdGVtLmRpc2FibGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVudUl0ZW0udGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZXBhcmF0b3IgcGVwLXNwYWNpbmctZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8cGVwLWljb24gW25hbWVdPVwiaWNvblNlcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8udGl0bGUgfHwgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IGxldCBpc0xhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLmRpc2FibGVkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGUgfHwgaXRlbS50ZXh0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBjb2xvci1saW5rXCIgKGNsaWNrKT1cIm9uQnJlYWRDcnVtYkl0ZW1DbGljayhpdGVtKVwiPnt7IGl0ZW0udGV4dCB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLmRpc2FibGVkXCIgW3RpdGxlXT1cIml0ZW0udGl0bGUgfHwgaXRlbS50ZXh0XCI+e3sgaXRlbS50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiIWlzTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZXBhcmF0b3IgcGVwLXNwYWNpbmctZWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImljb25TZXBhcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGVwLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvdWw+XG48L25nLXRlbXBsYXRlPiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWQtY3J1bWJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvYnJlYWQtY3J1bWJzL2JyZWFkLWNydW1icy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2JyZWFkLWNydW1icy9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBRUwsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTTlFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBQ3BCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFPdEMsTUFBTSxPQUFPLHVCQUF1QjtJQStCaEMsWUFBb0IsYUFBK0I7UUFBL0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBOUIzQyxXQUFNLEdBQTZCLEVBQUUsQ0FBQztRQVV0QyxpQkFBWSxHQUE4QixPQUFPLENBQUM7UUFVakQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUc1QixjQUFTLEdBQStDLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBRXpHLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQVcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBR21DLENBQUM7SUE3QnhELElBQ0ksS0FBSyxDQUFDLEtBQStCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUdELElBQ0ksV0FBVyxDQUFDLEtBQWdDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQWNELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDWCxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztxQkFDcEM7b0JBRUQsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUN4QzthQUNKO1NBQ0o7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBdUI7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOztvSEF2RVEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsK0tDeEJwQywrckdBaUVjO3dIRHpDRCx1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxrQkFBa0I7O2tCQUkvQixVQUFVO3VHQUlILEtBQUs7c0JBRFIsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBU0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixTQUFTO3NCQURSLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcExheW91dFNlcnZpY2UsIFBlcFNjcmVlblNpemVUeXBlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHtcbiAgICBJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50LFxuICAgIFBlcEJyZWFkQ3J1bWJJdGVtLFxuICAgIFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUsXG59IGZyb20gJy4vYnJlYWQtY3J1bWJzLm1vZGVsJztcbmltcG9ydCB7XG4gICAgcGVwSWNvbkFycm93TGVmdCxcbiAgICBwZXBJY29uQXJyb3dSaWdodCxcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvaWNvbic7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1icmVhZC1jcnVtYnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9icmVhZC1jcnVtYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkLWNydW1icy5jb21wb25lbnQuc2NzcycsICcuL2JyZWFkLWNydW1icy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQZXBCcmVhZENydW1ic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IEFycmF5PFBlcEJyZWFkQ3J1bWJJdGVtPiA9IFtdO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4pIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXR1cFNocmlua0l0ZW1zKCk7XG4gICAgfVxuICAgIGdldCBpdGVtcygpOiBBcnJheTxQZXBCcmVhZENydW1iSXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVR5cGU6IFBlcEJyZWFkQ3J1bWJzRGlzcGxheVR5cGUgPSAnbGFiZWwnO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc3BsYXlUeXBlKHZhbHVlOiBQZXBCcmVhZENydW1ic0Rpc3BsYXlUeXBlKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlUeXBlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgIH1cbiAgICBnZXQgZGlzcGxheVR5cGUoKTogUGVwQnJlYWRDcnVtYnNEaXNwbGF5VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhZGRTcGFjaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwQnJlYWRDcnVtYkl0ZW1DbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEJyZWFkQ3J1bWJJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIGNoYXJTZXBhcmF0b3IgPSAnIC8gJztcbiAgICBpY29uU2VwYXJhdG9yOiBzdHJpbmcgPSBwZXBJY29uQXJyb3dSaWdodC5uYW1lO1xuICAgIHNocmlua0l0ZW1zID0gZmFsc2U7XG4gICAgc2NyZWVuU2l6ZTogUGVwU2NyZWVuU2l6ZVR5cGU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JlZW5TaXplID0gc2l6ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBTaHJpbmtJdGVtcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclNlcGFyYXRvciA9ICcgXFxcXCAnO1xuICAgICAgICAgICAgdGhpcy5pY29uU2VwYXJhdG9yID0gcGVwSWNvbkFycm93TGVmdC5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFNocmlua0l0ZW1zKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VHlwZSA9PT0gJ2l0ZW1zJyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2hyaW5rSXRlbXMgPSB0aGlzLnNjcmVlblNpemUgPiBQZXBTY3JlZW5TaXplVHlwZS5TTTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExhYmVsVGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGxhYmVsVGl0bGUgPSAnJztcblxuICAgICAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRpdGxlICs9IHRoaXMuY2hhclNlcGFyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVGl0bGUgKz0gdGhpcy5pdGVtc1tpbmRleF0udGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFiZWxUaXRsZTtcbiAgICB9XG5cbiAgICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogUGVwQnJlYWRDcnVtYkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh7IHNvdXJjZTogaXRlbSB9KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheVR5cGUgPT09ICdsYWJlbCc7IHRoZW4gbGFiZWxUZW1wbGF0ZTsgZWxzZSBpdGVtc1RlbXBsYXRlXCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImJyZWFkLWNydW1icy1sYWJlbCBjb2xvci1kaW1tZWQgZWxsaXBzaXNcIiBbbmdDbGFzc109XCJ7ICdwZXAtc3BhY2luZy1lbGVtZW50JzogYWRkU3BhY2luZyB9XCJcbiAgICAgICAgW3RpdGxlXT1cImdldExhYmVsVGl0bGUoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keS14cyBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0ZpcnN0ICYmICFpc0xhc3RcIj4mbmJzcDt7eyBjaGFyU2VwYXJhdG9yIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTGFzdFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiB0aXRsZS0yeHMgZWxsaXBzaXMgY3VycmVudCBjb2xvci1tYWluXCIgdGl0bGU9XCJ7eyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXT8udGV4dCB9fVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRleHQgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtc1RlbXBsYXRlPlxuICAgIDx1bCAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJicmVhZC1jcnVtYnMtaXRlbXMgYm9keS1zbSBlbGxpcHNpc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hyaW5rSXRlbXM7IHRoZW4gc2hyaW5rVGVtcGxhdGU7IGVsc2UgcmVndWxhclRlbXBsYXRlXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hyaW5rVGVtcGxhdGU+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjb2xvci1saW5rXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCI+Li4uPC9hPlxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgaXRlbXM7IGxldCBpc0xhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCIhaXNMYXN0XCIgKGNsaWNrKT1cIm9uQnJlYWRDcnVtYkl0ZW1DbGljayhtZW51SXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJtZW51SXRlbS50aXRsZSB8fCBtZW51SXRlbS50ZXh0XCIgW2Rpc2FibGVkXT1cIm1lbnVJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBtZW51SXRlbS5kaXNhYmxlZCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbnVJdGVtLnRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VwYXJhdG9yIHBlcC1zcGFjaW5nLWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBlcC1pY29uIFtuYW1lXT1cImljb25TZXBhcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0/LnRpdGxlIHx8IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdPy50ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdPy50ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFyVGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaXNGaXJzdCA9IGZpcnN0OyBsZXQgaXNMYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhaXRlbS5kaXNhYmxlZFwiIFt0aXRsZV09XCJpdGVtLnRpdGxlIHx8IGl0ZW0udGV4dFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIgY29sb3ItbGlua1wiIChjbGljayk9XCJvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbSlcIj57eyBpdGVtLnRleHQgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5kaXNhYmxlZFwiIFt0aXRsZV09XCJpdGVtLnRpdGxlIHx8IGl0ZW0udGV4dFwiPnt7IGl0ZW0udGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cIiFpc0xhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VwYXJhdG9yIHBlcC1zcGFjaW5nLWVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBbbmFtZV09XCJpY29uU2VwYXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -347,6 +347,32 @@ export class PepColorService {
347
347
  hsl.l +
348
348
  '%)');
349
349
  }
350
+ lightOrDark(color) {
351
+ let r = undefined;
352
+ let g = undefined;
353
+ let b = undefined;
354
+ // Check the format of the color, HEX or RGB?
355
+ if (color.match(/^rgb/)) {
356
+ // If HEX --> store the red, green, blue values in separate variables
357
+ color = color.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/);
358
+ r = color[1];
359
+ g = color[2];
360
+ b = color[3];
361
+ }
362
+ else {
363
+ // If RGB --> Convert it to HEX: http://gist.github.com/983661
364
+ color = +("0x" + color.slice(1).replace(color.length < 5 && /./g, '$&$&'));
365
+ r = color >> 16;
366
+ g = color >> 8 & 255;
367
+ b = color & 255;
368
+ }
369
+ // HSP (Highly Sensitive Poo) equation from http://alienryderflex.com/hsp.html
370
+ const hsp = Math.sqrt(0.299 * (r * r) +
371
+ 0.587 * (g * g) +
372
+ 0.114 * (b * b));
373
+ // Using the HSP value, determine whether the color is light or dark
374
+ return (hsp > 127.5) ? 'light' : 'dark';
375
+ }
350
376
  }
351
377
  PepColorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
352
378
  PepColorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepColorService, providedIn: 'root' });
@@ -356,4 +382,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
356
382
  providedIn: 'root',
357
383
  }]
358
384
  }] });
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc3JjL2NvcmUvY29tbW9uL3NlcnZpY2VzL2NvbG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzQjNDLE1BQU0sT0FBTyxlQUFlO0lBSDVCO1FBSWEsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDOUIsZ0NBQTJCLEdBQUcsa0JBQWtCLENBQUM7UUFDakQsMENBQXFDLEdBQUcsbUJBQW1CLENBQUM7UUFDNUQsOEJBQXlCLEdBQUcsa0JBQWtCLENBQUM7UUFDL0Msd0NBQW1DLEdBQUcsbUJBQW1CLENBQUM7S0EyYnRFO0lBemJXLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN2QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1QsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNwQztRQUVELE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGdDQUFnQyxDQUNwQyxlQUF1QixFQUN2QixVQUFrQixFQUNsQixhQUFxQjtRQUVyQixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUs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QUNOLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNkLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVDtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7UUFFRCxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVQLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNOLENBQUMsR0FBRyxD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QztZQUNqQyxJQUFJO1lBQ0osR0FBRyxDQUFDLENBQUM7WUFDTCxLQUFLO1lBQ0wsR0FBRyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQ1AsQ0FBQztJQUNOLENBQUM7OzRHQS9iUSxlQUFlO2dIQUFmLGVBQWUsY0FGWixNQUFNOzJGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZXBSZ2JDb2xvciB7XG4gICAgcj86IGFueTtcbiAgICBnPzogYW55O1xuICAgIGI/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcEhzbENvbG9yIHtcbiAgICBoPzogYW55O1xuICAgIHM/OiBhbnk7XG4gICAgbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVwQ2xvc2VzdENvbG9yIHtcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGxpZ2h0bmVzczogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBDb2xvclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IEZMT0FUX1JFR0VYID0gL15cXGQrKFxcLlxcZCspPyQvO1xuICAgIHJlYWRvbmx5IFRIUkVFX0RJR0lUX0hFWF9DT0xPUl9SRUdFWCA9IC9eWzAtOWEtZkEtRl17M30kLztcbiAgICByZWFkb25seSBUSFJFRV9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYID0gL14jWzAtOWEtZkEtRl17M30kLztcbiAgICByZWFkb25seSBTSVhfRElHSVRfSEVYX0NPTE9SX1JFR0VYID0gL15bMC05YS1mQS1GXXs2fSQvO1xuICAgIHJlYWRvbmx5IFNJWF9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYID0gL14jWzAtOWEtZkEtRl17Nn0kLztcblxuICAgIHByaXZhdGUgY29udHJhc3Qoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBMMSA9IHRoaXMucmVsYXRpdmVMdW1pbmFuY2UodGhpcy5oZXgycmdiKHN0cjEpKTtcbiAgICAgICAgY29uc3QgTDIgPSB0aGlzLnJlbGF0aXZlTHVtaW5hbmNlKHRoaXMuaGV4MnJnYihzdHIyKSk7XG5cbiAgICAgICAgaWYgKEwxIDwgTDIpIHtcbiAgICAgICAgICAgIHJldHVybiAoTDIgKyAwLjA1KSAvIChMMSArIDAuMDUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChMMSArIDAuMDUpIC8gKEwyICsgMC4wNSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ2xvc2VzdEFjY2Vzc2libGVEYXJrZXJDb2xvcihcbiAgICAgICAgYWRqdXN0YWJsZUNvbG9yOiBzdHJpbmcsXG4gICAgICAgIG90aGVyQ29sb3I6IHN0cmluZyxcbiAgICAgICAgY29udHJhc3RSYXRpbzogbnVtYmVyXG4gICAgKTogSVBlcENsb3Nlc3RDb2xvciB7XG4gICAgICAgIGNvbnN0IHsgaCwgcywgbCB9ID0gdGhpcy5oZXgyaHNsKGFkanVzdGFibGVDb2xvcik7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA+PSBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzOiBsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5Db2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IDAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QobWluQ29sb3IsIG90aGVyQ29sb3IpIDwgY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluID0gMDtcbiAgICAgICAgbGV0IG1heCA9IGw7XG4gICAgICAgIGxldCBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGwgfSk7XG4gICAgICAgIGxldCBsYXN0TWluQ29sb3I7XG4gICAgICAgIGxldCBsYXN0TWF4Q29sb3I7XG4gICAgICAgIGxldCBsVGVtcDtcblxuICAgICAgICB3aGlsZSAobWluQ29sb3IgIT09IGxhc3RNaW5Db2xvciB8fCBtYXhDb2xvciAhPT0gbGFzdE1heENvbG9yKSB7XG4gICAgICAgICAgICBsYXN0TWluQ29sb3IgPSBtaW5Db2xvcjtcbiAgICAgICAgICAgIGxhc3RNYXhDb2xvciA9IG1heENvbG9yO1xuXG4gICAgICAgICAgICBsVGVtcCA9IChtaW4gKyBtYXgpIC8gMjtcbiAgICAgICAgICAgIGFkanVzdGFibGVDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cmFzdChhZGp1c3RhYmxlQ29sb3IsIG90aGVyQ29sb3IpIDwgY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgICAgIG1heCA9IGxUZW1wO1xuICAgICAgICAgICAgICAgIG1heENvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pbiA9IGxUZW1wO1xuICAgICAgICAgICAgICAgIG1pbkNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sb3I6IG1pbkNvbG9yLFxuICAgICAgICAgICAgbGlnaHRuZXNzOiBtaW4sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ2xvc2VzdEFjY2Vzc2libGVMaWdodGVyQ29sb3IoXG4gICAgICAgIGFkanVzdGFibGVDb2xvcjogc3RyaW5nLFxuICAgICAgICBvdGhlckNvbG9yOiBzdHJpbmcsXG4gICAgICAgIGNvbnRyYXN0UmF0aW86IG51bWJlclxuICAgICk6IElQZXBDbG9zZXN0Q29sb3Ige1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwgfSA9IHRoaXMuaGV4MmhzbChhZGp1c3RhYmxlQ29sb3IpO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KGFkanVzdGFibGVDb2xvciwgb3RoZXJDb2xvcikgPj0gY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYWRqdXN0YWJsZUNvbG9yLFxuICAgICAgICAgICAgICAgIGxpZ2h0bmVzczogbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4Q29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiAxMDAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QobWF4Q29sb3IsIG90aGVyQ29sb3IpIDwgY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluID0gbDtcbiAgICAgICAgbGV0IG1heCA9IDEwMDtcbiAgICAgICAgbGV0IG1pbkNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbCB9KTtcbiAgICAgICAgbGV0IGxhc3RNaW5Db2xvcjtcbiAgICAgICAgbGV0IGxhc3RNYXhDb2xvcjtcbiAgICAgICAgbGV0IGxUZW1wO1xuXG4gICAgICAgIHdoaWxlIChtaW5Db2xvciAhPT0gbGFzdE1pbkNvbG9yIHx8IG1heENvbG9yICE9PSBsYXN0TWF4Q29sb3IpIHtcbiAgICAgICAgICAgIGxhc3RNaW5Db2xvciA9IG1pbkNvbG9yO1xuICAgICAgICAgICAgbGFzdE1heENvbG9yID0gbWF4Q29sb3I7XG5cbiAgICAgICAgICAgIGxUZW1wID0gKG1pbiArIG1heCkgLyAyO1xuICAgICAgICAgICAgYWRqdXN0YWJsZUNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KGFkanVzdGFibGVDb2xvciwgb3RoZXJDb2xvcikgPCBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgbWluID0gbFRlbXA7XG4gICAgICAgICAgICAgICAgbWluQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gbFRlbXA7XG4gICAgICAgICAgICAgICAgbWF4Q29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xvcjogbWF4Q29sb3IsXG4gICAgICAgICAgICBsaWdodG5lc3M6IG1heCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGhleCBzdHJpbmcgdG8gNiBkaWdpdHMgaGV4IHN0cmluZy5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKi9cbiAgICBoZXgyc2l4RGlnaXRIZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgPSBzdHIudHJpbSgpO1xuXG4gICAgICAgIGlmICh0aGlzLlNJWF9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLlNJWF9ESUdJVF9IRVhfQ09MT1JfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyMnICsgc3RyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuVEhSRUVfRElHSVRfSEVYX0NPTE9SX1dJVEhfSEFTSF9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBzdHJbMV0gKyBzdHJbMV0gKyBzdHJbMl0gKyBzdHJbMl0gKyBzdHJbM10gKyBzdHJbM107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5USFJFRV9ESUdJVF9IRVhfQ09MT1JfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyMnICsgc3RyWzBdICsgc3RyWzBdICsgc3RyWzFdICsgc3RyWzFdICsgc3RyWzJdICsgc3RyWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCByZ2IgY29sb3IgdG8gNiBkaWdpdHMgaGV4IHN0cmluZy5cbiAgICAgKiBAcGFyYW0gY29sb3IgVGhlIHJnYiBjb2xvciB0byBjb252ZXJ0LlxuICAgICAqL1xuICAgIHJnYjJzaXhEaWdpdEhleChjb2xvcjogSVBlcFJnYkNvbG9yKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb2xvci5yID0gY29sb3Iuci50b1N0cmluZygxNik7XG4gICAgICAgIGNvbG9yLmcgPSBjb2xvci5nLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY29sb3IuYiA9IGNvbG9yLmIudG9TdHJpbmcoMTYpO1xuXG4gICAgICAgIGlmIChjb2xvci5yLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29sb3IuciA9ICcwJyArIGNvbG9yLnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbG9yLmcgPSAnMCcgKyBjb2xvci5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yLmIubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb2xvci5iID0gJzAnICsgY29sb3IuYjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnIycgKyBjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBoZXggc3RyaW5nIHRvIHJnYiBjb2xvci5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBoZXggc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICovXG4gICAgaGV4MnJnYihzdHI6IHN0cmluZyk6IElQZXBSZ2JDb2xvciB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpeERpZ2l0SGV4ID0gdGhpcy5oZXgyc2l4RGlnaXRIZXgoc3RyKTtcblxuICAgICAgICBpZiAoc2l4RGlnaXRIZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50KHNpeERpZ2l0SGV4LnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICAgICAgICBnOiBwYXJzZUludChzaXhEaWdpdEhleC5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgICAgICAgYjogcGFyc2VJbnQoc2l4RGlnaXRIZXguc2xpY2UoNSwgNyksIDE2KSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZ2JTdHJpbmcyaHNsKHN0cjogc3RyaW5nKTogSVBlcEhzbENvbG9yIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VwID0gc3RyLmluZGV4T2YoJywnKSA+IC0xID8gJywnIDogJyAnO1xuICAgICAgICBjb25zdCByZ2JBcnIgPSBzdHIuc3Vic3RyKDQpLnNwbGl0KCcpJylbMF0uc3BsaXQoc2VwKTtcblxuICAgICAgICBjb25zdCByID0gcmdiQXJyWzBdO1xuICAgICAgICBjb25zdCBnID0gcmdiQXJyWzFdLnN1YnN0cigwLCByZ2JBcnJbMV0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIGNvbnN0IGIgPSByZ2JBcnJbMl0uc3Vic3RyKDAsIHJnYkFyclsyXS5sZW5ndGgpLnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZ2IyaHNsKHsgciwgZywgYiB9KTtcbiAgICB9XG5cbiAgICByZ2IyaHNsKHsgciwgZywgYiB9OiBJUGVwUmdiQ29sb3IpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuXG4gICAgICAgIC8vIEZpbmQgZ3JlYXRlc3QgYW5kIHNtYWxsZXN0IGNoYW5uZWwgdmFsdWVzXG4gICAgICAgIGNvbnN0IGNtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IGNtYXggLSBjbWluO1xuXG4gICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgbGV0IHMgPSAwO1xuICAgICAgICBsZXQgbCA9IDA7XG5cbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgICBoID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjbWF4ID09PSByKSB7XG4gICAgICAgICAgICBoID0gKChnIC0gYikgLyBkZWx0YSkgJSA2O1xuICAgICAgICB9IGVsc2UgaWYgKGNtYXggPT09IGcpIHtcbiAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZGVsdGEgKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCA9IChyIC0gZykgLyBkZWx0YSArIDQ7XG4gICAgICAgIH1cblxuICAgICAgICBoID0gTWF0aC5yb3VuZChoICogNjApO1xuXG4gICAgICAgIGlmIChoIDwgMCkge1xuICAgICAgICAgICAgaCArPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICBsID0gKGNtYXggKyBjbWluKSAvIDI7XG4gICAgICAgIHMgPSBkZWx0YSA9PT0gMCA/IDAgOiBkZWx0YSAvICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSk7XG4gICAgICAgIHMgPSArKHMgKiAxMDApLnRvRml4ZWQoMSk7XG4gICAgICAgIGwgPSArKGwgKiAxMDApLnRvRml4ZWQoMSk7XG5cbiAgICAgICAgcmV0dXJuIHsgaCwgcywgbCB9O1xuICAgIH1cblxuICAgIGhzbFN0cmluZzJoc2woc3RyOiBzdHJpbmcpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXAgPSBzdHIuaW5kZXhPZignLCcpID4gLTEgPyAnLCcgOiAnICc7XG4gICAgICAgIGNvbnN0IGhzbEFyciA9IHN0ci5zdWJzdHIoNCkuc3BsaXQoJyknKVswXS5zcGxpdChzZXApO1xuXG4gICAgICAgIGxldCBoOiBhbnkgPSBoc2xBcnJbMF07XG4gICAgICAgIGxldCBzID0gaHNsQXJyWzFdLnN1YnN0cigwLCBoc2xBcnJbMV0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIGxldCBsID0gaHNsQXJyWzJdLnN1YnN0cigwLCBoc2xBcnJbMl0ubGVuZ3RoKS50cmltKCk7XG5cbiAgICAgICAgLy8gU3RyaXAgbGFiZWwgYW5kIGNvbnZlcnQgdG8gZGVncmVlcyAoaWYgbmVjZXNzYXJ5KVxuICAgICAgICBpZiAoaC5pbmRleE9mKCdkZWcnKSA+IC0xKSB7XG4gICAgICAgICAgICBoID0gaC5zdWJzdHIoMCwgaC5sZW5ndGggLSAzKTtcbiAgICAgICAgfSBlbHNlIGlmIChoLmluZGV4T2YoJ3JhZCcpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKGguc3Vic3RyKDAsIGgubGVuZ3RoIC0gMykgKiAoMTgwIC8gTWF0aC5QSSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGguaW5kZXhPZigndHVybicpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKGguc3Vic3RyKDAsIGgubGVuZ3RoIC0gNCkgKiAzNjApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2VlcCBodWUgZnJhY3Rpb24gb2YgMzYwIGlmIGVuZGluZyB1cCBvdmVyXG4gICAgICAgIGlmIChoID49IDM2MCkge1xuICAgICAgICAgICAgaCAlPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlICVcbiAgICAgICAgaWYgKHMuaW5kZXhPZignJScpID4gLTEpIHtcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoLyUvZywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSAlXG4gICAgICAgIGlmIChsLmluZGV4T2YoJyUnKSA+IC0xKSB7XG4gICAgICAgICAgICBsID0gbC5yZXBsYWNlKC8lL2csICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGgsIHMsIGwgfTtcbiAgICB9XG5cbiAgICBoc2wycmdiKHsgaCwgcywgbCB9OiBJUGVwSHNsQ29sb3IpOiBJUGVwUmdiQ29sb3Ige1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgbGV0IGc7XG4gICAgICAgIGxldCBiO1xuXG4gICAgICAgIGlmICghaXNGaW5pdGUoaCkpIHtcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zpbml0ZShzKSkge1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRmluaXRlKGwpKSB7XG4gICAgICAgICAgICBsID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgICAgICBoID0gNiAtICgtaCAlIDYpO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAlPSA2O1xuXG4gICAgICAgIHMgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBzIC8gMTAwKSk7XG4gICAgICAgIGwgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBsIC8gMTAwKSk7XG5cbiAgICAgICAgY29uc3QgYyA9ICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSkgKiBzO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKGggJSAyKSAtIDEpKTtcblxuICAgICAgICBpZiAoaCA8IDEpIHtcbiAgICAgICAgICAgIHIgPSBjO1xuICAgICAgICAgICAgZyA9IHg7XG4gICAgICAgICAgICBiID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgMikge1xuICAgICAgICAgICAgciA9IHg7XG4gICAgICAgICAgICBnID0gYztcbiAgICAgICAgICAgIGIgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAzKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGcgPSBjO1xuICAgICAgICAgICAgYiA9IHg7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA8IDQpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgZyA9IHg7XG4gICAgICAgICAgICBiID0gYztcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgNSkge1xuICAgICAgICAgICAgciA9IHg7XG4gICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgIGIgPSBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgIGIgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IGwgLSBjIC8gMjtcbiAgICAgICAgciA9IE1hdGgucm91bmQoKHIgKyBtKSAqIDI1NSk7XG4gICAgICAgIGcgPSBNYXRoLnJvdW5kKChnICsgbSkgKiAyNTUpO1xuICAgICAgICBiID0gTWF0aC5yb3VuZCgoYiArIG0pICogMjU1KTtcblxuICAgICAgICByZXR1cm4geyByLCBnLCBiIH07XG4gICAgfVxuXG4gICAgaGV4MmhzbChzdHI6IHN0cmluZyk6IElQZXBIc2xDb2xvciB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpeERpZ2l0SGV4ID0gdGhpcy5oZXgyc2l4RGlnaXRIZXgoc3RyKTtcblxuICAgICAgICBpZiAoc2l4RGlnaXRIZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiID0gdGhpcy5oZXgycmdiKHNpeERpZ2l0SGV4KTtcblxuICAgICAgICBpZiAocmdiID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJnYjJoc2wocmdiKTtcbiAgICB9XG5cbiAgICBoc2wyaGV4KGhzbDogSVBlcEhzbENvbG9yKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFoc2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiID0gdGhpcy5oc2wycmdiKGhzbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmdiMnNpeERpZ2l0SGV4KHJnYik7XG4gICAgfVxuXG4gICAgcmVsYXRpdmVMdW1pbmFuY2UoeyByLCBnLCBiIH06IElQZXBSZ2JDb2xvcik6IG51bWJlciB7XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyLCBnLCBiXS5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMgPSBjIC8gMjU1O1xuXG4gICAgICAgICAgICBpZiAoYyA8PSAwLjAzOTI4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KChjICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gICAgfVxuXG4gICAgZmluZENsb3Nlc3RBY2Nlc3NpYmxlQ29sb3IoXG4gICAgICAgIGFkanVzdGFibGVDb2xvcjogc3RyaW5nLFxuICAgICAgICBvdGhlckNvbG9yOiBzdHJpbmcsXG4gICAgICAgIGNvbnRyYXN0UmF0aW86IG51bWJlclxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3REYXJrZXJDb2xvcjogSVBlcENsb3Nlc3RDb2xvciA9IHRoaXMuZmluZENsb3Nlc3RBY2Nlc3NpYmxlRGFya2VyQ29sb3IoXG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICBvdGhlckNvbG9yLFxuICAgICAgICAgICAgY29udHJhc3RSYXRpb1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbG9zZXN0TGlnaHRlckNvbG9yOiBJUGVwQ2xvc2VzdENvbG9yID0gdGhpcy5maW5kQ2xvc2VzdEFjY2Vzc2libGVMaWdodGVyQ29sb3IoXG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICBvdGhlckNvbG9yLFxuICAgICAgICAgICAgY29udHJhc3RSYXRpb1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjbG9zZXN0RGFya2VyQ29sb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0TGlnaHRlckNvbG9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0TGlnaHRlckNvbG9yLmNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb3Nlc3RMaWdodGVyQ29sb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0RGFya2VyQ29sb3IuY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGwgfSA9IHRoaXMuaGV4MmhzbChhZGp1c3RhYmxlQ29sb3IpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNsb3Nlc3RMaWdodGVyQ29sb3IubGlnaHRuZXNzIC0gbCA8XG4gICAgICAgICAgICBsIC0gY2xvc2VzdERhcmtlckNvbG9yLmxpZ2h0bmVzc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0TGlnaHRlckNvbG9yLmNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb3Nlc3REYXJrZXJDb2xvci5jb2xvcjtcbiAgICB9XG5cbiAgICBjb252ZXJ0SHNsVG9TdHJpbmdIc2woaHNsOiBJUGVwSHNsQ29sb3IpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJ2hzbCgnICtcbiAgICAgICAgICAgIChoc2wuaCA8IDAgPyBoc2wuaCArIDM2MCA6IGhzbC5oKSArXG4gICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgIGhzbC5zICtcbiAgICAgICAgICAgICclLCAnICtcbiAgICAgICAgICAgIGhzbC5sICtcbiAgICAgICAgICAgICclKSdcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc3JjL2NvcmUvY29tbW9uL3NlcnZpY2VzL2NvbG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzQjNDLE1BQU0sT0FBTyxlQUFlO0lBSDVCO1FBSWEsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDOUIsZ0NBQTJCLEdBQUcsa0JBQWtCLENBQUM7UUFDakQsMENBQXFDLEdBQUcsbUJBQW1CLENBQUM7UUFDNUQsOEJBQXlCLEdBQUcsa0JBQWtCLENBQUM7UUFDL0Msd0NBQW1DLEdBQUcsbUJBQW1CLENBQUM7S0ErZHRFO0lBN2RXLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN2QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1QsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNwQztRQUVELE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGdDQUFnQyxDQUNwQyxlQUF1QixFQUN2QixVQUFrQixFQUNsQixhQUFxQjtRQUVyQixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUs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QUNOLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNkLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVDtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7UUFFRCxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVQLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNOLENBQUMsR0FBRyxD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Q0FBQyxDQUFDLENBQ2xCLENBQUM7UUFFRixvRUFBb0U7UUFDcEUsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQzs7NEdBbmVRLGVBQWU7Z0hBQWYsZUFBZSxjQUZaLE1BQU07MkZBRVQsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcFJnYkNvbG9yIHtcbiAgICByPzogYW55O1xuICAgIGc/OiBhbnk7XG4gICAgYj86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVwSHNsQ29sb3Ige1xuICAgIGg/OiBhbnk7XG4gICAgcz86IGFueTtcbiAgICBsPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQZXBDbG9zZXN0Q29sb3Ige1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgbGlnaHRuZXNzOiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcENvbG9yU2VydmljZSB7XG4gICAgcmVhZG9ubHkgRkxPQVRfUkVHRVggPSAvXlxcZCsoXFwuXFxkKyk/JC87XG4gICAgcmVhZG9ubHkgVEhSRUVfRElHSVRfSEVYX0NPTE9SX1JFR0VYID0gL15bMC05YS1mQS1GXXszfSQvO1xuICAgIHJlYWRvbmx5IFRIUkVFX0RJR0lUX0hFWF9DT0xPUl9XSVRIX0hBU0hfUkVHRVggPSAvXiNbMC05YS1mQS1GXXszfSQvO1xuICAgIHJlYWRvbmx5IFNJWF9ESUdJVF9IRVhfQ09MT1JfUkVHRVggPSAvXlswLTlhLWZBLUZdezZ9JC87XG4gICAgcmVhZG9ubHkgU0lYX0RJR0lUX0hFWF9DT0xPUl9XSVRIX0hBU0hfUkVHRVggPSAvXiNbMC05YS1mQS1GXXs2fSQvO1xuXG4gICAgcHJpdmF0ZSBjb250cmFzdChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IEwxID0gdGhpcy5yZWxhdGl2ZUx1bWluYW5jZSh0aGlzLmhleDJyZ2Ioc3RyMSkpO1xuICAgICAgICBjb25zdCBMMiA9IHRoaXMucmVsYXRpdmVMdW1pbmFuY2UodGhpcy5oZXgycmdiKHN0cjIpKTtcblxuICAgICAgICBpZiAoTDEgPCBMMikge1xuICAgICAgICAgICAgcmV0dXJuIChMMiArIDAuMDUpIC8gKEwxICsgMC4wNSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKEwxICsgMC4wNSkgLyAoTDIgKyAwLjA1KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRDbG9zZXN0QWNjZXNzaWJsZURhcmtlckNvbG9yKFxuICAgICAgICBhZGp1c3RhYmxlQ29sb3I6IHN0cmluZyxcbiAgICAgICAgb3RoZXJDb2xvcjogc3RyaW5nLFxuICAgICAgICBjb250cmFzdFJhdGlvOiBudW1iZXJcbiAgICApOiBJUGVwQ2xvc2VzdENvbG9yIHtcbiAgICAgICAgY29uc3QgeyBoLCBzLCBsIH0gPSB0aGlzLmhleDJoc2woYWRqdXN0YWJsZUNvbG9yKTtcblxuICAgICAgICBpZiAodGhpcy5jb250cmFzdChhZGp1c3RhYmxlQ29sb3IsIG90aGVyQ29sb3IpID49IGNvbnRyYXN0UmF0aW8pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGFkanVzdGFibGVDb2xvcixcbiAgICAgICAgICAgICAgICBsaWdodG5lc3M6IGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1pbkNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogMCB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb250cmFzdChtaW5Db2xvciwgb3RoZXJDb2xvcikgPCBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW4gPSAwO1xuICAgICAgICBsZXQgbWF4ID0gbDtcbiAgICAgICAgbGV0IG1heENvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbCB9KTtcbiAgICAgICAgbGV0IGxhc3RNaW5Db2xvcjtcbiAgICAgICAgbGV0IGxhc3RNYXhDb2xvcjtcbiAgICAgICAgbGV0IGxUZW1wO1xuXG4gICAgICAgIHdoaWxlIChtaW5Db2xvciAhPT0gbGFzdE1pbkNvbG9yIHx8IG1heENvbG9yICE9PSBsYXN0TWF4Q29sb3IpIHtcbiAgICAgICAgICAgIGxhc3RNaW5Db2xvciA9IG1pbkNvbG9yO1xuICAgICAgICAgICAgbGFzdE1heENvbG9yID0gbWF4Q29sb3I7XG5cbiAgICAgICAgICAgIGxUZW1wID0gKG1pbiArIG1heCkgLyAyO1xuICAgICAgICAgICAgYWRqdXN0YWJsZUNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KGFkanVzdGFibGVDb2xvciwgb3RoZXJDb2xvcikgPCBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gbFRlbXA7XG4gICAgICAgICAgICAgICAgbWF4Q29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWluID0gbFRlbXA7XG4gICAgICAgICAgICAgICAgbWluQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xvcjogbWluQ29sb3IsXG4gICAgICAgICAgICBsaWdodG5lc3M6IG1pbixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRDbG9zZXN0QWNjZXNzaWJsZUxpZ2h0ZXJDb2xvcihcbiAgICAgICAgYWRqdXN0YWJsZUNvbG9yOiBzdHJpbmcsXG4gICAgICAgIG90aGVyQ29sb3I6IHN0cmluZyxcbiAgICAgICAgY29udHJhc3RSYXRpbzogbnVtYmVyXG4gICAgKTogSVBlcENsb3Nlc3RDb2xvciB7XG4gICAgICAgIGNvbnN0IHsgaCwgcywgbCB9ID0gdGhpcy5oZXgyaHNsKGFkanVzdGFibGVDb2xvcik7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA+PSBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzOiBsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IDEwMCB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb250cmFzdChtYXhDb2xvciwgb3RoZXJDb2xvcikgPCBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW4gPSBsO1xuICAgICAgICBsZXQgbWF4ID0gMTAwO1xuICAgICAgICBsZXQgbWluQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsIH0pO1xuICAgICAgICBsZXQgbGFzdE1pbkNvbG9yO1xuICAgICAgICBsZXQgbGFzdE1heENvbG9yO1xuICAgICAgICBsZXQgbFRlbXA7XG5cbiAgICAgICAgd2hpbGUgKG1pbkNvbG9yICE9PSBsYXN0TWluQ29sb3IgfHwgbWF4Q29sb3IgIT09IGxhc3RNYXhDb2xvcikge1xuICAgICAgICAgICAgbGFzdE1pbkNvbG9yID0gbWluQ29sb3I7XG4gICAgICAgICAgICBsYXN0TWF4Q29sb3IgPSBtYXhDb2xvcjtcblxuICAgICAgICAgICAgbFRlbXAgPSAobWluICsgbWF4KSAvIDI7XG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA8IGNvbnRyYXN0UmF0aW8pIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBsVGVtcDtcbiAgICAgICAgICAgICAgICBtaW5Db2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXggPSBsVGVtcDtcbiAgICAgICAgICAgICAgICBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbG9yOiBtYXhDb2xvcixcbiAgICAgICAgICAgIGxpZ2h0bmVzczogbWF4LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgaGV4IHN0cmluZyB0byA2IGRpZ2l0cyBoZXggc3RyaW5nLlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqL1xuICAgIGhleDJzaXhEaWdpdEhleChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciA9IHN0ci50cmltKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuU0lYX0RJR0lUX0hFWF9DT0xPUl9XSVRIX0hBU0hfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuU0lYX0RJR0lUX0hFWF9DT0xPUl9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBzdHI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5USFJFRV9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuICcjJyArIHN0clsxXSArIHN0clsxXSArIHN0clsyXSArIHN0clsyXSArIHN0clszXSArIHN0clszXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLlRIUkVFX0RJR0lUX0hFWF9DT0xPUl9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBzdHJbMF0gKyBzdHJbMF0gKyBzdHJbMV0gKyBzdHJbMV0gKyBzdHJbMl0gKyBzdHJbMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHJnYiBjb2xvciB0byA2IGRpZ2l0cyBoZXggc3RyaW5nLlxuICAgICAqIEBwYXJhbSBjb2xvciBUaGUgcmdiIGNvbG9yIHRvIGNvbnZlcnQuXG4gICAgICovXG4gICAgcmdiMnNpeERpZ2l0SGV4KGNvbG9yOiBJUGVwUmdiQ29sb3IpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbG9yLnIgPSBjb2xvci5yLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY29sb3IuZyA9IGNvbG9yLmcudG9TdHJpbmcoMTYpO1xuICAgICAgICBjb2xvci5iID0gY29sb3IuYi50b1N0cmluZygxNik7XG5cbiAgICAgICAgaWYgKGNvbG9yLnIubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb2xvci5yID0gJzAnICsgY29sb3IucjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2xvci5nLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29sb3IuZyA9ICcwJyArIGNvbG9yLmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuYi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbG9yLmIgPSAnMCcgKyBjb2xvci5iO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcjJyArIGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGhleCBzdHJpbmcgdG8gcmdiIGNvbG9yLlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIGhleCBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKi9cbiAgICBoZXgycmdiKHN0cjogc3RyaW5nKTogSVBlcFJnYkNvbG9yIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2l4RGlnaXRIZXggPSB0aGlzLmhleDJzaXhEaWdpdEhleChzdHIpO1xuXG4gICAgICAgIGlmIChzaXhEaWdpdEhleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcGFyc2VJbnQoc2l4RGlnaXRIZXguc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgICAgICAgIGc6IHBhcnNlSW50KHNpeERpZ2l0SGV4LnNsaWNlKDMsIDUpLCAxNiksXG4gICAgICAgICAgICBiOiBwYXJzZUludChzaXhEaWdpdEhleC5zbGljZSg1LCA3KSwgMTYpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJnYlN0cmluZzJoc2woc3RyOiBzdHJpbmcpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXAgPSBzdHIuaW5kZXhPZignLCcpID4gLTEgPyAnLCcgOiAnICc7XG4gICAgICAgIGNvbnN0IHJnYkFyciA9IHN0ci5zdWJzdHIoNCkuc3BsaXQoJyknKVswXS5zcGxpdChzZXApO1xuXG4gICAgICAgIGNvbnN0IHIgPSByZ2JBcnJbMF07XG4gICAgICAgIGNvbnN0IGcgPSByZ2JBcnJbMV0uc3Vic3RyKDAsIHJnYkFyclsxXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgYiA9IHJnYkFyclsyXS5zdWJzdHIoMCwgcmdiQXJyWzJdLmxlbmd0aCkudHJpbSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJnYjJoc2woeyByLCBnLCBiIH0pO1xuICAgIH1cblxuICAgIHJnYjJoc2woeyByLCBnLCBiIH06IElQZXBSZ2JDb2xvcik6IElQZXBIc2xDb2xvciB7XG4gICAgICAgIHIgLz0gMjU1O1xuICAgICAgICBnIC89IDI1NTtcbiAgICAgICAgYiAvPSAyNTU7XG5cbiAgICAgICAgLy8gRmluZCBncmVhdGVzdCBhbmQgc21hbGxlc3QgY2hhbm5lbCB2YWx1ZXNcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICBjb25zdCBjbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gY21heCAtIGNtaW47XG5cbiAgICAgICAgbGV0IGggPSAwO1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGxldCBsID0gMDtcblxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGNtYXggPT09IHIpIHtcbiAgICAgICAgICAgIGggPSAoKGcgLSBiKSAvIGRlbHRhKSAlIDY7XG4gICAgICAgIH0gZWxzZSBpZiAoY21heCA9PT0gZykge1xuICAgICAgICAgICAgaCA9IChiIC0gcikgLyBkZWx0YSArIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoID0gKHIgLSBnKSAvIGRlbHRhICsgNDtcbiAgICAgICAgfVxuXG4gICAgICAgIGggPSBNYXRoLnJvdW5kKGggKiA2MCk7XG5cbiAgICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgICAgICBoICs9IDM2MDtcbiAgICAgICAgfVxuXG4gICAgICAgIGwgPSAoY21heCArIGNtaW4pIC8gMjtcbiAgICAgICAgcyA9IGRlbHRhID09PSAwID8gMCA6IGRlbHRhIC8gKDEgLSBNYXRoLmFicygyICogbCAtIDEpKTtcbiAgICAgICAgcyA9ICsocyAqIDEwMCkudG9GaXhlZCgxKTtcbiAgICAgICAgbCA9ICsobCAqIDEwMCkudG9GaXhlZCgxKTtcblxuICAgICAgICByZXR1cm4geyBoLCBzLCBsIH07XG4gICAgfVxuXG4gICAgaHNsU3RyaW5nMmhzbChzdHI6IHN0cmluZyk6IElQZXBIc2xDb2xvciB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcCA9IHN0ci5pbmRleE9mKCcsJykgPiAtMSA/ICcsJyA6ICcgJztcbiAgICAgICAgY29uc3QgaHNsQXJyID0gc3RyLnN1YnN0cig0KS5zcGxpdCgnKScpWzBdLnNwbGl0KHNlcCk7XG5cbiAgICAgICAgbGV0IGg6IGFueSA9IGhzbEFyclswXTtcbiAgICAgICAgbGV0IHMgPSBoc2xBcnJbMV0uc3Vic3RyKDAsIGhzbEFyclsxXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbGV0IGwgPSBoc2xBcnJbMl0uc3Vic3RyKDAsIGhzbEFyclsyXS5sZW5ndGgpLnRyaW0oKTtcblxuICAgICAgICAvLyBTdHJpcCBsYWJlbCBhbmQgY29udmVydCB0byBkZWdyZWVzIChpZiBuZWNlc3NhcnkpXG4gICAgICAgIGlmIChoLmluZGV4T2YoJ2RlZycpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBoLnN1YnN0cigwLCBoLmxlbmd0aCAtIDMpO1xuICAgICAgICB9IGVsc2UgaWYgKGguaW5kZXhPZigncmFkJykgPiAtMSkge1xuICAgICAgICAgICAgaCA9IE1hdGgucm91bmQoaC5zdWJzdHIoMCwgaC5sZW5ndGggLSAzKSAqICgxODAgLyBNYXRoLlBJKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaC5pbmRleE9mKCd0dXJuJykgPiAtMSkge1xuICAgICAgICAgICAgaCA9IE1hdGgucm91bmQoaC5zdWJzdHIoMCwgaC5sZW5ndGggLSA0KSAqIDM2MCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBLZWVwIGh1ZSBmcmFjdGlvbiBvZiAzNjAgaWYgZW5kaW5nIHVwIG92ZXJcbiAgICAgICAgaWYgKGggPj0gMzYwKSB7XG4gICAgICAgICAgICBoICU9IDM2MDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgJVxuICAgICAgICBpZiAocy5pbmRleE9mKCclJykgPiAtMSkge1xuICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgvJS9nLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlICVcbiAgICAgICAgaWYgKGwuaW5kZXhPZignJScpID4gLTEpIHtcbiAgICAgICAgICAgIGwgPSBsLnJlcGxhY2UoLyUvZywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgaCwgcywgbCB9O1xuICAgIH1cblxuICAgIGhzbDJyZ2IoeyBoLCBzLCBsIH06IElQZXBIc2xDb2xvcik6IElQZXBSZ2JDb2xvciB7XG4gICAgICAgIGxldCByO1xuICAgICAgICBsZXQgZztcbiAgICAgICAgbGV0IGI7XG5cbiAgICAgICAgaWYgKCFpc0Zpbml0ZShoKSkge1xuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRmluaXRlKHMpKSB7XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNGaW5pdGUobCkpIHtcbiAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgICAgIGggPSA2IC0gKC1oICUgNik7XG4gICAgICAgIH1cblxuICAgICAgICBoICU9IDY7XG5cbiAgICAgICAgcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHMgLyAxMDApKTtcbiAgICAgICAgbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGwgLyAxMDApKTtcblxuICAgICAgICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbCAtIDEpKSAqIHM7XG4gICAgICAgIGNvbnN0IHggPSBjICogKDEgLSBNYXRoLmFicygoaCAlIDIpIC0gMSkpO1xuXG4gICAgICAgIGlmIChoIDwgMSkge1xuICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICBnID0geDtcbiAgICAgICAgICAgIGIgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAyKSB7XG4gICAgICAgICAgICByID0geDtcbiAgICAgICAgICAgIGcgPSBjO1xuICAgICAgICAgICAgYiA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA8IDMpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgZyA9IGM7XG4gICAgICAgICAgICBiID0geDtcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgNCkge1xuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICBnID0geDtcbiAgICAgICAgICAgIGIgPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCA1KSB7XG4gICAgICAgICAgICByID0geDtcbiAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgYiA9IGM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByID0gYztcbiAgICAgICAgICAgIGcgPSAwO1xuICAgICAgICAgICAgYiA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtID0gbCAtIGMgLyAyO1xuICAgICAgICByID0gTWF0aC5yb3VuZCgociArIG0pICogMjU1KTtcbiAgICAgICAgZyA9IE1hdGgucm91bmQoKGcgKyBtKSAqIDI1NSk7XG4gICAgICAgIGIgPSBNYXRoLnJvdW5kKChiICsgbSkgKiAyNTUpO1xuXG4gICAgICAgIHJldHVybiB7IHIsIGcsIGIgfTtcbiAgICB9XG5cbiAgICBoZXgyaHNsKHN0cjogc3RyaW5nKTogSVBlcEhzbENvbG9yIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2l4RGlnaXRIZXggPSB0aGlzLmhleDJzaXhEaWdpdEhleChzdHIpO1xuXG4gICAgICAgIGlmIChzaXhEaWdpdEhleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZ2IgPSB0aGlzLmhleDJyZ2Ioc2l4RGlnaXRIZXgpO1xuXG4gICAgICAgIGlmIChyZ2IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmdiMmhzbChyZ2IpO1xuICAgIH1cblxuICAgIGhzbDJoZXgoaHNsOiBJUGVwSHNsQ29sb3IpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWhzbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZ2IgPSB0aGlzLmhzbDJyZ2IoaHNsKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZ2Iyc2l4RGlnaXRIZXgocmdiKTtcbiAgICB9XG5cbiAgICByZWxhdGl2ZUx1bWluYW5jZSh7IHIsIGcsIGIgfTogSVBlcFJnYkNvbG9yKTogbnVtYmVyIHtcbiAgICAgICAgW3IsIGcsIGJdID0gW3IsIGcsIGJdLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYyA9IGMgLyAyNTU7XG5cbiAgICAgICAgICAgIGlmIChjIDw9IDAuMDM5MjgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYyAvIDEyLjkyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5wb3coKGMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbiAgICB9XG5cbiAgICBmaW5kQ2xvc2VzdEFjY2Vzc2libGVDb2xvcihcbiAgICAgICAgYWRqdXN0YWJsZUNvbG9yOiBzdHJpbmcsXG4gICAgICAgIG90aGVyQ29sb3I6IHN0cmluZyxcbiAgICAgICAgY29udHJhc3RSYXRpbzogbnVtYmVyXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY2xvc2VzdERhcmtlckNvbG9yOiBJUGVwQ2xvc2VzdENvbG9yID0gdGhpcy5maW5kQ2xvc2VzdEFjY2Vzc2libGVEYXJrZXJDb2xvcihcbiAgICAgICAgICAgIGFkanVzdGFibGVDb2xvcixcbiAgICAgICAgICAgIG90aGVyQ29sb3IsXG4gICAgICAgICAgICBjb250cmFzdFJhdGlvXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3RMaWdodGVyQ29sb3I6IElQZXBDbG9zZXN0Q29sb3IgPSB0aGlzLmZpbmRDbG9zZXN0QWNjZXNzaWJsZUxpZ2h0ZXJDb2xvcihcbiAgICAgICAgICAgIGFkanVzdGFibGVDb2xvcixcbiAgICAgICAgICAgIG90aGVyQ29sb3IsXG4gICAgICAgICAgICBjb250cmFzdFJhdGlvXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNsb3Nlc3REYXJrZXJDb2xvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RMaWdodGVyQ29sb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RMaWdodGVyQ29sb3IuY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VzdExpZ2h0ZXJDb2xvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3REYXJrZXJDb2xvci5jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgbCB9ID0gdGhpcy5oZXgyaHNsKGFkanVzdGFibGVDb2xvcik7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2xvc2VzdExpZ2h0ZXJDb2xvci5saWdodG5lc3MgLSBsIDxcbiAgICAgICAgICAgIGwgLSBjbG9zZXN0RGFya2VyQ29sb3IubGlnaHRuZXNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RMaWdodGVyQ29sb3IuY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvc2VzdERhcmtlckNvbG9yLmNvbG9yO1xuICAgIH1cblxuICAgIGNvbnZlcnRIc2xUb1N0cmluZ0hzbChoc2w6IElQZXBIc2xDb2xvcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnaHNsKCcgK1xuICAgICAgICAgICAgKGhzbC5oIDwgMCA/IGhzbC5oICsgMzYwIDogaHNsLmgpICtcbiAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgaHNsLnMgK1xuICAgICAgICAgICAgJyUsICcgK1xuICAgICAgICAgICAgaHNsLmwgK1xuICAgICAgICAgICAgJyUpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGxpZ2h0T3JEYXJrKGNvbG9yOiBhbnkpOiAnbGlnaHQnIHwgJ2RhcmsnIHtcbiAgICAgICAgbGV0IHIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBnID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYiA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBDaGVjayB0aGUgZm9ybWF0IG9mIHRoZSBjb2xvciwgSEVYIG9yIFJHQj9cbiAgICAgICAgaWYgKGNvbG9yLm1hdGNoKC9ecmdiLykpIHtcbiAgICAgICAgICAgIC8vIElmIEhFWCAtLT4gc3RvcmUgdGhlIHJlZCwgZ3JlZW4sIGJsdWUgdmFsdWVzIGluIHNlcGFyYXRlIHZhcmlhYmxlc1xuICAgICAgICAgICAgY29sb3IgPSBjb2xvci5tYXRjaCgvXnJnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSg/OixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pKT9cXCkkLyk7XG4gICAgICBcbiAgICAgICAgICAgIHIgPSBjb2xvclsxXTtcbiAgICAgICAgICAgIGcgPSBjb2xvclsyXTtcbiAgICAgICAgICAgIGIgPSBjb2xvclszXTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBSR0IgLS0+IENvbnZlcnQgaXQgdG8gSEVYOiBodHRwOi8vZ2lzdC5naXRodWIuY29tLzk4MzY2MVxuICAgICAgICAgICAgY29sb3IgPSArKFwiMHhcIiArIGNvbG9yLnNsaWNlKDEpLnJlcGxhY2UoIFxuICAgICAgICAgICAgICAgIGNvbG9yLmxlbmd0aCA8IDUgJiYgLy4vZywgJyQmJCYnXG4gICAgICAgICAgICApKTtcbiAgICAgICAgXG4gICAgICAgICAgICByID0gY29sb3IgPj4gMTY7XG4gICAgICAgICAgICBnID0gY29sb3IgPj4gOCAmIDI1NTtcbiAgICAgICAgICAgIGIgPSBjb2xvciAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgIC8vIEhTUCAoSGlnaGx5IFNlbnNpdGl2ZSBQb28pIGVxdWF0aW9uIGZyb20gaHR0cDovL2FsaWVucnlkZXJmbGV4LmNvbS9oc3AuaHRtbFxuICAgICAgICBjb25zdCBoc3AgPSBNYXRoLnNxcnQoXG4gICAgICAgICAgICAwLjI5OSAqIChyICogcikgK1xuICAgICAgICAgICAgMC41ODcgKiAoZyAqIGcpICtcbiAgICAgICAgICAgIDAuMTE0ICogKGIgKiBiKVxuICAgICAgICApO1xuICAgICAgXG4gICAgICAgIC8vIFVzaW5nIHRoZSBIU1AgdmFsdWUsIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb2xvciBpcyBsaWdodCBvciBkYXJrXG4gICAgICAgIHJldHVybiAoaHNwID4gMTI3LjUpID8gJ2xpZ2h0JyA6ICdkYXJrJztcbiAgICB9XG59XG4iXX0=