application-sidebar 1.0.0
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 +24 -0
- package/application-sidebar.theme.scss +44 -0
- package/assets/logos/Intentwise.svg +11 -0
- package/assets/logos/ProfitlogiQ_logo.png +0 -0
- package/assets/logos/bmc_logo.png +0 -0
- package/assets/logos/intentwise_logo.png +0 -0
- package/assets/logos/krooga_logo.png +0 -0
- package/assets/logos/opt_logo.png +0 -0
- package/assets/logos/optivations_logo.png +0 -0
- package/assets/logos/upstart_logo.png +0 -0
- package/assets/sidemenu-icons/Perf_Diagnostics_Detail.svg +15 -0
- package/assets/sidemenu-icons/Performance_Diagnostics.svg +12 -0
- package/assets/sidemenu-icons/account_management.svg +15 -0
- package/assets/sidemenu-icons/asin_overview.svg +18 -0
- package/assets/sidemenu-icons/audience.svg +22 -0
- package/assets/sidemenu-icons/auto_targeting.svg +16 -0
- package/assets/sidemenu-icons/automated_rule.svg +17 -0
- package/assets/sidemenu-icons/bookmark-archive.svg +15 -0
- package/assets/sidemenu-icons/calendar.svg +1 -0
- package/assets/sidemenu-icons/campaign_placement.svg +16 -0
- package/assets/sidemenu-icons/campaign_report.svg +13 -0
- package/assets/sidemenu-icons/cardboard-box.svg +13 -0
- package/assets/sidemenu-icons/category_reporting.svg +14 -0
- package/assets/sidemenu-icons/coins.svg +24 -0
- package/assets/sidemenu-icons/compettive_ad_tracking.svg +17 -0
- package/assets/sidemenu-icons/configuration-5968_94f8832d-fd0a-4001-9bf0-c5820072ab85.svg +16 -0
- package/assets/sidemenu-icons/creatives.svg +18 -0
- package/assets/sidemenu-icons/demand_forcasting.svg +27 -0
- package/assets/sidemenu-icons/document-error.svg +17 -0
- package/assets/sidemenu-icons/download-40586C.svg +1 -0
- package/assets/sidemenu-icons/favorite-window.svg +19 -0
- package/assets/sidemenu-icons/file-explorer.svg +12 -0
- package/assets/sidemenu-icons/help-circle.svg +1 -0
- package/assets/sidemenu-icons/help-icon.svg +1 -0
- package/assets/sidemenu-icons/help_icon.png +0 -0
- package/assets/sidemenu-icons/help_icon_white.png +0 -0
- package/assets/sidemenu-icons/high_level_metrics.svg +20 -0
- package/assets/sidemenu-icons/horizontal-mixer-158_fe655cc6-eb7e-4e44-af0f-0ce0830c9433.svg +19 -0
- package/assets/sidemenu-icons/inventory_forecast.svg +13 -0
- package/assets/sidemenu-icons/keyword_suggestion.svg +16 -0
- package/assets/sidemenu-icons/keywords.svg +18 -0
- package/assets/sidemenu-icons/line-item.svg +17 -0
- package/assets/sidemenu-icons/management.svg +14 -0
- package/assets/sidemenu-icons/maximize-40586C.svg +1 -0
- package/assets/sidemenu-icons/maximize.svg +1 -0
- package/assets/sidemenu-icons/mental-health.svg +16 -0
- package/assets/sidemenu-icons/minimize-40586C.svg +1 -0
- package/assets/sidemenu-icons/minimize.svg +1 -0
- package/assets/sidemenu-icons/new_product.svg +11 -0
- package/assets/sidemenu-icons/orders.svg +15 -0
- package/assets/sidemenu-icons/organic_ranking.svg +17 -0
- package/assets/sidemenu-icons/placement.svg +14 -0
- package/assets/sidemenu-icons/portfolio-grid.svg +17 -0
- package/assets/sidemenu-icons/pos_and_ams.svg +17 -0
- package/assets/sidemenu-icons/price-tag.svg +14 -0
- package/assets/sidemenu-icons/prime_day.svg +16 -0
- package/assets/sidemenu-icons/product_asin.svg +21 -0
- package/assets/sidemenu-icons/product_content.svg +13 -0
- package/assets/sidemenu-icons/product_overview_download.svg +15 -0
- package/assets/sidemenu-icons/purchase-order.svg +15 -0
- package/assets/sidemenu-icons/quit.svg +12 -0
- package/assets/sidemenu-icons/radar-signal.svg +15 -0
- package/assets/sidemenu-icons/report-download.svg +15 -0
- package/assets/sidemenu-icons/report.svg +18 -0
- package/assets/sidemenu-icons/ring-binders-3503_6f429b0c-3931-476a-b65e-ce5a4b9249de.svg +25 -0
- package/assets/sidemenu-icons/sales_overview.svg +19 -0
- package/assets/sidemenu-icons/sb_search_terms.svg +22 -0
- package/assets/sidemenu-icons/sc_order_report.svg +18 -0
- package/assets/sidemenu-icons/schedule_icon.png +0 -0
- package/assets/sidemenu-icons/search-place.svg +15 -0
- package/assets/sidemenu-icons/setting.svg +12 -0
- package/assets/sidemenu-icons/settings-2180_735e6b4c-49a9-4407-9ca1-5078e3c6eb1b.svg +20 -0
- package/assets/sidemenu-icons/signout_icon.png +0 -0
- package/assets/sidemenu-icons/sorting-149_8150e98a-647b-477d-a382-2ff46463a1fd.svg +16 -0
- package/assets/sidemenu-icons/sp_ad-groups.svg +16 -0
- package/assets/sidemenu-icons/sreenath_pic.jpg +0 -0
- package/assets/sidemenu-icons/targeting.svg +14 -0
- package/assets/sidemenu-icons/user-icon.svg +1 -0
- package/assets/sidemenu-icons/user.svg +1 -0
- package/assets/sidemenu-icons/user_icon.png +0 -0
- package/assets/sidemenu-icons/user_icon_white.png +0 -0
- package/assets/sidemenu-icons/vendor_charge_backs.svg +12 -0
- package/assets/sidemenu-icons/vendor_replenishment_code.svg +16 -0
- package/assets/sidemenu-icons/vendor_sales_alert.svg +20 -0
- package/assets/sidemenu-icons/vendor_sales_overivew.svg +14 -0
- package/assets/sidemenu-icons/video-icon.svg +1 -0
- package/assets/sidemenu-icons/video.svg +1 -0
- package/assets/sidemenu-icons/video_icon.png +0 -0
- package/assets/sidemenu-icons/video_icon_white.png +0 -0
- package/assets/sidemenu-icons/x-circle.svg +1 -0
- package/esm2022/application-sidebar.mjs +5 -0
- package/esm2022/lib/app-details.mjs +2 -0
- package/esm2022/lib/application-sidebar.component.mjs +473 -0
- package/esm2022/lib/application-sidebar.module.mjs +152 -0
- package/esm2022/lib/constants.mjs +1016 -0
- package/esm2022/lib/nav-menu-item.mjs +2 -0
- package/esm2022/lib/nav-menu.directive.mjs +32 -0
- package/esm2022/lib/nav-menus/nav-menus.component.mjs +264 -0
- package/esm2022/lib/services/application-sidebar.service.mjs +627 -0
- package/esm2022/lib/services/rest-api.services.mjs +98 -0
- package/esm2022/lib/services/url-context.service.mjs +104 -0
- package/esm2022/lib/translations/translations-en.mjs +33 -0
- package/esm2022/lib/translations/translations-ja.mjs +33 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/application-sidebar.mjs +2778 -0
- package/fesm2022/application-sidebar.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/app-details.d.ts +13 -0
- package/lib/application-sidebar.component.d.ts +63 -0
- package/lib/application-sidebar.module.d.ts +44 -0
- package/lib/constants.d.ts +496 -0
- package/lib/nav-menu-item.d.ts +32 -0
- package/lib/nav-menu.directive.d.ts +17 -0
- package/lib/nav-menus/nav-menus.component.d.ts +41 -0
- package/lib/services/application-sidebar.service.d.ts +97 -0
- package/lib/services/rest-api.services.d.ts +22 -0
- package/lib/services/url-context.service.d.ts +15 -0
- package/lib/translations/translations-en.d.ts +32 -0
- package/lib/translations/translations-ja.d.ts +32 -0
- package/package.json +72 -0
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE5hdk1lbnVJdGVtIHtcbiAgICBpZDpzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6c3RyaW5nO1xuICAgIGxldmVsPzpzdHJpbmc7XG4gICAgbGluazogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgc3ltYm9sPzpzdHJpbmc7XG4gICAgYmFkZ2U/OnN0cmluZztcbiAgICBjb3VudEtleT86c3RyaW5nO1xuICAgIHJlY0NvdW50PzpzdHJpbmc7XG4gICAgcm91dGU6IHN0cmluZztcbiAgICBleHRlcm5hbF9saW5rPzpzdHJpbmc7XG4gICAgYWNjb3VudF90eXBlPzphbnlbXTtcbiAgICB2aXNpYmlsaXR5X3JvbGVzPzphbnlbXTtcbiAgICBhY2NvdW50X2lkcz86YW55W10sXG4gICAgYWNjb3VudF9pZHNfbm90X2luPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzX25vdF9pbj86YW55W10sXG4gICAgb3JnYW5pemF0aW9uX3NldHRpbmc/OmFueVtdO1xuICAgIG9yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbj86YW55W10sXG4gICAgc3Vic2NyaXB0aW9uX3R5cGVzPzphbnlbXTtcbiAgICBjYW1wYWlnbl90eXBlcz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0PzphbnlbXTtcbiAgICBub3RfYWNjb3VudF9uYW1lPzphbnlbXTtcbiAgICB1c2VyX2VtYWlscz86YW55W107XG4gICAgc3R5bGVfY2xhc3Nlcz86c3RyaW5nO1xuICAgIGRlZmF1bHR1cmw/OnN0cmluZztcbiAgICBtYXRjaFJvdXRlcz86YW55W107XG4gICAgdmlzaWJpbGl0eV9yb2xlc19ub3RfaW4/OmFueVtdO1xuICB9XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Directive, ElementRef, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class OffsetTopDirective {
|
|
4
|
+
_el;
|
|
5
|
+
constructor(_el) {
|
|
6
|
+
this._el = _el;
|
|
7
|
+
}
|
|
8
|
+
isActiveItem;
|
|
9
|
+
get offsetTop() { return this._el.nativeElement.offsetTop; }
|
|
10
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OffsetTopDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
11
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: OffsetTopDirective, selector: "[appOffsetTop]", inputs: { isActiveItem: "isActiveItem" }, ngImport: i0 });
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OffsetTopDirective, decorators: [{
|
|
14
|
+
type: Directive,
|
|
15
|
+
args: [{ selector: '[appOffsetTop]' }]
|
|
16
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { isActiveItem: [{
|
|
17
|
+
type: Input
|
|
18
|
+
}] } });
|
|
19
|
+
export class ScrollableDirective {
|
|
20
|
+
_el;
|
|
21
|
+
constructor(_el) {
|
|
22
|
+
this._el = _el;
|
|
23
|
+
}
|
|
24
|
+
set scrollTop(value) { this._el.nativeElement.scrollTop = value; }
|
|
25
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScrollableDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
26
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ScrollableDirective, selector: "[appScrollable]", ngImport: i0 });
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScrollableDirective, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{ selector: '[appScrollable]' }]
|
|
31
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL25hdi1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzdELE1BQU0sT0FBTyxrQkFBa0I7SUFDVDtJQUFwQixZQUFvQixHQUFlO1FBQWYsUUFBRyxHQUFILEdBQUcsQ0FBWTtJQUFJLENBQUM7SUFDL0IsWUFBWSxDQUFVO0lBQy9CLElBQUksU0FBUyxLQUFhLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzsySEFIekQsa0JBQWtCOytHQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUM7aUdBRzdCLFlBQVk7c0JBQXBCLEtBQUs7O0FBS1IsTUFBTSxPQUFPLG1CQUFtQjtJQUNWO0lBQXBCLFlBQW9CLEdBQWU7UUFBZixRQUFHLEdBQUgsR0FBRyxDQUFZO0lBQUcsQ0FBQztJQUN2QyxJQUFJLFNBQVMsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7MkhBRi9ELG1CQUFtQjsrR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixTQUFTO21CQUFDLEVBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbYXBwT2Zmc2V0VG9wXSd9KVxuZXhwb3J0IGNsYXNzIE9mZnNldFRvcERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsOiBFbGVtZW50UmVmKSB7IH1cbiAgQElucHV0KCkgaXNBY3RpdmVJdGVtOiBib29sZWFuO1xuICBnZXQgb2Zmc2V0VG9wKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDsgfVxufVxuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1thcHBTY3JvbGxhYmxlXSd9KVxuZXhwb3J0IGNsYXNzIFNjcm9sbGFibGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbDogRWxlbWVudFJlZikge31cbiAgc2V0IHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdmFsdWU7IH1cbn0iXX0=
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
3
|
+
import { ApplicationSidebarService } from '../services/application-sidebar.service';
|
|
4
|
+
import { UrlContextService } from '../services/url-context.service';
|
|
5
|
+
import { CookieService } from 'ngx-cookie-service';
|
|
6
|
+
import { MatMenuTrigger } from '@angular/material/menu';
|
|
7
|
+
import { EN_LABELS } from '../translations/translations-en';
|
|
8
|
+
import { JA_LABELS } from '../translations/translations-ja';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../services/application-sidebar.service";
|
|
11
|
+
import * as i2 from "@angular/router";
|
|
12
|
+
import * as i3 from "../services/url-context.service";
|
|
13
|
+
import * as i4 from "ngx-cookie-service";
|
|
14
|
+
import * as i5 from "@angular/material/menu";
|
|
15
|
+
import * as i6 from "@angular/material/list";
|
|
16
|
+
import * as i7 from "@angular/material/divider";
|
|
17
|
+
import * as i8 from "@angular/material/core";
|
|
18
|
+
import * as i9 from "@angular/common";
|
|
19
|
+
import * as i10 from "@angular/flex-layout/extended";
|
|
20
|
+
import * as i11 from "../nav-menu.directive";
|
|
21
|
+
export class NavMenusComponent {
|
|
22
|
+
ApplicationSidebarService;
|
|
23
|
+
router;
|
|
24
|
+
activatedRoute;
|
|
25
|
+
urlContextService;
|
|
26
|
+
cookie;
|
|
27
|
+
menuClicked = new EventEmitter();
|
|
28
|
+
item;
|
|
29
|
+
applicationId;
|
|
30
|
+
parentMenuId;
|
|
31
|
+
parentPanelId;
|
|
32
|
+
isActiveItem;
|
|
33
|
+
expanded;
|
|
34
|
+
queryParams;
|
|
35
|
+
contextMenu;
|
|
36
|
+
contextMenuPosition = { x: '0px', y: '0px' };
|
|
37
|
+
translation;
|
|
38
|
+
constructor(ApplicationSidebarService, router, activatedRoute, urlContextService, cookie) {
|
|
39
|
+
this.ApplicationSidebarService = ApplicationSidebarService;
|
|
40
|
+
this.router = router;
|
|
41
|
+
this.activatedRoute = activatedRoute;
|
|
42
|
+
this.urlContextService = urlContextService;
|
|
43
|
+
this.cookie = cookie;
|
|
44
|
+
this.activatedRoute.queryParams.subscribe(params => {
|
|
45
|
+
this.queryParams = Object.assign({}, params);
|
|
46
|
+
});
|
|
47
|
+
if (this.cookie.get('selectedLanguage') && this.cookie.get('selectedLanguage') == 'ja') {
|
|
48
|
+
this.translation = JA_LABELS;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.translation = EN_LABELS;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
ngOnInit() {
|
|
55
|
+
// @HostBinding('attr.aria-expanded') ariaExpanded = this.expanded;
|
|
56
|
+
}
|
|
57
|
+
hasIcon(item) {
|
|
58
|
+
return (item.icon != undefined && item.icon != '');
|
|
59
|
+
}
|
|
60
|
+
getSpecifiedValue(key) {
|
|
61
|
+
return this.ApplicationSidebarService.fetchKeyValue(key);
|
|
62
|
+
}
|
|
63
|
+
onSelectMenu(event, listMenu, appId) {
|
|
64
|
+
var promise = new Promise(async (resolve, reject) => {
|
|
65
|
+
console.log('appId', this.parentPanelId, this.applicationId);
|
|
66
|
+
// on shift+click open url in new tab along with context params
|
|
67
|
+
if (this.parentMenuId === 'app_global_settings' || appId === 'app_global_settings') {
|
|
68
|
+
if (listMenu.id === 'ads_account_mgmt') {
|
|
69
|
+
const url = listMenu.link;
|
|
70
|
+
if (this.applicationId == "ads_amazon_content") {
|
|
71
|
+
this.applicationId = this.ApplicationSidebarService.getApplicationID();
|
|
72
|
+
}
|
|
73
|
+
if (this.urlContextService.validateKeyStroke(event)) {
|
|
74
|
+
this.openInNewTab(url, false, { appId: this.applicationId });
|
|
75
|
+
resolve();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.showLoader();
|
|
79
|
+
this.ApplicationSidebarService.getHostOriginAndNavigate(url, { appId: this.applicationId });
|
|
80
|
+
resolve();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (listMenu.route != '') {
|
|
85
|
+
if (this.urlContextService.validateKeyStroke(event)) {
|
|
86
|
+
this.openInNewTab(listMenu.route, true);
|
|
87
|
+
resolve();
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log("Query Params = ", this.queryParams.length);
|
|
91
|
+
this.router.navigate([listMenu.route]);
|
|
92
|
+
this.menuClicked.emit({ activePanel: this.parentPanelId });
|
|
93
|
+
resolve();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
alert('no route to navigate');
|
|
98
|
+
resolve();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else if (listMenu.defaulturl) {
|
|
103
|
+
const url = listMenu.defaulturl;
|
|
104
|
+
if (this.urlContextService.validateKeyStroke(event)) {
|
|
105
|
+
this.openInNewTab(url, false);
|
|
106
|
+
resolve();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.showLoader();
|
|
110
|
+
this.ApplicationSidebarService.getHostOriginAndNavigate(url);
|
|
111
|
+
resolve();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
if (listMenu.external_link && listMenu.external_link != '') {
|
|
116
|
+
window.open(`${listMenu.external_link}`, '_blank');
|
|
117
|
+
resolve();
|
|
118
|
+
}
|
|
119
|
+
if ((this.parentMenuId.indexOf(this.applicationId) >= 0 && !appId) || (appId && appId.indexOf(this.applicationId) >= 0)) {
|
|
120
|
+
if (listMenu.route != '') {
|
|
121
|
+
if (this.urlContextService.validateKeyStroke(event)) {
|
|
122
|
+
this.openInNewTab(listMenu.route, true);
|
|
123
|
+
resolve();
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.log("Length = ", this.queryParams.length);
|
|
127
|
+
if (Object.keys(this.queryParams).length != 0) {
|
|
128
|
+
await this.router.navigate([listMenu.route], { queryParams: this.queryParams });
|
|
129
|
+
this.menuClicked.emit({ activePanel: this.parentPanelId });
|
|
130
|
+
resolve();
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
await this.router.navigate([listMenu.route]);
|
|
134
|
+
this.menuClicked.emit({ activePanel: this.parentPanelId });
|
|
135
|
+
resolve();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
alert('no route to navigate');
|
|
141
|
+
resolve();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
const url = listMenu.link;
|
|
146
|
+
if (this.urlContextService.validateKeyStroke(event)) {
|
|
147
|
+
this.openInNewTab(url, false);
|
|
148
|
+
resolve();
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.showLoader();
|
|
152
|
+
this.ApplicationSidebarService.getHostOriginAndNavigate(url);
|
|
153
|
+
resolve();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
onContextMenu(event, item) {
|
|
160
|
+
event.preventDefault();
|
|
161
|
+
this.contextMenuPosition.x = event.clientX + 'px';
|
|
162
|
+
this.contextMenuPosition.y = event.clientY + 'px';
|
|
163
|
+
this.contextMenu.menuData = { 'item': item };
|
|
164
|
+
this.contextMenu.menu.focusFirstItem('mouse');
|
|
165
|
+
this.contextMenu.openMenu();
|
|
166
|
+
}
|
|
167
|
+
onContextMenuAction(item) {
|
|
168
|
+
if (this.parentMenuId === 'app_global_settings') {
|
|
169
|
+
if (item.id === 'ads_account_mgmt') {
|
|
170
|
+
const url = item.link;
|
|
171
|
+
this.openInNewTab(url, false, { appId: this.applicationId });
|
|
172
|
+
}
|
|
173
|
+
else if (item.route != '') {
|
|
174
|
+
this.openInNewTab(item.route, true);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
if (item.external_link && item.external_link != '') {
|
|
179
|
+
window.open(`${item.external_link}`, '_blank');
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
else if (this.parentMenuId.indexOf(this.applicationId) >= 0) {
|
|
183
|
+
if (item.route != '') {
|
|
184
|
+
this.openInNewTab(item.route, true);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const url = item.link;
|
|
189
|
+
this.openInNewTab(url, false);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
openInNewTab(link, isRouterLink, applicationId = undefined) {
|
|
194
|
+
let dateTitle = this.fetchDateRange();
|
|
195
|
+
let dateRangeVal = this.urlContextService.setDateRangeUrlVal(dateTitle);
|
|
196
|
+
if (this.ApplicationSidebarService.appDetails.currentAccount == undefined) {
|
|
197
|
+
let queryParams = {
|
|
198
|
+
oid: this.ApplicationSidebarService.appDetails.currentOrganization.organizationId,
|
|
199
|
+
dr: dateRangeVal,
|
|
200
|
+
};
|
|
201
|
+
if (applicationId) {
|
|
202
|
+
queryParams = { ...queryParams, ...applicationId };
|
|
203
|
+
}
|
|
204
|
+
this.urlContextService.setUrlAndOpenTab(link, queryParams, isRouterLink);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
let queryParams = {
|
|
209
|
+
aid: this.ApplicationSidebarService.appDetails.currentAccount.amsAccountId,
|
|
210
|
+
bid: this.ApplicationSidebarService.appDetails.currentAccount.businessGroupId,
|
|
211
|
+
oid: this.ApplicationSidebarService.appDetails.currentAccount.organizationId,
|
|
212
|
+
dr: dateRangeVal,
|
|
213
|
+
};
|
|
214
|
+
if (applicationId) {
|
|
215
|
+
queryParams = { ...queryParams, ...applicationId };
|
|
216
|
+
}
|
|
217
|
+
this.urlContextService.setUrlAndOpenTab(link, queryParams, isRouterLink);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
fetchDateRange() {
|
|
222
|
+
if (this.queryParams.hasOwnProperty('tid') && this.queryParams.hasOwnProperty('dr')) {
|
|
223
|
+
return this.queryParams['dr'];
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
const loggedInUser = JSON.parse(this.cookie.get('loggedInUser'));
|
|
227
|
+
console.log('Logged = ', loggedInUser);
|
|
228
|
+
return loggedInUser.dateRange;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
showLoader() {
|
|
232
|
+
let loader_div = document.getElementById('loader_sov');
|
|
233
|
+
if (loader_div) {
|
|
234
|
+
loader_div.style.display = "block";
|
|
235
|
+
}
|
|
236
|
+
setTimeout(function () {
|
|
237
|
+
if (loader_div) {
|
|
238
|
+
loader_div.style.display = "none";
|
|
239
|
+
}
|
|
240
|
+
}, 5000);
|
|
241
|
+
}
|
|
242
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavMenusComponent, deps: [{ token: i1.ApplicationSidebarService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UrlContextService }, { token: i4.CookieService }], target: i0.ɵɵFactoryTarget.Component });
|
|
243
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NavMenusComponent, selector: "lnc-nav-menus", inputs: { item: "item", applicationId: "applicationId", parentMenuId: "parentMenuId", parentPanelId: "parentPanelId", isActiveItem: "isActiveItem" }, outputs: { menuClicked: "menuClicked" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'ads_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text font-color-black navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{translation[item.name] ? translation[item.name] : item.name}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:13px!important;line-height:36px;color:#202b37}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#fdeeec;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"], dependencies: [{ kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i8.MatLine, selector: "[mat-line], [matLine]" }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i11.OffsetTopDirective, selector: "[appOffsetTop]", inputs: ["isActiveItem"] }] });
|
|
244
|
+
}
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavMenusComponent, decorators: [{
|
|
246
|
+
type: Component,
|
|
247
|
+
args: [{ selector: 'lnc-nav-menus', template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'ads_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text font-color-black navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{translation[item.name] ? translation[item.name] : item.name}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:13px!important;line-height:36px;color:#202b37}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#fdeeec;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"] }]
|
|
248
|
+
}], ctorParameters: function () { return [{ type: i1.ApplicationSidebarService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.UrlContextService }, { type: i4.CookieService }]; }, propDecorators: { menuClicked: [{
|
|
249
|
+
type: Output
|
|
250
|
+
}], item: [{
|
|
251
|
+
type: Input
|
|
252
|
+
}], applicationId: [{
|
|
253
|
+
type: Input
|
|
254
|
+
}], parentMenuId: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], parentPanelId: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], isActiveItem: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], contextMenu: [{
|
|
261
|
+
type: ViewChild,
|
|
262
|
+
args: [MatMenuTrigger]
|
|
263
|
+
}] } });
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTJCLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPNUQsTUFBTSxPQUFPLGlCQUFpQjtJQWlCVDtJQUErRDtJQUF1QjtJQUFzQztJQUE2QztJQWhCbEwsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDMUMsSUFBSSxDQUFjO0lBQ2xCLGFBQWEsQ0FBUTtJQUNyQixZQUFZLENBQVE7SUFDcEIsYUFBYSxDQUFRO0lBQ3JCLFlBQVksQ0FBUTtJQUM3QixRQUFRLENBQVU7SUFFbEIsV0FBVyxDQUFNO0lBRWpCLFdBQVcsQ0FBaUI7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ImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2TWVudUl0ZW0gfSBmcm9tICcuLi9uYXYtbWVudS1pdGVtJztcbmltcG9ydCB7Um91dGVyLEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi1zaWRlYmFyLnNlcnZpY2UnXG5pbXBvcnQgeyBVcmxDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VybC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgRU5fTEFCRUxTIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy1lbic7XG5pbXBvcnQgeyBKQV9MQUJFTFMgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLWphJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbG5jLW5hdi1tZW51cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYtbWVudXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXYtbWVudXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZNZW51c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBtZW51Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBASW5wdXQoKSBpdGVtOiBOYXZNZW51SXRlbTtcbiAgQElucHV0KCkgYXBwbGljYXRpb25JZDpzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmVudE1lbnVJZDpzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmVudFBhbmVsSWQ6c3RyaW5nO1xuICBASW5wdXQoKSBpc0FjdGl2ZUl0ZW06Ym9vbGVhblxuICBleHBhbmRlZDogYm9vbGVhbjtcblxuICBxdWVyeVBhcmFtczogYW55O1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKVxuICBjb250ZXh0TWVudTogTWF0TWVudVRyaWdnZXI7XG5cbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogJzBweCcsIHk6ICcwcHgnIH07XG5cbiAgdHJhbnNsYXRpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgQXBwbGljYXRpb25TaWRlYmFyU2VydmljZTogQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSAsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIscHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxwcml2YXRlIHVybENvbnRleHRTZXJ2aWNlOiBVcmxDb250ZXh0U2VydmljZSxwcml2YXRlIGNvb2tpZTogQ29va2llU2VydmljZSxcbiAgICApIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyk7XG4gICAgfSk7XG4gICAgaWYodGhpcy5jb29raWUuZ2V0KCdzZWxlY3RlZExhbmd1YWdlJykgJiYgdGhpcy5jb29raWUuZ2V0KCdzZWxlY3RlZExhbmd1YWdlJykgPT0gJ2phJykge1xuICAgICAgdGhpcy50cmFuc2xhdGlvbiA9IEpBX0xBQkVMUztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2xhdGlvbiA9IEVOX0xBQkVMUztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpIGFyaWFFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gIH1cblxuICBwdWJsaWMgaGFzSWNvbihpdGVtOk5hdk1lbnVJdGVtKXtcbiAgICByZXR1cm4gKGl0ZW0uaWNvbiAhPSB1bmRlZmluZWQgJiYgaXRlbS5pY29uICE9ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTcGVjaWZpZWRWYWx1ZShrZXk6c3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlLmZldGNoS2V5VmFsdWUoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdE1lbnUoZXZlbnQ6YW55LGxpc3RNZW51Ok5hdk1lbnVJdGVtLCBhcHBJZD86YW55KSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnYXBwSWQnICwgdGhpcy5wYXJlbnRQYW5lbElkICwgdGhpcy5hcHBsaWNhdGlvbklkKTtcbiAgICAgIC8vIG9uIHNoaWZ0K2NsaWNrIG9wZW4gdXJsIGluIG5ldyB0YWIgYWxvbmcgd2l0aCBjb250ZXh0IHBhcmFtc1xuICAgICAgaWYodGhpcy5wYXJlbnRNZW51SWQgPT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyB8fCBhcHBJZCA9PT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnKXtcbiAgICAgICAgaWYobGlzdE1lbnUuaWQgPT09ICdhZHNfYWNjb3VudF9tZ210Jyl7XG4gICAgICAgICAgY29uc3QgdXJsID0gbGlzdE1lbnUubGluaztcbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbklkID09IFwiYWRzX2FtYXpvbl9jb250ZW50XCIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5nZXRBcHBsaWNhdGlvbklEKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UseyBhcHBJZCA6IHRoaXMuYXBwbGljYXRpb25JZH0pXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIoKTtcbiAgICAgICAgICAgIHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsICwgeyBhcHBJZCA6IHRoaXMuYXBwbGljYXRpb25JZH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgaWYgKGxpc3RNZW51LnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIobGlzdE1lbnUucm91dGUsdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVyeSBQYXJhbXMgPSBcIiAsdGhpcy5xdWVyeVBhcmFtcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpc3RNZW51LnJvdXRlXSlcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVudUNsaWNrZWQuZW1pdCh7YWN0aXZlUGFuZWwgOiB0aGlzLnBhcmVudFBhbmVsSWR9KTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGFsZXJ0KCdubyByb3V0ZSB0byBuYXZpZ2F0ZScpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfWVsc2UgaWYobGlzdE1lbnUuZGVmYXVsdHVybCl7XG4gICAgICAgIGNvbnN0IHVybCA9IGxpc3RNZW51LmRlZmF1bHR1cmw7XG4gICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlKVxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgIHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICBpZihsaXN0TWVudS5leHRlcm5hbF9saW5rICYmIGxpc3RNZW51LmV4dGVybmFsX2xpbmsgIT0gJycpe1xuICAgICAgICAgIHdpbmRvdy5vcGVuKGAke2xpc3RNZW51LmV4dGVybmFsX2xpbmt9YCwgJ19ibGFuaycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZigodGhpcy5wYXJlbnRNZW51SWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDAgJiYgIWFwcElkKSB8fCAoYXBwSWQgJiYgYXBwSWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDApICl7XG4gICAgICAgICAgaWYgKGxpc3RNZW51LnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIobGlzdE1lbnUucm91dGUsdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTGVuZ3RoID0gXCIgLHRoaXMucXVlcnlQYXJhbXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5UGFyYW1zKS5sZW5ndGggIT0gMCl7XG4gIFxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpc3RNZW51LnJvdXRlXSwgeyBxdWVyeVBhcmFtcyA6IHRoaXMucXVlcnlQYXJhbXMgfSlcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVudUNsaWNrZWQuZW1pdCh7YWN0aXZlUGFuZWwgOiB0aGlzLnBhcmVudFBhbmVsSWR9KTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaXN0TWVudS5yb3V0ZV0pXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lbnVDbGlja2VkLmVtaXQoe2FjdGl2ZVBhbmVsIDogdGhpcy5wYXJlbnRQYW5lbElkfSk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGFsZXJ0KCdubyByb3V0ZSB0byBuYXZpZ2F0ZScpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY29uc3QgdXJsID0gbGlzdE1lbnUubGluaztcbiAgICAgICAgICBpZih0aGlzLnVybENvbnRleHRTZXJ2aWNlLnZhbGlkYXRlS2V5U3Ryb2tlKGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlKVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyKCk7XG4gICAgICAgICAgICB0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKHVybCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgaXRlbTogTmF2TWVudUl0ZW0pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54ID0gZXZlbnQuY2xpZW50WCArICdweCc7XG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSBldmVudC5jbGllbnRZICsgJ3B4JztcbiAgICB0aGlzLmNvbnRleHRNZW51Lm1lbnVEYXRhID0geyAnaXRlbSc6IGl0ZW0gfTtcbiAgICB0aGlzLmNvbnRleHRNZW51Lm1lbnUuZm9jdXNGaXJzdEl0ZW0oJ21vdXNlJyk7XG4gICAgdGhpcy5jb250ZXh0TWVudS5vcGVuTWVudSgpO1xuICB9XG5cbiAgb25Db250ZXh0TWVudUFjdGlvbihpdGVtOiBOYXZNZW51SXRlbSkge1xuXG4gICAgaWYodGhpcy5wYXJlbnRNZW51SWQgPT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyl7XG4gICAgICBpZihpdGVtLmlkID09PSAnYWRzX2FjY291bnRfbWdtdCcpe1xuICAgICAgICBjb25zdCB1cmwgPSBpdGVtLmxpbms7XG4gICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSx7IGFwcElkIDogdGhpcy5hcHBsaWNhdGlvbklkfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXRlbS5yb3V0ZSAhPSAnJykge1xuICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihpdGVtLnJvdXRlLHRydWUpXG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZihpdGVtLmV4dGVybmFsX2xpbmsgJiYgaXRlbS5leHRlcm5hbF9saW5rICE9ICcnKXtcbiAgICAgICAgd2luZG93Lm9wZW4oYCR7aXRlbS5leHRlcm5hbF9saW5rfWAsICdfYmxhbmsnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0aGlzLnBhcmVudE1lbnVJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25JZCkgPj0gMCAgKXtcbiAgICAgICAgaWYgKGl0ZW0ucm91dGUgIT0gJycpIHtcbiAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihpdGVtLnJvdXRlLHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICBlbHNle1xuICAgICAgICAgIGNvbnN0IHVybCA9IGl0ZW0ubGluaztcbiAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5Jbk5ld1RhYihsaW5rLGlzUm91dGVyTGluayxhcHBsaWNhdGlvbklkID0gdW5kZWZpbmVkKXtcbiAgICBsZXQgZGF0ZVRpdGxlID0gdGhpcy5mZXRjaERhdGVSYW5nZSgpO1xuICAgIGxldCBkYXRlUmFuZ2VWYWwgPSB0aGlzLnVybENvbnRleHRTZXJ2aWNlLnNldERhdGVSYW5nZVVybFZhbChkYXRlVGl0bGUpO1xuICAgIFxuICAgIGlmICh0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCA9PSB1bmRlZmluZWQpe1xuICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICBvaWQgOiB0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkLFxuICAgICAgICBkciA6IGRhdGVSYW5nZVZhbCxcbiAgICAgIH1cbiAgICAgIGlmKGFwcGxpY2F0aW9uSWQpe1xuICAgICAgICBxdWVyeVBhcmFtcyA9IHsuLi5xdWVyeVBhcmFtcywgLi4uYXBwbGljYXRpb25JZH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXJsQ29udGV4dFNlcnZpY2Uuc2V0VXJsQW5kT3BlblRhYihsaW5rLHF1ZXJ5UGFyYW1zLGlzUm91dGVyTGluayk7XG4gICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgYWlkIDogdGhpcy5BcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkLFxuICAgICAgICBiaWQgOiB0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5idXNpbmVzc0dyb3VwSWQsXG4gICAgICAgIG9pZCA6IHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkLFxuICAgICAgICBkciA6IGRhdGVSYW5nZVZhbCxcbiAgICAgIH1cbiAgICAgIGlmKGFwcGxpY2F0aW9uSWQpe1xuICAgICAgICBxdWVyeVBhcmFtcyA9IHsuLi5xdWVyeVBhcmFtcywgLi4uYXBwbGljYXRpb25JZH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXJsQ29udGV4dFNlcnZpY2Uuc2V0VXJsQW5kT3BlblRhYihsaW5rLHF1ZXJ5UGFyYW1zLGlzUm91dGVyTGluayk7XG4gICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaERhdGVSYW5nZSgpe1xuICAgIGlmKHRoaXMucXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3RpZCcpICYmIHRoaXMucXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoJ2RyJykpe1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXNbJ2RyJ107XG4gICAgfWVsc2V7XG4gICAgICBjb25zdCBsb2dnZWRJblVzZXIgPSBKU09OLnBhcnNlKHRoaXMuY29va2llLmdldCgnbG9nZ2VkSW5Vc2VyJykpO1xuICAgICAgY29uc29sZS5sb2coJ0xvZ2dlZCA9ICcsbG9nZ2VkSW5Vc2VyKTtcbiAgICAgIHJldHVybiBsb2dnZWRJblVzZXIuZGF0ZVJhbmdlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93TG9hZGVyKCl7XG4gICAgbGV0IGxvYWRlcl9kaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRlcl9zb3YnKTtcbiAgICAgIGlmKGxvYWRlcl9kaXYpe1xuICAgICAgICBsb2FkZXJfZGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB9XG4gICBcbiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmKGxvYWRlcl9kaXYpe1xuICAgICAgICAgbG9hZGVyX2Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9XG4gICAgIH0sIDUwMDApO1xuICB9XG5cbn1cbiIsIjxhIGFwcE9mZnNldFRvcCBjbGFzcz1cInNpZGVtZW51LW9wdGlvbiB7e2l0ZW0uc3R5bGVfY2xhc3Nlc319XCIgbWF0LWxpc3QtaXRlbSAoY2xpY2spPVwib25TZWxlY3RNZW51KCRldmVudCxpdGVtKVwiXG4gICpuZ0lmPVwiaXRlbS50eXBlID09PSAnbGVhZidcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQWN0aXZlSXRlbX1cIiAoY29udGV4dG1lbnUpPVwib25Db250ZXh0TWVudSgkZXZlbnQsIGl0ZW0pXCI+XG4gIDwhLS0gPHNwYW4gY2xhc3M9XCJ7e2l0ZW0uaWR9fV9pY29uXCIgKm5nSWY9XCJpdGVtLmlkID09ICdhZHNfYWNjb3VudF9tZ210J1wiPjwvc3Bhbj4gLS0+XG4gIDxoMyBtYXRMaW5lIGNsYXNzPVwic2lkZW1lbnUtdGV4dCBmb250LWNvbG9yLWJsYWNrIG5hdk1lbnVzIGFwcGxpY2F0aW9uTWVudVwiIFtuZ0NsYXNzXT1cInsnbWFyZ2luLWxlZnQtMTAnOiBpdGVtLmxldmVsID09ICd0d28nLCBcbiAgICAnbWFyZ2luLWxlZnQtMzYnOiBpdGVtLmxldmVsICE9ICd0d28nfVwiPlxuICAgIHt7dHJhbnNsYXRpb25baXRlbS5uYW1lXSA/IHRyYW5zbGF0aW9uW2l0ZW0ubmFtZV0gOiBpdGVtLm5hbWV9fVxuICAgIDxzcGFuIGlkPVwiYWN0aXZlQ291bnRcIiAqbmdJZj1cIml0ZW0uY291bnRLZXkgJiYgZ2V0U3BlY2lmaWVkVmFsdWUoaXRlbS5jb3VudEtleSlcIiBjbGFzcz1cIm5nLWJpbmRpbmcgbmctc2NvcGVcIj5cbiAgICAgIHt7IGdldFNwZWNpZmllZFZhbHVlKGl0ZW0uY291bnRLZXkpIH19XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGlkPVwiYWN0aXZlUmVjQ291bnRcIiAqbmdJZj1cIml0ZW0ubmFtZSA9PSAnUmVjb21tZW5kYXRpb25zJyAmJiBpdGVtLnJlY0NvdW50ICE9ICcnICYmIGl0ZW0ucmVjQ291bnQgIT0gJzAnICYmIGl0ZW0ucmVjQ291bnQgIT0gbnVsbFwiIGNsYXNzPVwiYWN0aXZlUmVjQ291bnRcIj57e2l0ZW0ucmVjQ291bnR9fTwvc3Bhbj4gXG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJpdGVtLmJhZGdlXCI+PC9zcGFuPlxuICAgIDxzcGFuIGlkPVwiYWN0aXZlUmVjQ291bnRcIiAqbmdJZj1cIml0ZW0ubmFtZSA9PSAnUmVjb21tZW5kYXRpb25zJyAmJiBpdGVtLnJlY0NvdW50ICE9ICcnICYmIGl0ZW0ucmVjQ291bnQgIT0gJzAnICYmIGl0ZW0ucmVjQ291bnQgIT0gbnVsbFwiIGNsYXNzPVwiYWN0aXZlUmVjQ291bnRcIj57e2l0ZW0ucmVjQ291bnR9fTwvc3Bhbj4gXG4gIDwvaDM+XG48L2E+XG48ZGl2IHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogZml4ZWRcIiBbc3R5bGUubGVmdF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnhcIlxuICBbc3R5bGUudG9wXT1cImNvbnRleHRNZW51UG9zaXRpb24ueVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiPlxuPC9kaXY+XG48bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwibmV3VGFiTWVudVwiPjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25Db250ZXh0TWVudUFjdGlvbihpdGVtKVwiIGNsYXNzPVwibmV3VGFiTWVudVwiIGlkPVwibmV3VGFiQWN0aW9uQnRuXCI+T3BlbiBpbiBuZXdcbiAgICAgIHRhYjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cIm5ld1RhYk1lbnVcIj48L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG48bWF0LWRpdmlkZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj48L21hdC1kaXZpZGVyPiJdfQ==
|