new-front-common-library 16.1.32-ROY-6 → 16.1.32-ROY-7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/util/component/header/header.component.mjs +3 -3
- package/esm2022/lib/util/component/header/menu/menu.const.mjs +8 -1
- package/esm2022/lib/util/i18n/de.mjs +2 -1
- package/esm2022/lib/util/i18n/en.mjs +2 -1
- package/esm2022/lib/util/i18n/fr.mjs +2 -1
- package/fesm2022/new-front-common-library.mjs +12 -2
- package/fesm2022/new-front-common-library.mjs.map +1 -1
- package/lib/util/i18n/de.d.ts +1 -0
- package/lib/util/i18n/en.d.ts +1 -0
- package/lib/util/i18n/fr.d.ts +1 -0
- package/package.json +1 -1
|
@@ -207,7 +207,7 @@ export class HeaderComponent {
|
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.Router }, { token: i2.LocalStorageEventsService }, { token: i3.LocalStorageService }, { token: i4.ToasterEventsService }, { token: i5.TranslateService }, { token: i6.CommonApiService }, { token: i7.SessionStorageService }, { token: i8.PermissionsService }, { token: i9.OverlayContainer }, { token: i10.CookieService }, { token: i11.LangService }, { token: i12.ElasticsearchService }, { token: WEB_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
210
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\n </span>\n\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\n\n <div class=\"global-search\">\n <mat-icon class=\"header-icon\">search</mat-icon>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\n <input [formControl]=\"formControlSearch\"\n [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n matInput\n placeholder=\"search ...\" />\n\n <button (click)=\"navigate(null, '/advanced-search')\"\n matSuffix\n class=\"btn advanced-button\" mat-raised-button>\n <mat-icon>flash_on</mat-icon>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{ doc.support[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.miloCode }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\n ({{ doc.thirdPartyClientSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\n )</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.code }}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY CONTRACT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{doc.clientCodeSap}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-50 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLES' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.works.join(', ') }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY COUNT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_COUNT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.END_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.periodEnd ? doc.periodEnd : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY INVOICE -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.invoiceNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EMISSION_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.emissionDate }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n\n </mat-form-field>\n </div>\n\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\n </button>\n <ng-container *ngxPermissionsExcept=\"restrictions\">\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n </ng-container>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"], dependencies: [{ kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i15.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i16.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i17.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i17.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i18.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i20.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i21.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i21.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i21.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i22.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i23.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i22.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i24.MenuComponent, selector: "sc-menu", inputs: ["lang"], outputs: ["navigate", "redirect"] }, { kind: "pipe", type: i17.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i25.CommonTranslatePipe, name: "commonTranslate" }, { kind: "pipe", type: i26.ThirdPartyAddressSearchPipe, name: "thirdPartyAddressSearch" }] }); }
|
|
210
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HeaderComponent, selector: "sc-header", outputs: { toogleMenuEvent: "toogleMenuEvent" }, host: { listeners: { "window:scroll": "onWindowScroll()" } }, ngImport: i0, template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\n </span>\n\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\n\n <div class=\"global-search\">\n <mat-icon class=\"header-icon\">search</mat-icon>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\n <input [formControl]=\"formControlSearch\"\n [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n matInput\n placeholder=\"search ...\" />\n\n <button (click)=\"navigate(null, '/advanced-search')\"\n matSuffix\n class=\"btn advanced-button\" mat-raised-button>\n <mat-icon>flash_on</mat-icon>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{ doc.support[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.miloCode }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\n ({{ doc.thirdPartyClientSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\n )</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.code }}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY CONTRACT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{doc.clientCodeSap}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-50 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLES' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.works.join(', ') }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY COUNT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_COUNT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.END_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.periodEnd ? doc.periodEnd : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY INVOICE -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.invoiceNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EMISSION_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.emissionDate }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n\n </mat-form-field>\n </div>\n\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\n </button>\n <ng-container *ngxPermissionsExcept=\"restrictions\">\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n </ng-container>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"], dependencies: [{ kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i15.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i16.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i17.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i17.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i18.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i20.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i21.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i21.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i21.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i22.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i23.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i22.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i24.MenuComponent, selector: "sc-menu", inputs: ["lang"], outputs: ["navigate", "redirect"] }, { kind: "pipe", type: i17.AsyncPipe, name: "async" }, { kind: "pipe", type: i17.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i25.CommonTranslatePipe, name: "commonTranslate" }, { kind: "pipe", type: i26.ThirdPartyAddressSearchPipe, name: "thirdPartyAddressSearch" }] }); }
|
|
211
211
|
}
|
|
212
212
|
__decorate([
|
|
213
213
|
Theme()
|
|
@@ -217,7 +217,7 @@ __decorate([
|
|
|
217
217
|
], HeaderComponent.prototype, "user", void 0);
|
|
218
218
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeaderComponent, decorators: [{
|
|
219
219
|
type: Component,
|
|
220
|
-
args: [{ selector: 'sc-header', template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\n </span>\n\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\n\n <div class=\"global-search\">\n <mat-icon class=\"header-icon\">search</mat-icon>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\n <input [formControl]=\"formControlSearch\"\n [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n matInput\n placeholder=\"search ...\" />\n\n <button (click)=\"navigate(null, '/advanced-search')\"\n matSuffix\n class=\"btn advanced-button\" mat-raised-button>\n <mat-icon>flash_on</mat-icon>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{ doc.support[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.miloCode }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\n ({{ doc.thirdPartyClientSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\n )</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.code }}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY CONTRACT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{doc.clientCodeSap}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-50 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLES' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.works.join(', ') }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY COUNT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_COUNT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.END_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.periodEnd ? doc.periodEnd : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY INVOICE -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.invoiceNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EMISSION_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.emissionDate }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n\n </mat-form-field>\n </div>\n\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\n </button>\n <ng-container *ngxPermissionsExcept=\"restrictions\">\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n </ng-container>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"] }]
|
|
220
|
+
args: [{ selector: 'sc-header', template: "<mat-toolbar class=\"d-flex align-items-center toolbar-header toolbar-padding\">\n <span class=\"d-flex align-items-end\">\n <a\n [href]=\"env === 'prod' ? 'https://unity.studiocanal.com/dashboard' : (env === 'sbx' ? 'https://unity-sbx.cplus/dashboard' : 'https://unity-' + env + '.studiocanal.com/dashboard')\">\n <img class=\"logo-unity\" src=\"./assets/img/unity_logo_48x48.png\">\n </a>\n <span *ngIf=\"env != 'prod'\" [attr.id]=\"'env-' + env\" class=\"env\">{{ env }}</span>\n </span>\n\n <sc-menu [lang]=\"lang\" (navigate)=\"navigate($event.module, $event.route, $event.queryParams)\"\n (redirect)=\"redirect($event.route)\" class=\"menu-header\" />\n\n <div class=\"global-search\">\n <mat-icon class=\"header-icon\">search</mat-icon>\n <span class=\"global-search-separator\"></span>\n <mat-form-field class=\"max-width-100\" subscriptSizing=\"dynamic\">\n <input [formControl]=\"formControlSearch\"\n [matAutocomplete]=\"autoSearch\"\n class=\"global-search-input max-width-85\"\n matInput\n placeholder=\"search ...\" />\n\n <button (click)=\"navigate(null, '/advanced-search')\"\n matSuffix\n class=\"btn advanced-button\" mat-raised-button>\n <mat-icon>flash_on</mat-icon>\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ADVANCED' | commonTranslate: lang }}\n </button>\n\n <mat-autocomplete #autoSearch=\"matAutocomplete\" class=\"mat-autocomplete-global-search\" panelWidth=\"54vw\">\n <mat-option (onSelectionChange)=\"onSelectSearch($event, doc)\"\n *ngFor=\"let doc of documents$ | async\"\n class=\"mat-option-global-search\">\n <!--PURCHASE_ORDER-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PURCHASE_ORDER\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt_long</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PURCHASE_ORDER' | commonTranslate: lang }}</span>\n <span>{{ doc.poNumber }}\n - {{ doc.totalAmount | currency: doc.currencyCode:'symbol':undefined:'fr-FR' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.BASKET_NUMBER' | commonTranslate: lang }}</span>\n <span>{{ doc?.basketNumber ? doc.basketNumber : '-' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc?.ean ? doc.ean : '-' }}</span>\n </div>\n </div>\n </div>\n <!--PRODUCT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.PRODUCT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">movie</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"ellipsis d-flex flex-column max-width-60\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.SUPPORT' | commonTranslate: lang }}</span>\n <span>{{ doc.support[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EAN' | commonTranslate: lang }}</span>\n <span>{{ doc.ean }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.RELEASE_DATE' | commonTranslate: lang }}</span>\n <span>{{ doc?.releaseDate ? doc.releaseDate : '-' }}</span>\n </div>\n </div>\n </div>\n <!--WORK-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_VERSION\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">theaters</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-75 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.title }} ({{ doc.codeIso }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.miloCode }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.PRODUCTION_YEAR' | commonTranslate: lang }}</span>\n <span>{{ doc.yearOfProduction }}</span>\n </div>\n </div>\n </div>\n <!--DEAL-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.DEAL\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">local_offer</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-70 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }} - {{ doc.thirdPartyClientName }}\n ({{ doc.thirdPartyClientSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.calculatedAmount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.VALIDATION_DATE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.validationDate }}</span>\n </div>\n </div>\n </div>\n <!--WORK_RECORD-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.WORK_RECORD\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">assignment</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.WORK_RECORD' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.id }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--INVOICE-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.number }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.DEAL' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.dealNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.thirdPartyClientName }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-35\">\n <span class=\"auto-complete-label\">\n {{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLE' | commonTranslate: lang }}\n ({{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.MILO_CODE' | commonTranslate: lang }})\n </span>\n <span class=\"ellipsis\">{{ doc.getTitle(lang) }} ({{ doc.miloCode }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.AMOUNT' | commonTranslate: lang\n }}</span>\n <span>{{ doc.amount | currency: doc.currencyCode:'symbol' }}</span>\n </div>\n </div>\n </div>\n <!--THIRD_PARTY-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.THIRD_PARTY\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">person</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-85 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.THIRD_PARTY' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.companyOrPersonName }} ({{ doc.address | thirdPartyAddressSearch: lang }}\n )</span>\n </div>\n <div class=\"d-flex flex-column max-width-15\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CODE' | commonTranslate: lang }}</span>\n <span>{{ doc.code }}</span>\n </div>\n </div>\n </div>\n <!--CONTRACT-->\n <div *ngIf=\"doc.docType === RapidSearchItemType.CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'cess'\"\n class=\"material-icons-outlined rapid-search-type-icon\">receipt</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'acq'\"\n class=\"material-icons-outlined rapid-search-type-icon\">shop_two</span>\n <span *ngIf=\"getContractType(doc.type.labelEn) === 'auth'\"\n class=\"material-icons-outlined rapid-search-type-icon\">account_circle</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-10 ellipsis\">\n <span\n class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.lisaId }} </span>\n </div>\n <div class=\"d-flex flex-column max-width-10\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TYPE' | commonTranslate: lang\n }}</span>\n <span>{{ doc.type[labelLang] }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.STATUS' | commonTranslate: lang\n }}</span>\n <span>{{ doc.status[labelLang] }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn !== 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.LICENSOR' | commonTranslate: lang\n }}</span>\n <span>{{ doc.licensor ? doc.licensor : '-' }}</span>\n </div>\n <div *ngIf=\"doc.type.labelEn === 'Sale'\" class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{\n 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CUSTOMER' | commonTranslate: lang\n }}</span>\n <span>{{ doc.customer ? doc.customer : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY CONTRACT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_CONTRACT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-30 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{doc.clientCodeSap}})</span>\n </div>\n <div class=\"d-flex flex-column max-width-50 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.TITLES' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.works.join(', ') }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY COUNT -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_COUNT\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-20 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.END_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.periodEnd ? doc.periodEnd : '-' }}</span>\n </div>\n </div>\n </div>\n <!-- ROYALTY INVOICE -->\n <div *ngIf=\"doc.docType === RapidSearchItemType.ROYALTY_INVOICE\" class=\"d-flex align-items-center\">\n <div class=\"max-width-5\">\n <span class=\"material-icons-outlined rapid-search-type-icon\">savings</span>\n </div>\n <div class=\"d-flex max-width-95\">\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.INVOICE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.invoiceNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.COUNT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.countNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CONTRACT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.contractNumber }}</span>\n </div>\n <div class=\"d-flex flex-column max-width-40 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.CLIENT' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.clientName }} ({{ doc.clientCodeSap }})</span>\n </div>\n <div class=\"d-flex flex-column max-width-15 ellipsis\">\n <span class=\"auto-complete-label\">{{ 'COMMON.HEADER.GLOBAL_SEARCH.ITEM.EMISSION_DATE' | commonTranslate: lang }}</span>\n <span class=\"ellipsis\">{{ doc.emissionDate }}</span>\n </div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n\n </mat-form-field>\n </div>\n\n <div *ngIf=\"user && user.secondary\" class=\"connected-as d-flex justify-content-between align-items-center\">\n <span style=\"margin-right: 10px\">\n {{ 'COMMON.HEADER.CONNECTED_AS' | commonTranslate: lang }} {{ user.login + ' - ' + user.firstName + ' ' + user.name }}\n </span>\n\n <button (click)=\"stopIdentityTheft()\" *ngIf=\"user.secondary\" color=\"warn\" mat-raised-button>\n {{ 'CORE.STOP' | commonTranslate: lang }}\n </button>\n </div>\n\n <span (click)=\"getHistory()\" [matMenuTriggerFor]=\"menuHistory\"\n class=\"material-icons header-icon max-width-5\">history</span>\n <mat-menu #menuHistory=\"matMenu\" class=\"action-menu\">\n <ng-container *ngFor=\"let history of historyList\" [ngSwitch]=\"history.type\">\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PRODUCT'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">theaters</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PRODUCT' | commonTranslate : lang }}{{ history.type }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/purchase-orders/' + history.id)\" *ngSwitchCase=\"'PO'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt_long</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.PO' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/deal/consult/' + history.id)\" *ngSwitchCase=\"'DEAL'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">local_offer</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.DEAL' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('commercial', '/work-record/consult/'+ history.id +'/general')\" *ngSwitchCase=\"'WORK'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">assignment</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.WORK_RECORD' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/acq/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_ACQ'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">shop_two</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_ACQ' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/cess/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_CESS'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">receipt</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_CESS' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('legal', '/contracts-details/auth/' + history.id)\"\n *ngSwitchCase=\"'CONTRACT_AUTH'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">account_circle</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.CONTRACT_AUTH' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button (click)=\"navigate('expenditure-commitment', '/budget/form/' + history.id)\" *ngSwitchCase=\"'BUDGET'\"\n mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">payments</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.BUDGET' | commonTranslate : lang }} {{ history.ref }}\n </button>\n <button *ngSwitchCase=\"'NO_HISTORY_AVAILABLE'\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">not_interested</mat-icon>\n {{ 'COMMON.HEADER.HISTORY.NO_HISTORY_AVAILABLE' | commonTranslate : lang }}\n </button>\n </ng-container>\n </mat-menu>\n <span class=\"header-separator\"></span>\n\n <span [matMenuTriggerFor]=\"settings\" class=\"material-icons-outlined header-icon max-width-5\">settings</span>\n\n <!-- #enddocregion mat-menu-trigger-for -->\n <mat-menu #settings=\"matMenu\" class=\"settings-menu\">\n <button (click)=\"switchTheme()\" mat-menu-item>\n <mat-icon class=\"theme-icon\">toggle_on</mat-icon>\n <span>{{ 'COMMON.HEADER.PARAMETERS.THEME' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"en\")' *ngIf='lang !== \"en\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/en-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.ENGLISH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"fr\")' *ngIf='lang !== \"fr\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/fr-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.FRENCH' | commonTranslate: lang }}</span>\n </button>\n <button class=\"img-btn\" (click)='switchLang(\"de\")' *ngIf='lang !== \"de\"' mat-menu-item>\n <img class=\"mat-icon\" src=\"assets/img/flag/de-flag.png\">\n <span>{{ 'COMMON.HEADER.PARAMETERS.TITLE.LANGUAGES.DEUTCH' | commonTranslate: lang }}</span>\n </button>\n <ng-container *ngxPermissionsExcept=\"restrictions\">\n <!--USER-->\n <button (click)=\"navigate('user', '/account/authorization/search')\" *ngIf=\"user && user.admin\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">manage_accounts</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SECTION_TITLE' | commonTranslate: lang }}</span>\n </button>\n </ng-container>\n <!--MY PREFERENCES-->\n <button (click)=\"navigate('user', '/account/settings')\" mat-menu-item>\n <mat-icon class=\"material-icons-outlined\">settings</mat-icon>\n <span>{{ 'COMMON.HEADER.MENU.USER.SETTINGS' | commonTranslate: lang }}</span>\n </button>\n </mat-menu>\n</mat-toolbar>\n\n", styles: [".header-icon{color:#009ef7;cursor:pointer;text-align:center;margin:0 4px}.header-separator{display:inline-block;height:25%}.global-search-separator{display:inline-block;height:70%;border-right:2px solid #D3DFEC}:host-context(.dark-theme){background-color:#2a2d3e}:host-context(.dark-theme) .global-search{background:#34384c}:host-context(.dark-theme) .global-search-input{background:#34384c}:host-context(.dark-theme) .global-search-separator{border-right:2px solid #2A2D3E}:host-context(.dark-theme) .header-separator{border-right:2px solid #111219}::ng-deep .dark-theme .mat-autocomplete-global-search{background:#2a2d3e!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search:focus:not(.mat-option-disabled){background:#212332!important;color:#fff!important}::ng-deep .dark-theme .mat-mdc-option.mat-option-global-search{color:#fff!important}::ng-deep .dark-theme .global-search-input::placeholder{color:#a1b7d4!important}:host-context(.light-theme){background-color:#fff}:host-context(.light-theme) .global-search{background:#eff3f6}:host-context(.light-theme) .global-search-input{background:#eff3f6}:host-context(.light-theme) .global-search-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .header-separator{border-right:2px solid #D3DFEC}:host-context(.light-theme) .global-search-input::placeholder{color:#445d7b!important}:host-context(.light-theme) .mat-toolbar{background-color:#fff}::ng-deep .light-theme .mat-mdc-option.mat-option-global-search:hover:not(.mdc-list-item--disabled){background:#d3dfec!important}.logo-unity{height:48px;width:48px}.global-search .header-icon{margin:0 10px}.global-search{display:flex;align-items:center;height:40px;background:#eff3f6;margin-left:5px;border-radius:8px;flex:1 1 0;width:auto;min-width:0}.global-search-input{background:#f3f6f9;border:none;margin-left:10px;font-size:14px!important}.global-search-input :focus{outline:none}.rapid-search-type-icon{font-size:1.4em;vertical-align:middle}.advanced-button{background:#7c87ff!important;color:#fff!important;width:90px;min-width:90px!important;height:24px!important;box-shadow:0 2px 6px #445d7b29,inset 0 2px 6px #ffffff14,inset 0 -2px 4px #445d7b0f;margin-right:5px;padding:0}.advanced-button .mat-icon{color:#fff!important;font-size:14px!important;height:unset;width:unset;margin-right:0}.connected-as{font-size:12px}.user-thumb{margin-right:16px;width:40px;height:40px}#env-dev,#env-uat,#env-sbx{background-color:#809ec1;color:#fff}.env{color:#fff;font-size:10px;border-radius:1px;padding:0 5px;line-height:16px;height:16px}.global-search-input::placeholder{font-style:italic!important;font-weight:700!important}.mat-option-global-search{height:30px!important;line-height:15px!important;padding:0 8px}.auto-complete-label{font-size:8px}::ng-deep .global-search .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .global-search .mat-mdc-form-field .mat-mdc-text-field-wrapper{background-color:transparent!important}::ng-deep .global-search .mat-mdc-form-field.mat-form-field-appearance-fill .mat-mdc-form-field-focus-overlay{opacity:0!important}::ng-deep .global-search .mdc-line-ripple{display:none!important}::ng-deep .global-search .mat-mdc-form-field-infix{min-height:40px!important;padding-top:8px!important;padding-bottom:8px!important}.max-width-0{flex:1 1 0%;max-width:0%}.max-width-5{flex:1 1 5%;max-width:5%}.max-width-10{flex:1 1 10%;max-width:10%}.max-width-15{flex:1 1 15%;max-width:15%}.max-width-20{flex:1 1 20%;max-width:20%}.max-width-25{flex:1 1 25%;max-width:25%}.max-width-30{flex:1 1 30%;max-width:30%}.max-width-35{flex:1 1 35%;max-width:35%}.max-width-40{flex:1 1 40%;max-width:40%}.max-width-45{flex:1 1 45%;max-width:45%}.max-width-50{flex:1 1 50%;max-width:50%}.max-width-55{flex:1 1 55%;max-width:55%}.max-width-60{flex:1 1 60%;max-width:60%}.max-width-65{flex:1 1 65%;max-width:65%}.max-width-70{flex:1 1 70%;max-width:70%}.max-width-75{flex:1 1 75%;max-width:75%}.max-width-80{flex:1 1 80%;max-width:80%}.max-width-85{flex:1 1 85%;max-width:85%}.max-width-90{flex:1 1 90%;max-width:90%}.max-width-95{flex:1 1 95%;max-width:95%}.max-width-100{flex:1 1 100%;max-width:100%}.spacer{flex:1 1 auto}.toolbar-header{height:64px;position:absolute;padding:0 16px!important;z-index:999}.menu-header{max-width:70%;overflow:hidden;max-height:60px}::ng-deep .settings-menu.mat-mdc-menu-panel .mat-mdc-menu-item .mat-icon{height:24px;width:24px;display:flex;justify-content:center;align-items:center;margin-right:15px;font-size:18px}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn .mat-mdc-menu-item-text{display:flex;justify-content:start;align-items:center}::ng-deep .settings-menu.mat-mdc-menu-panel .img-btn img{height:12px!important;width:auto!important;display:block!important;padding-left:3px;margin-right:17px!important}.theme-icon{font-size:24px!important}\n"] }]
|
|
221
221
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.LocalStorageEventsService }, { type: i3.LocalStorageService }, { type: i4.ToasterEventsService }, { type: i5.TranslateService }, { type: i6.CommonApiService }, { type: i7.SessionStorageService }, { type: i8.PermissionsService }, { type: i9.OverlayContainer }, { type: i10.CookieService }, { type: i11.LangService }, { type: i12.ElasticsearchService }, { type: undefined, decorators: [{
|
|
222
222
|
type: Inject,
|
|
223
223
|
args: [WEB_CONFIG]
|
|
@@ -227,4 +227,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
227
227
|
type: HostListener,
|
|
228
228
|
args: ['window:scroll', []]
|
|
229
229
|
}] } });
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQVFyRCxPQUFPLEVBQVMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBS2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFBO0FBQzNFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY3BDLE1BQU0sT0FBTyxlQUFlO0lBMkIxQixZQUNtQixNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixF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b3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0Nvb2tpZVNlcnZpY2V9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPdmVybGF5Q29udGFpbmVyfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1Blcm1pc3Npb25zSW50ZXJmYWNlfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wZXJtaXNzaW9ucy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7VGhlbWV9IGZyb20gXCIuLi8uLi9kZWNvcmF0b3JzL3RoZW1lLmRlY29yYXRvclwiO1xuaW1wb3J0IHtVc2VyfSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9ycy91c2VyLmRlY29yYXRvclwiO1xuaW1wb3J0IHtBdXRoVXNlck1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XG5pbXBvcnQge0xvY2FsU3RvcmFnZUV2ZW50c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9ldmVudC9zdG9yYWdlL2xvY2FsLXN0b3JhZ2UtZXZlbnRzLnNlcnZpY2VcIjtcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQge1RvYXN0ZXJFdmVudHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdG9hc3Rlci90b2FzdGVyLWV2ZW50cy5zZXJ2aWNlXCI7XG5pbXBvcnQge0NvbW1vbkFwaVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hcGkvY29tbW9uLWFwaS5zZXJ2aWNlXCI7XG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuc2VydmljZVwiO1xuaW1wb3J0IHtDb25maWcsIFdFQl9DT05GSUd9IGZyb20gXCIuLi8uLi9jb25maWdcIjtcbmltcG9ydCB7TGFuZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUtbGFuZ3VhZ2UvbGFuZy5zZXJ2aWNlXCI7XG5pbXBvcnQge0VsYXN0aWNzZWFyY2hTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZWxhc3RpY3NlYXJjaC9lbGFzdGljc2VhcmNoLnNlcnZpY2VcIjtcbmltcG9ydCB7UHVyY2hhc2VPcmRlclJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvZXhwZW5kaXR1cmUtY29tbWl0bWVudC9wdXJjaGFzZS1vcmRlci1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7UHJvZHVjdFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvdmlkZW8vcHJvZHVjdC1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7UmFwaWRTZWFyY2hJdGVtVHlwZX0gZnJvbSBcIi4uLy4uL2VudW1zL3JhcGlkLXNlYXJjaC1pdGVtLXR5cGUuZW51bVwiXG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1dvcmtWZXJzaW9uUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9yZWZlcmVudGlhbC93b3JrLXZlcnNpb24tcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNYXRPcHRpb25TZWxlY3Rpb25DaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtEZWFsUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1lcmNpYWwvZGVhbC1yYXBpZC1zZWFyY2gtbW9kZWwnO1xuaW1wb3J0IHtUaGlyZFBhcnR5UmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9yZWZlcmVudGlhbC90aGlyZC1wYXJ0eS1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7V29ya1JlY29yZFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC93b3JrLXJlY29yZC1yYXBpZC1zZWFyY2gtbW9kZWxcIjtcbmltcG9ydCB7Q29udHJhY3RSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2xlZ2FsL2NvbnRyYWN0LXJhcGlkLXNlYXJjaC1tb2RlbFwiO1xuaW1wb3J0IHtJbnZvaWNlUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21tZXJjaWFsL2ludm9pY2UtcmFwaWQtc2VhcmNoLW1vZGVsXCI7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2MtaGVhZGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgUGVybWlzc2lvbnNJbnRlcmZhY2Uge1xuICBAVGhlbWUoKSBwdWJsaWMgdGhlbWU6IHN0cmluZztcbiAgQFVzZXIoKSBwdWJsaWMgdXNlcjogQXV0aFVzZXJNb2RlbDtcblxuICBAT3V0cHV0KCkgdG9vZ2xlTWVudUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlc3RyaWN0aW9ucyA9IFsnQ0FOQUxfUExVU19JTlRFUk5BVElPTkFMX1JFU1RSSUNUSU9OJ107XG5cbiAgcHVibGljIGxhbmc6IHN0cmluZztcbiAgcHVibGljIGxhYmVsTGFuZyA9ICdsYWJlbEZyJztcbiAgcHVibGljIGlzSGlkZSA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudFNjcm9sbCA9IDA7XG4gIHB1YmxpYyBlbnY6IHN0cmluZztcbiAgcHVibGljIGhpc3RvcnlMaXN0ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XG4gIHB1YmxpYyBhY3RpdmVCdXR0b246IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgUmFwaWRTZWFyY2hJdGVtVHlwZSA9IFJhcGlkU2VhcmNoSXRlbVR5cGU7XG4gIHB1YmxpYyBmb3JtQ29udHJvbFNlYXJjaDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgcHVibGljIGRvY3VtZW50cyQ6IE9ic2VydmFibGU8KFB1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBQcm9kdWN0UmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgV29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBEZWFsUmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgV29ya1JlY29yZFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IFRoaXJkUGFydHlSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBDb250cmFjdFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IEludm9pY2VSYXBpZFNlYXJjaE1vZGVsKVtdPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlRXZlbnRzOiBMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uQXBpU2VydmljZTogQ29tbW9uQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5Q29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsYXN0aWNzZWFyY2hTZXJ2aWNlOiBFbGFzdGljc2VhcmNoU2VydmljZSxcbiAgICBASW5qZWN0KFdFQl9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDb25maWdcbiAgKSB7XG4gICAgdGhpcy5hcGlVcmwgPSB0aGlzLmNvbmZpZy5hcGlfdXJsO1xuICB9XG5cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbFNlYXJjaCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpO1xuXG4gICAgdGhpcy5pbml0UGVybWlzc2lvbnNTZXJ2aWNlKCk7XG4gICAgdGhpcy5sYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdsYW5nJykgfHwgJ2ZyJztcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTGFuZyh0aGlzLmxhbmcpO1xuICAgIHRoaXMuZW52ID0gdGhpcy5jb25maWcuZW52LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VFdmVudHMubG9jYWxTdG9yYWdlRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnbGFuZycpO1xuICAgICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9jdW1lbnRzJCA9IHRoaXMuZm9ybUNvbnRyb2xTZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHtcbiAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZVxuICAgICAgICAgIC5nZXRTZWFyY2hSZXNwb25zZSh0ZXJtLCB0aGlzLnVzZXIpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoc2VhcmNoUmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZS5nZXREb2N1bWVudHMoc2VhcmNoUmVzcG9uc2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICBwdWJsaWMgb25XaW5kb3dTY3JvbGwoKSB7XG4gICAgY29uc3QgbnVtYmVyVmFyID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICBpZiAobnVtYmVyVmFyID4gdGhpcy5jdXJyZW50U2Nyb2xsKSB7XG4gICAgICB0aGlzLmlzSGlkZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChudW1iZXJWYXIgPCB0aGlzLmN1cnJlbnRTY3JvbGwpIHtcbiAgICAgIHRoaXMuaXNIaWRlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFNjcm9sbCA9IG51bWJlclZhcjtcbiAgfVxuXG5cbiAgcHVibGljIGluaXRQZXJtaXNzaW9uc1NlcnZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaW5pdCgpO1xuICB9XG5cbiAgcHVibGljIHN3aXRjaFRoZW1lKCkge1xuICAgIGlmICh0aGlzLnRoZW1lID09PSAnZGFyaycpIHtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2xpZ2h0Jyk7XG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcbiAgICAgICAgLmdldENvbnRhaW5lckVsZW1lbnQoKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnZGFyay10aGVtZScpO1xuICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdsaWdodC10aGVtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCduZXdUaGVtZScsICdkYXJrJyk7XG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcbiAgICAgICAgLmdldENvbnRhaW5lckVsZW1lbnQoKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnbGlnaHQtdGhlbWUnKTtcbiAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnZGFyay10aGVtZScpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BJZGVudGl0eVRoZWZ0KCkge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhUb2tlblNlY29uZGFyeScpO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlKG1vZHVsZSA9ICcnLCByb3V0ZTogc3RyaW5nLCBxdWVyeVBhcmFtU3RyaW5nPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICghcm91dGUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICByb3V0ZSA9ICcvJyArIHJvdXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaV91cmwgKyAobW9kdWxlID8gYC8ke21vZHVsZX1gIDogJycpICsgcm91dGU7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gbnVsbDtcbiAgICBpZihxdWVyeVBhcmFtU3RyaW5nICE9IG51bGwpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gSlNPTi5wYXJzZShxdWVyeVBhcmFtU3RyaW5nKTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYgPT09IHVybCAmJiBxdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKGAvJHttb2R1bGV9YCkpIHtcbiAgICAgIHRoaXMucm91dGVyXG4gICAgICAgIC5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSwgcXVlcnlQYXJhbXMgPyB7cXVlcnlQYXJhbXN9IDoge30pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVkaXJlY3Qocm91dGU6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGlzdG9yeSgpIHtcbiAgICB0aGlzLmhpc3RvcnlMaXN0ID0gW107XG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlLmV4aXN0KCdoaXN0b3J5JykpIHtcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3QgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2hpc3RvcnknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaXN0b3J5TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3QucHVzaCh7dHlwZTogJ05PX0hJU1RPUllfQVZBSUxBQkxFJywgaWQ6IG51bGwsIHJlZjogbnVsbH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzd2l0Y2hMYW5nKGxhbmcpIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCdsYW5nJywgbGFuZyk7XG4gICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIHRoaXMubGFuZ1NlcnZpY2Uuc3dpdGNoTGFuZygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbExhbmcobGFuZzogc3RyaW5nKSB7XG4gICAgaWYgKCdlbicgPT09IGxhbmcpIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRW4nO1xuICAgIH0gZWxzZSBpZiAoJ2RlJyA9PT0gbGFuZykge1xuICAgICAgdGhpcy5sYWJlbExhbmcgPSAnbGFiZWxEZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRnInO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250cmFjdFR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAnU2FsZScgPyAnY2VzcycgOiB0eXBlID09PSdBY3F1aXNpdGlvbicgPyAnYWNxJyA6ICdhdXRoJztcbiAgfVxuXG4gIG9uU2VsZWN0U2VhcmNoKCRldmVudDogTWF0T3B0aW9uU2VsZWN0aW9uQ2hhbmdlLCBkb2M6IGFueSkge1xuICAgIHN3aXRjaCAoZG9jLmRvY1R5cGUpIHtcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUjpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBkb2MucG9JZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUoJ3ZpZGVvJywgJy9wcm9kdWN0L2NvbnN1bHQvJyArIGRvYy5wcm9kdWN0SWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1ZFUlNJT046XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy93b3JrLXN1bW1hcnkvJyArIGRvYy5pZCArICcvaW5mbycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5ERUFMOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC9kZWFsL2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlRISVJEX1BBUlRZOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvcmVmZXJlbnRpYWwvdGhpcmQtcGFydHkvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfUkVDT1JEOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC93b3JrLXJlY29yZC9jb25zdWx0LycgKyBkb2MuaWQgKyAnL2dlbmVyYWwnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuQ09OVFJBQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9sZWdhbC9jb250cmFjdHMtZGV0YWlscy8nICsgdGhpcy5nZXRDb250cmFjdFR5cGUoZG9jLnR5cGUubGFiZWxFbikgKyAnLycrIGRvYy5jb250cmFjdElkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuSU5WT0lDRTpcbiAgICAgICAgaWYgKGRvYy5yaWdodCkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9jb21tZXJjaWFsL2ludm9pY2UvcmlnaHQtcGF5bWVudC1jb25zdWx0P2lkRWNoZWFuY2U9JyArIGRvYy5pbnZvaWNlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9jb21tZXJjaWFsL2ludm9pY2UvbWF0ZXJpYWwtcGF5bWVudC1jb25zdWx0P2lkRWNoZWFuY2U9JyArIGRvYy5pbnZvaWNlSWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfQ09OVFJBQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9yb3lhbHR5L2NvbnRyYWN0L2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfQ09VTlQ6XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9yb3lhbHR5L2NvdW50L2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfSU5WT0lDRTpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL3JveWFsdHkvY291bnQvY29uc3VsdC8nICsgZG9jLmNvdW50SWQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8bWF0LXRvb2xiYXIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRvb2xiYXItaGVhZGVyIHRvb2xiYXItcGFkZGluZ1wiPlxuICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmRcIj5cbiAgICA8YVxuICAgICAgW2hyZWZdPVwiZW52ID09PSAncHJvZCcgPyAnaHR0cHM6Ly91bml0eS5zdHVkaW9jYW5hbC5jb20vZGFzaGJvYXJkJyA6IChlbnYgPT09ICdzYngnID8gJ2h0dHBzOi8vdW5pdHktc2J4LmNwbHVzL2Rhc2hib2FyZCcgOiAnaHR0cHM6Ly91bml0eS0nICsgZW52ICsgJy5zdHVkaW9jYW5hbC5jb20vZGFzaGJvYXJkJylcIj5cbiAgICAgIDxpbWcgY2xhc3M9XCJsb2dvLXVuaXR5XCIgc3JjPVwiLi9hc3NldHMvaW1nL3VuaXR5X2xvZ29fNDh4NDgucG5nXCI+XG4gICAgPC9hPlxuICAgIDxzcGFuICpuZ0lmPVwiZW52ICE9ICdwcm9kJ1wiIFthdHRyLmlkXT1cIidlbnYtJyArIGVudlwiIGNsYXNzPVwiZW52XCI+e3sgZW52IH19PC9zcGFuPlxuICA8L3NwYW4+XG5cbiAgPHNjLW1lbnUgW2xhbmddPVwibGFuZ1wiIChuYXZpZ2F0ZSk9XCJuYXZpZ2F0ZSgkZXZlbnQubW9kdWxlLCAkZXZlbnQucm91dGUsICRldmVudC5xdWVyeVBhcmFtcylcIlxuICAgICAgICAgICAocmVkaXJlY3QpPVwicmVkaXJlY3QoJGV2ZW50LnJvdXRlKVwiIGNsYXNzPVwibWVudS1oZWFkZXJcIiAvPlxuXG4gIDxkaXYgY2xhc3M9XCJnbG9iYWwtc2VhcmNoXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiaGVhZGVyLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1zZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF4LXdpZHRoLTEwMFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZWFyY2hcIlxuICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1NlYXJjaFwiXG4gICAgICAgICAgICAgY2xhc3M9XCJnbG9iYWwtc2VhcmNoLWlucHV0IG1heC13aWR0aC04NVwiXG4gICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInNlYXJjaCAuLi5cIiAvPlxuXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZShudWxsLCAnL2FkdmFuY2VkLXNlYXJjaCcpXCJcbiAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGFkdmFuY2VkLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICA8bWF0LWljb24+Zmxhc2hfb248L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILkFEVkFOQ0VEJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvU2VhcmNoPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWdsb2JhbC1zZWFyY2hcIiBwYW5lbFdpZHRoPVwiNTR2d1wiPlxuICAgICAgICA8bWF0LW9wdGlvbiAob25TZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50LCBkb2MpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRvYyBvZiBkb2N1bWVudHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1vcHRpb24tZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICAgIDwhLS1QVVJDSEFTRV9PUkRFUi0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUlwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHRfbG9uZzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNzBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFVSQ0hBU0VfT1JERVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5wb051bWJlciB9fVxuICAgICAgICAgICAgICAgICAgLSB7eyBkb2MudG90YWxBbW91bnQgfCBjdXJyZW5jeTogZG9jLmN1cnJlbmN5Q29kZTonc3ltYm9sJzp1bmRlZmluZWQ6J2ZyLUZSJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkJBU0tFVF9OVU1CRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8uYmFza2V0TnVtYmVyID8gZG9jLmJhc2tldE51bWJlciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVBTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5lYW4gPyBkb2MuZWFuIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1QUk9EVUNULS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1RcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5tb3ZpZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsbGlwc2lzIGQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlNVUFBPUlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5zdXBwb3J0W2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5FQU4nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5lYW4gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5SRUxFQVNFX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8ucmVsZWFzZURhdGUgPyBkb2MucmVsZWFzZURhdGUgOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLVdPUkstLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19WRVJTSU9OXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+dGhlYXRlcnM8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTc1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLldPUksnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGl0bGUgfX0gKHt7IGRvYy5jb2RlSXNvIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLk1JTE9fQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLm1pbG9Db2RlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVElPTl9ZRUFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MueWVhck9mUHJvZHVjdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tREVBTC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5ERUFMXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+bG9jYWxfb2ZmZXI8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTcwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX0gLSB7eyBkb2MudGhpcmRQYXJ0eUNsaWVudE5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICh7eyBkb2MudGhpcmRQYXJ0eUNsaWVudFNhcCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuY2FsY3VsYXRlZEFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5WQUxJREFUSU9OX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnZhbGlkYXRpb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1XT1JLX1JFQ09SRC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1JFQ09SRFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPmFzc2lnbm1lbnQ8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5XT1JLX1JFQ09SRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5pZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0zMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRoaXJkUGFydHlDbGllbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlRJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZ2V0VGl0bGUobGFuZykgfX0gKHt7IGRvYy5taWxvQ29kZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuYW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLUlOVk9JQ0UtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuSU5WT0lDRVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHQ8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5JTlZPSUNFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLm51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRoaXJkUGFydHlDbGllbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlRJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZ2V0VGl0bGUobGFuZykgfX0gKHt7IGRvYy5taWxvQ29kZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuYW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLVRISVJEX1BBUlRZLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlRISVJEX1BBUlRZXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+cGVyc29uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC04NSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USElSRF9QQVJUWScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb21wYW55T3JQZXJzb25OYW1lIH19ICh7eyBkb2MuYWRkcmVzcyB8IHRoaXJkUGFydHlBZGRyZXNzU2VhcmNoOiBsYW5nIH19XG4gICAgICAgICAgICAgICAgICApPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmNvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLUNPTlRSQUNULS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLkNPTlRSQUNUXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDb250cmFjdFR5cGUoZG9jLnR5cGUubGFiZWxFbikgPT09ICdjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHQ8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnYWNxJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnNob3BfdHdvPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldENvbnRyYWN0VHlwZShkb2MudHlwZS5sYWJlbEVuKSA9PT0gJ2F1dGgnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5saXNhSWQgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5UWVBFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy50eXBlW2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0zMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlNUQVRVUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2Muc3RhdHVzW2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLnR5cGUubGFiZWxFbiAhPT0gJ1NhbGUnXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTQwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTElDRU5TT1InIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmxpY2Vuc29yID8gZG9jLmxpY2Vuc29yIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy50eXBlLmxhYmVsRW4gPT09ICdTYWxlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC00MCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNVU1RPTUVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5jdXN0b21lciA/IGRvYy5jdXN0b21lciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFJPWUFMVFkgQ09OVFJBQ1QgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfQ09OVFJBQ1RcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5zYXZpbmdzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb250cmFjdE51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTMwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNMSUVOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jbGllbnROYW1lIH19ICh7e2RvYy5jbGllbnRDb2RlU2FwfX0pPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNTAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVElUTEVTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLndvcmtzLmpvaW4oJywgJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBST1lBTFRZIENPVU5UIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5ST1lBTFRZX0NPVU5UXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+c2F2aW5nczwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMjAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ09VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuY291bnROdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb250cmFjdE51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTQwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNMSUVOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jbGllbnROYW1lIH19ICh7eyBkb2MuY2xpZW50Q29kZVNhcCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5FTkRfREFURScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5wZXJpb2RFbmQgPyBkb2MucGVyaW9kRW5kIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gUk9ZQUxUWSBJTlZPSUNFIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5ST1lBTFRZX0lOVk9JQ0VcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5zYXZpbmdzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5JTlZPSUNFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmludm9pY2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb3VudE51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNPTlRSQUNUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmNvbnRyYWN0TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNDAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmNsaWVudE5hbWUgfX0gKHt7IGRvYy5jbGllbnRDb2RlU2FwIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTIwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVNSVNTSU9OX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZW1pc3Npb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwidXNlciAmJiB1c2VyLnNlY29uZGFyeVwiIGNsYXNzPVwiY29ubmVjdGVkLWFzIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCI+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkNPTk5FQ1RFRF9BUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX0gIHt7IHVzZXIubG9naW4gKyAnIC0gJyArIHVzZXIuZmlyc3ROYW1lICsgJyAnICsgdXNlci5uYW1lIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJzdG9wSWRlbnRpdHlUaGVmdCgpXCIgKm5nSWY9XCJ1c2VyLnNlY29uZGFyeVwiIGNvbG9yPVwid2FyblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAge3sgJ0NPUkUuU1RPUCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gKGNsaWNrKT1cImdldEhpc3RvcnkoKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51SGlzdG9yeVwiXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5oaXN0b3J5PC9zcGFuPlxuICA8bWF0LW1lbnUgI21lbnVIaXN0b3J5PVwibWF0TWVudVwiIGNsYXNzPVwiYWN0aW9uLW1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoaXN0b3J5IG9mIGhpc3RvcnlMaXN0XCIgW25nU3dpdGNoXT1cImhpc3RvcnkudHlwZVwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ1BST0RVQ1QnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvbWF0LWljb24+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19e3sgaGlzdG9yeS50eXBlIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidQTydcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHRfbG9uZzwvbWF0LWljb24+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuUE8nIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvZGVhbC9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInREVBTCdcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmxvY2FsX29mZmVyPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL3dvcmstcmVjb3JkL2NvbnN1bHQvJysgaGlzdG9yeS5pZCArJy9nZW5lcmFsJylcIiAqbmdTd2l0Y2hDYXNlPVwiJ1dPUksnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hc3NpZ25tZW50PC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5XT1JLX1JFQ09SRCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzLWRldGFpbHMvYWNxLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQUNRJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c2hvcF90d288L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkNPTlRSQUNUX0FDUScgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzLWRldGFpbHMvY2Vzcy8nICsgaGlzdG9yeS5pZClcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NPTlRSQUNUX0NFU1MnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZWNlaXB0PC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVF9DRVNTJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9hdXRoLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQVVUSCdcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFjY291bnRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVF9BVVRIJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL2J1ZGdldC9mb3JtLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInQlVER0VUJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cGF5bWVudHM8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkJVREdFVCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIidOT19ISVNUT1JZX0FWQUlMQUJMRSdcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPm5vdF9pbnRlcmVzdGVkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5OT19ISVNUT1JZX0FWQUlMQUJMRScgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtbWVudT5cbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gIDxzcGFuIFttYXRNZW51VHJpZ2dlckZvcl09XCJzZXR0aW5nc1wiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5zZXR0aW5nczwvc3Bhbj5cblxuICA8IS0tICNlbmRkb2NyZWdpb24gbWF0LW1lbnUtdHJpZ2dlci1mb3IgLS0+XG4gIDxtYXQtbWVudSAjc2V0dGluZ3M9XCJtYXRNZW51XCIgY2xhc3M9XCJzZXR0aW5ncy1tZW51XCI+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3dpdGNoVGhlbWUoKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJ0aGVtZS1pY29uXCI+dG9nZ2xlX29uPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVEhFTUUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJpbWctYnRuXCIgKGNsaWNrKT0nc3dpdGNoTGFuZyhcImVuXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJlblwiJyBtYXQtbWVudS1pdGVtPlxuICAgICAgPGltZyBjbGFzcz1cIm1hdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2VuLWZsYWcucG5nXCI+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5FTkdMSVNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiaW1nLWJ0blwiIChjbGljayk9J3N3aXRjaExhbmcoXCJmclwiKScgKm5nSWY9J2xhbmcgIT09IFwiZnJcIicgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxpbWcgY2xhc3M9XCJtYXQtaWNvblwiIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9mci1mbGFnLnBuZ1wiPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuRlJFTkNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiaW1nLWJ0blwiIChjbGljayk9J3N3aXRjaExhbmcoXCJkZVwiKScgKm5nSWY9J2xhbmcgIT09IFwiZGVcIicgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxpbWcgY2xhc3M9XCJtYXQtaWNvblwiIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9kZS1mbGFnLnBuZ1wiPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuREVVVENIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bmctY29udGFpbmVyICpuZ3hQZXJtaXNzaW9uc0V4Y2VwdD1cInJlc3RyaWN0aW9uc1wiPlxuICAgICAgPCEtLVVTRVItLT5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L2F1dGhvcml6YXRpb24vc2VhcmNoJylcIiAqbmdJZj1cInVzZXIgJiYgdXNlci5hZG1pblwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bWFuYWdlX2FjY291bnRzPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5VU0VSLlNFQ1RJT05fVElUTEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tTVkgUFJFRkVSRU5DRVMtLT5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L3NldHRpbmdzJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5VU0VSLlNFVFRJTkdTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuPC9tYXQtdG9vbGJhcj5cblxuIl19
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldy1mcm9udC1jb21tb24tbGlicmFyeS9zcmMvbGliL3V0aWwvY29tcG9uZW50L2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV3LWZyb250LWNvbW1vbi1saWJyYXJ5L3NyYy9saWIvdXRpbC9jb21wb25lbnQvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQVFyRCxPQUFPLEVBQVMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBS2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFBO0FBQzNFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY3BDLE1BQU0sT0FBTyxlQUFlO0lBMkIxQixZQUNtQixNQUFjLEVBQ2Qsa0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLGNBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLGdCQUFrQyxFQUNsQyxxQkFBNEMsRUFDNUMsa0JBQXNDLEVBQ3RDLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixXQUF3QixF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b3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0Nvb2tpZVNlcnZpY2V9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPdmVybGF5Q29udGFpbmVyfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1Blcm1pc3Npb25zSW50ZXJmYWNlfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wZXJtaXNzaW9ucy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7VGhlbWV9IGZyb20gXCIuLi8uLi9kZWNvcmF0b3JzL3RoZW1lLmRlY29yYXRvclwiO1xuaW1wb3J0IHtVc2VyfSBmcm9tIFwiLi4vLi4vZGVjb3JhdG9ycy91c2VyLmRlY29yYXRvclwiO1xuaW1wb3J0IHtBdXRoVXNlck1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzXCI7XG5pbXBvcnQge0xvY2FsU3RvcmFnZUV2ZW50c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9ldmVudC9zdG9yYWdlL2xvY2FsLXN0b3JhZ2UtZXZlbnRzLnNlcnZpY2VcIjtcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlXCI7XG5pbXBvcnQge1RvYXN0ZXJFdmVudHNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdG9hc3Rlci90b2FzdGVyLWV2ZW50cy5zZXJ2aWNlXCI7XG5pbXBvcnQge0NvbW1vbkFwaVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hcGkvY29tbW9uLWFwaS5zZXJ2aWNlXCI7XG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7UGVybWlzc2lvbnNTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuc2VydmljZVwiO1xuaW1wb3J0IHtDb25maWcsIFdFQl9DT05GSUd9IGZyb20gXCIuLi8uLi9jb25maWdcIjtcbmltcG9ydCB7TGFuZ1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUtbGFuZ3VhZ2UvbGFuZy5zZXJ2aWNlXCI7XG5pbXBvcnQge0VsYXN0aWNzZWFyY2hTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZWxhc3RpY3NlYXJjaC9lbGFzdGljc2VhcmNoLnNlcnZpY2VcIjtcbmltcG9ydCB7UHVyY2hhc2VPcmRlclJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvZXhwZW5kaXR1cmUtY29tbWl0bWVudC9wdXJjaGFzZS1vcmRlci1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7UHJvZHVjdFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvdmlkZW8vcHJvZHVjdC1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7UmFwaWRTZWFyY2hJdGVtVHlwZX0gZnJvbSBcIi4uLy4uL2VudW1zL3JhcGlkLXNlYXJjaC1pdGVtLXR5cGUuZW51bVwiXG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1dvcmtWZXJzaW9uUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9yZWZlcmVudGlhbC93b3JrLXZlcnNpb24tcmFwaWQtc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNYXRPcHRpb25TZWxlY3Rpb25DaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtEZWFsUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1lcmNpYWwvZGVhbC1yYXBpZC1zZWFyY2gtbW9kZWwnO1xuaW1wb3J0IHtUaGlyZFBhcnR5UmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9yZWZlcmVudGlhbC90aGlyZC1wYXJ0eS1yYXBpZC1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7V29ya1JlY29yZFJhcGlkU2VhcmNoTW9kZWx9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tbWVyY2lhbC93b3JrLXJlY29yZC1yYXBpZC1zZWFyY2gtbW9kZWxcIjtcbmltcG9ydCB7Q29udHJhY3RSYXBpZFNlYXJjaE1vZGVsfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2xlZ2FsL2NvbnRyYWN0LXJhcGlkLXNlYXJjaC1tb2RlbFwiO1xuaW1wb3J0IHtJbnZvaWNlUmFwaWRTZWFyY2hNb2RlbH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21tZXJjaWFsL2ludm9pY2UtcmFwaWQtc2VhcmNoLW1vZGVsXCI7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2MtaGVhZGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgUGVybWlzc2lvbnNJbnRlcmZhY2Uge1xuICBAVGhlbWUoKSBwdWJsaWMgdGhlbWU6IHN0cmluZztcbiAgQFVzZXIoKSBwdWJsaWMgdXNlcjogQXV0aFVzZXJNb2RlbDtcblxuICBAT3V0cHV0KCkgdG9vZ2xlTWVudUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHJlc3RyaWN0aW9ucyA9IFsnQ0FOQUxfUExVU19JTlRFUk5BVElPTkFMX1JFU1RSSUNUSU9OJ107XG5cbiAgcHVibGljIGxhbmc6IHN0cmluZztcbiAgcHVibGljIGxhYmVsTGFuZyA9ICdsYWJlbEZyJztcbiAgcHVibGljIGlzSGlkZSA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudFNjcm9sbCA9IDA7XG4gIHB1YmxpYyBlbnY6IHN0cmluZztcbiAgcHVibGljIGhpc3RvcnlMaXN0ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsOiBzdHJpbmc7XG4gIHB1YmxpYyBhY3RpdmVCdXR0b246IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgUmFwaWRTZWFyY2hJdGVtVHlwZSA9IFJhcGlkU2VhcmNoSXRlbVR5cGU7XG4gIHB1YmxpYyBmb3JtQ29udHJvbFNlYXJjaDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgcHVibGljIGRvY3VtZW50cyQ6IE9ic2VydmFibGU8KFB1cmNoYXNlT3JkZXJSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBQcm9kdWN0UmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgV29ya1ZlcnNpb25SYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBEZWFsUmFwaWRTZWFyY2hNb2RlbFxuICAgIHwgV29ya1JlY29yZFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IFRoaXJkUGFydHlSYXBpZFNlYXJjaE1vZGVsXG4gICAgfCBDb250cmFjdFJhcGlkU2VhcmNoTW9kZWxcbiAgICB8IEludm9pY2VSYXBpZFNlYXJjaE1vZGVsKVtdPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlRXZlbnRzOiBMb2NhbFN0b3JhZ2VFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uQXBpU2VydmljZTogQ29tbW9uQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5Q29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsYXN0aWNzZWFyY2hTZXJ2aWNlOiBFbGFzdGljc2VhcmNoU2VydmljZSxcbiAgICBASW5qZWN0KFdFQl9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDb25maWdcbiAgKSB7XG4gICAgdGhpcy5hcGlVcmwgPSB0aGlzLmNvbmZpZy5hcGlfdXJsO1xuICB9XG5cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbFNlYXJjaCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KG51bGwpO1xuXG4gICAgdGhpcy5pbml0UGVybWlzc2lvbnNTZXJ2aWNlKCk7XG4gICAgdGhpcy5sYW5nID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0KCdsYW5nJykgfHwgJ2ZyJztcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTGFuZyh0aGlzLmxhbmcpO1xuICAgIHRoaXMuZW52ID0gdGhpcy5jb25maWcuZW52LnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VFdmVudHMubG9jYWxTdG9yYWdlRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubGFuZyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldCgnbGFuZycpO1xuICAgICAgdGhpcy51cGRhdGVMYWJlbExhbmcodGhpcy5sYW5nKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9jdW1lbnRzJCA9IHRoaXMuZm9ybUNvbnRyb2xTZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHtcbiAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZVxuICAgICAgICAgIC5nZXRTZWFyY2hSZXNwb25zZSh0ZXJtLCB0aGlzLnVzZXIpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoc2VhcmNoUmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGFzdGljc2VhcmNoU2VydmljZS5nZXREb2N1bWVudHMoc2VhcmNoUmVzcG9uc2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICBwdWJsaWMgb25XaW5kb3dTY3JvbGwoKSB7XG4gICAgY29uc3QgbnVtYmVyVmFyID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICBpZiAobnVtYmVyVmFyID4gdGhpcy5jdXJyZW50U2Nyb2xsKSB7XG4gICAgICB0aGlzLmlzSGlkZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChudW1iZXJWYXIgPCB0aGlzLmN1cnJlbnRTY3JvbGwpIHtcbiAgICAgIHRoaXMuaXNIaWRlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFNjcm9sbCA9IG51bWJlclZhcjtcbiAgfVxuXG5cbiAgcHVibGljIGluaXRQZXJtaXNzaW9uc1NlcnZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaW5pdCgpO1xuICB9XG5cbiAgcHVibGljIHN3aXRjaFRoZW1lKCkge1xuICAgIGlmICh0aGlzLnRoZW1lID09PSAnZGFyaycpIHtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnBvc3QoJ25ld1RoZW1lJywgJ2xpZ2h0Jyk7XG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcbiAgICAgICAgLmdldENvbnRhaW5lckVsZW1lbnQoKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnZGFyay10aGVtZScpO1xuICAgICAgdGhpcy5vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdsaWdodC10aGVtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCduZXdUaGVtZScsICdkYXJrJyk7XG4gICAgICB0aGlzLm92ZXJsYXlDb250YWluZXJcbiAgICAgICAgLmdldENvbnRhaW5lckVsZW1lbnQoKVxuICAgICAgICAuY2xhc3NMaXN0LnJlbW92ZSgnbGlnaHQtdGhlbWUnKTtcbiAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnZGFyay10aGVtZScpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BJZGVudGl0eVRoZWZ0KCkge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1dGhUb2tlblNlY29uZGFyeScpO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlKG1vZHVsZSA9ICcnLCByb3V0ZTogc3RyaW5nLCBxdWVyeVBhcmFtU3RyaW5nPzogc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICghcm91dGUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICByb3V0ZSA9ICcvJyArIHJvdXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaV91cmwgKyAobW9kdWxlID8gYC8ke21vZHVsZX1gIDogJycpICsgcm91dGU7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zID0gbnVsbDtcbiAgICBpZihxdWVyeVBhcmFtU3RyaW5nICE9IG51bGwpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gSlNPTi5wYXJzZShxdWVyeVBhcmFtU3RyaW5nKTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYgPT09IHVybCAmJiBxdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKGAvJHttb2R1bGV9YCkpIHtcbiAgICAgIHRoaXMucm91dGVyXG4gICAgICAgIC5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSwgcXVlcnlQYXJhbXMgPyB7cXVlcnlQYXJhbXN9IDoge30pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVkaXJlY3Qocm91dGU6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGlzdG9yeSgpIHtcbiAgICB0aGlzLmhpc3RvcnlMaXN0ID0gW107XG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlLmV4aXN0KCdoaXN0b3J5JykpIHtcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3QgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXQoJ2hpc3RvcnknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaXN0b3J5TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaGlzdG9yeUxpc3QucHVzaCh7dHlwZTogJ05PX0hJU1RPUllfQVZBSUxBQkxFJywgaWQ6IG51bGwsIHJlZjogbnVsbH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzd2l0Y2hMYW5nKGxhbmcpIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5wb3N0KCdsYW5nJywgbGFuZyk7XG4gICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIHRoaXMubGFuZ1NlcnZpY2Uuc3dpdGNoTGFuZygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbExhbmcobGFuZzogc3RyaW5nKSB7XG4gICAgaWYgKCdlbicgPT09IGxhbmcpIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRW4nO1xuICAgIH0gZWxzZSBpZiAoJ2RlJyA9PT0gbGFuZykge1xuICAgICAgdGhpcy5sYWJlbExhbmcgPSAnbGFiZWxEZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxMYW5nID0gJ2xhYmVsRnInO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250cmFjdFR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAnU2FsZScgPyAnY2VzcycgOiB0eXBlID09PSdBY3F1aXNpdGlvbicgPyAnYWNxJyA6ICdhdXRoJztcbiAgfVxuXG4gIG9uU2VsZWN0U2VhcmNoKCRldmVudDogTWF0T3B0aW9uU2VsZWN0aW9uQ2hhbmdlLCBkb2M6IGFueSkge1xuICAgIHN3aXRjaCAoZG9jLmRvY1R5cGUpIHtcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUjpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSgnZXhwZW5kaXR1cmUtY29tbWl0bWVudCcsICcvcHVyY2hhc2Utb3JkZXJzLycgKyBkb2MucG9JZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUoJ3ZpZGVvJywgJy9wcm9kdWN0L2NvbnN1bHQvJyArIGRvYy5wcm9kdWN0SWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1ZFUlNJT046XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy93b3JrLXN1bW1hcnkvJyArIGRvYy5pZCArICcvaW5mbycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmFwaWRTZWFyY2hJdGVtVHlwZS5ERUFMOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC9kZWFsL2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlRISVJEX1BBUlRZOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvcmVmZXJlbnRpYWwvdGhpcmQtcGFydHkvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLldPUktfUkVDT1JEOlxuICAgICAgICB0aGlzLm5hdmlnYXRlKG51bGwsICcvY29tbWVyY2lhbC93b3JrLXJlY29yZC9jb25zdWx0LycgKyBkb2MuaWQgKyAnL2dlbmVyYWwnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuQ09OVFJBQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9sZWdhbC9jb250cmFjdHMtZGV0YWlscy8nICsgdGhpcy5nZXRDb250cmFjdFR5cGUoZG9jLnR5cGUubGFiZWxFbikgKyAnLycrIGRvYy5jb250cmFjdElkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJhcGlkU2VhcmNoSXRlbVR5cGUuSU5WT0lDRTpcbiAgICAgICAgaWYgKGRvYy5yaWdodCkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9jb21tZXJjaWFsL2ludm9pY2UvcmlnaHQtcGF5bWVudC1jb25zdWx0P2lkRWNoZWFuY2U9JyArIGRvYy5pbnZvaWNlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9jb21tZXJjaWFsL2ludm9pY2UvbWF0ZXJpYWwtcGF5bWVudC1jb25zdWx0P2lkRWNoZWFuY2U9JyArIGRvYy5pbnZvaWNlSWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfQ09OVFJBQ1Q6XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9yb3lhbHR5L2NvbnRyYWN0L2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfQ09VTlQ6XG4gICAgICAgIHRoaXMubmF2aWdhdGUobnVsbCwgJy9yb3lhbHR5L2NvdW50L2NvbnN1bHQvJyArIGRvYy5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfSU5WT0lDRTpcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZShudWxsLCAnL3JveWFsdHkvY291bnQvY29uc3VsdC8nICsgZG9jLmNvdW50SWQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuXG59XG4iLCI8bWF0LXRvb2xiYXIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRvb2xiYXItaGVhZGVyIHRvb2xiYXItcGFkZGluZ1wiPlxuICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmRcIj5cbiAgICA8YVxuICAgICAgW2hyZWZdPVwiZW52ID09PSAncHJvZCcgPyAnaHR0cHM6Ly91bml0eS5zdHVkaW9jYW5hbC5jb20vZGFzaGJvYXJkJyA6IChlbnYgPT09ICdzYngnID8gJ2h0dHBzOi8vdW5pdHktc2J4LmNwbHVzL2Rhc2hib2FyZCcgOiAnaHR0cHM6Ly91bml0eS0nICsgZW52ICsgJy5zdHVkaW9jYW5hbC5jb20vZGFzaGJvYXJkJylcIj5cbiAgICAgIDxpbWcgY2xhc3M9XCJsb2dvLXVuaXR5XCIgc3JjPVwiLi9hc3NldHMvaW1nL3VuaXR5X2xvZ29fNDh4NDgucG5nXCI+XG4gICAgPC9hPlxuICAgIDxzcGFuICpuZ0lmPVwiZW52ICE9ICdwcm9kJ1wiIFthdHRyLmlkXT1cIidlbnYtJyArIGVudlwiIGNsYXNzPVwiZW52XCI+e3sgZW52IH19PC9zcGFuPlxuICA8L3NwYW4+XG5cbiAgPHNjLW1lbnUgW2xhbmddPVwibGFuZ1wiIChuYXZpZ2F0ZSk9XCJuYXZpZ2F0ZSgkZXZlbnQubW9kdWxlLCAkZXZlbnQucm91dGUsICRldmVudC5xdWVyeVBhcmFtcylcIlxuICAgICAgICAgICAocmVkaXJlY3QpPVwicmVkaXJlY3QoJGV2ZW50LnJvdXRlKVwiIGNsYXNzPVwibWVudS1oZWFkZXJcIiAvPlxuXG4gIDxkaXYgY2xhc3M9XCJnbG9iYWwtc2VhcmNoXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiaGVhZGVyLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwiZ2xvYmFsLXNlYXJjaC1zZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF4LXdpZHRoLTEwMFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xTZWFyY2hcIlxuICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1NlYXJjaFwiXG4gICAgICAgICAgICAgY2xhc3M9XCJnbG9iYWwtc2VhcmNoLWlucHV0IG1heC13aWR0aC04NVwiXG4gICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInNlYXJjaCAuLi5cIiAvPlxuXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZShudWxsLCAnL2FkdmFuY2VkLXNlYXJjaCcpXCJcbiAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGFkdmFuY2VkLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICA8bWF0LWljb24+Zmxhc2hfb248L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILkFEVkFOQ0VEJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvU2VhcmNoPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWdsb2JhbC1zZWFyY2hcIiBwYW5lbFdpZHRoPVwiNTR2d1wiPlxuICAgICAgICA8bWF0LW9wdGlvbiAob25TZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50LCBkb2MpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRvYyBvZiBkb2N1bWVudHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1vcHRpb24tZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICAgIDwhLS1QVVJDSEFTRV9PUkRFUi0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5QVVJDSEFTRV9PUkRFUlwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHRfbG9uZzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNzBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFVSQ0hBU0VfT1JERVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5wb051bWJlciB9fVxuICAgICAgICAgICAgICAgICAgLSB7eyBkb2MudG90YWxBbW91bnQgfCBjdXJyZW5jeTogZG9jLmN1cnJlbmN5Q29kZTonc3ltYm9sJzp1bmRlZmluZWQ6J2ZyLUZSJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkJBU0tFVF9OVU1CRVInIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8uYmFza2V0TnVtYmVyID8gZG9jLmJhc2tldE51bWJlciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVBTicgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jPy5lYW4gPyBkb2MuZWFuIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1QUk9EVUNULS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlBST0RVQ1RcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5tb3ZpZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsbGlwc2lzIGQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlNVUFBPUlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5zdXBwb3J0W2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5FQU4nIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5lYW4gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5SRUxFQVNFX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYz8ucmVsZWFzZURhdGUgPyBkb2MucmVsZWFzZURhdGUgOiAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLVdPUkstLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuV09SS19WRVJTSU9OXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+dGhlYXRlcnM8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTc1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLldPUksnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MudGl0bGUgfX0gKHt7IGRvYy5jb2RlSXNvIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLk1JTE9fQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLm1pbG9Db2RlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uUFJPRFVDVElPTl9ZRUFSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MueWVhck9mUHJvZHVjdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tREVBTC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5ERUFMXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+bG9jYWxfb2ZmZXI8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTcwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX0gLSB7eyBkb2MudGhpcmRQYXJ0eUNsaWVudE5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICh7eyBkb2MudGhpcmRQYXJ0eUNsaWVudFNhcCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuY2FsY3VsYXRlZEFtb3VudCB8IGN1cnJlbmN5OiBkb2MuY3VycmVuY3lDb2RlOidzeW1ib2wnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5WQUxJREFUSU9OX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLnZhbGlkYXRpb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS1XT1JLX1JFQ09SRC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5XT1JLX1JFQ09SRFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPmFzc2lnbm1lbnQ8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5XT1JLX1JFQ09SRCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5pZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0zMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRoaXJkUGFydHlDbGllbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlRJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZ2V0VGl0bGUobGFuZykgfX0gKHt7IGRvYy5taWxvQ29kZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuYW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLUlOVk9JQ0UtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLmRvY1R5cGUgPT09IFJhcGlkU2VhcmNoSXRlbVR5cGUuSU5WT0lDRVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1heC13aWR0aC01XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHQ8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5JTlZPSUNFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLm51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmRlYWxOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLnRoaXJkUGFydHlDbGllbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMzVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlRJVExFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICh7eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTUlMT19DT0RFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZ2V0VGl0bGUobGFuZykgfX0gKHt7IGRvYy5taWxvQ29kZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkFNT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2MuYW1vdW50IHwgY3VycmVuY3k6IGRvYy5jdXJyZW5jeUNvZGU6J3N5bWJvbCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLVRISVJEX1BBUlRZLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlRISVJEX1BBUlRZXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+cGVyc29uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC04NSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5USElSRF9QQVJUWScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb21wYW55T3JQZXJzb25OYW1lIH19ICh7eyBkb2MuYWRkcmVzcyB8IHRoaXJkUGFydHlBZGRyZXNzU2VhcmNoOiBsYW5nIH19XG4gICAgICAgICAgICAgICAgICApPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ09ERScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmNvZGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLUNPTlRSQUNULS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLkNPTlRSQUNUXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDb250cmFjdFR5cGUoZG9jLnR5cGUubGFiZWxFbikgPT09ICdjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnJlY2VpcHQ8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q29udHJhY3RUeXBlKGRvYy50eXBlLmxhYmVsRW4pID09PSAnYWNxJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcmFwaWQtc2VhcmNoLXR5cGUtaWNvblwiPnNob3BfdHdvPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldENvbnRyYWN0VHlwZShkb2MudHlwZS5sYWJlbEVuKSA9PT0gJ2F1dGgnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWF4LXdpZHRoLTk1XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTEwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5saXNhSWQgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5UWVBFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy50eXBlW2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0zMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLlNUQVRVUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmdcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2Muc3RhdHVzW2xhYmVsTGFuZ10gfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZG9jLnR5cGUubGFiZWxFbiAhPT0gJ1NhbGUnXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTQwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uTElDRU5TT1InIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jLmxpY2Vuc29yID8gZG9jLmxpY2Vuc29yIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy50eXBlLmxhYmVsRW4gPT09ICdTYWxlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC00MCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNVU1RPTUVSJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvYy5jdXN0b21lciA/IGRvYy5jdXN0b21lciA6ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFJPWUFMVFkgQ09OVFJBQ1QgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRvYy5kb2NUeXBlID09PSBSYXBpZFNlYXJjaEl0ZW1UeXBlLlJPWUFMVFlfQ09OVFJBQ1RcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5zYXZpbmdzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb250cmFjdE51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTMwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNMSUVOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jbGllbnROYW1lIH19ICh7e2RvYy5jbGllbnRDb2RlU2FwfX0pPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNTAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uVElUTEVTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLndvcmtzLmpvaW4oJywgJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBST1lBTFRZIENPVU5UIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5ST1lBTFRZX0NPVU5UXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF4LXdpZHRoLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCByYXBpZC1zZWFyY2gtdHlwZS1pY29uXCI+c2F2aW5nczwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYXgtd2lkdGgtOTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtMjAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ09VTlQnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuY291bnROdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT05UUkFDVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb250cmFjdE51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTQwIGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNMSUVOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jbGllbnROYW1lIH19ICh7eyBkb2MuY2xpZW50Q29kZVNhcCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0yMCBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5FTkRfREFURScgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5wZXJpb2RFbmQgPyBkb2MucGVyaW9kRW5kIDogJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gUk9ZQUxUWSBJTlZPSUNFIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJkb2MuZG9jVHlwZSA9PT0gUmFwaWRTZWFyY2hJdGVtVHlwZS5ST1lBTFRZX0lOVk9JQ0VcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXgtd2lkdGgtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHJhcGlkLXNlYXJjaC10eXBlLWljb25cIj5zYXZpbmdzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1heC13aWR0aC05NVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5JTlZPSUNFJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmludm9pY2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1heC13aWR0aC0xNSBlbGxpcHNpc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0by1jb21wbGV0ZS1sYWJlbFwiPnt7ICdDT01NT04uSEVBREVSLkdMT0JBTF9TRUFSQ0guSVRFTS5DT1VOVCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IGRvYy5jb3VudE51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkNPTlRSQUNUJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmNvbnRyYWN0TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBtYXgtd2lkdGgtNDAgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dG8tY29tcGxldGUtbGFiZWxcIj57eyAnQ09NTU9OLkhFQURFUi5HTE9CQUxfU0VBUkNILklURU0uQ0xJRU5UJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgZG9jLmNsaWVudE5hbWUgfX0gKHt7IGRvYy5jbGllbnRDb2RlU2FwIH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbWF4LXdpZHRoLTE1IGVsbGlwc2lzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvLWNvbXBsZXRlLWxhYmVsXCI+e3sgJ0NPTU1PTi5IRUFERVIuR0xPQkFMX1NFQVJDSC5JVEVNLkVNSVNTSU9OX0RBVEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZWxsaXBzaXNcIj57eyBkb2MuZW1pc3Npb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwidXNlciAmJiB1c2VyLnNlY29uZGFyeVwiIGNsYXNzPVwiY29ubmVjdGVkLWFzIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4XCI+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkNPTk5FQ1RFRF9BUycgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX0gIHt7IHVzZXIubG9naW4gKyAnIC0gJyArIHVzZXIuZmlyc3ROYW1lICsgJyAnICsgdXNlci5uYW1lIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJzdG9wSWRlbnRpdHlUaGVmdCgpXCIgKm5nSWY9XCJ1c2VyLnNlY29uZGFyeVwiIGNvbG9yPVwid2FyblwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAge3sgJ0NPUkUuU1RPUCcgfCBjb21tb25UcmFuc2xhdGU6IGxhbmcgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPHNwYW4gKGNsaWNrKT1cImdldEhpc3RvcnkoKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51SGlzdG9yeVwiXG4gICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5oaXN0b3J5PC9zcGFuPlxuICA8bWF0LW1lbnUgI21lbnVIaXN0b3J5PVwibWF0TWVudVwiIGNsYXNzPVwiYWN0aW9uLW1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoaXN0b3J5IG9mIGhpc3RvcnlMaXN0XCIgW25nU3dpdGNoXT1cImhpc3RvcnkudHlwZVwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL3B1cmNoYXNlLW9yZGVycy8nICsgaGlzdG9yeS5pZClcIiAqbmdTd2l0Y2hDYXNlPVwiJ1BST0RVQ1QnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj50aGVhdGVyczwvbWF0LWljb24+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuUFJPRFVDVCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19e3sgaGlzdG9yeS50eXBlIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdleHBlbmRpdHVyZS1jb21taXRtZW50JywgJy9wdXJjaGFzZS1vcmRlcnMvJyArIGhpc3RvcnkuaWQpXCIgKm5nU3dpdGNoQ2FzZT1cIidQTydcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnJlY2VpcHRfbG9uZzwvbWF0LWljb24+XG4gICAgICAgIHt7ICdDT01NT04uSEVBREVSLkhJU1RPUlkuUE8nIHwgY29tbW9uVHJhbnNsYXRlIDogbGFuZyB9fSB7eyBoaXN0b3J5LnJlZiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJuYXZpZ2F0ZSgnY29tbWVyY2lhbCcsICcvZGVhbC9jb25zdWx0LycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInREVBTCdcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmxvY2FsX29mZmVyPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5ERUFMJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2NvbW1lcmNpYWwnLCAnL3dvcmstcmVjb3JkL2NvbnN1bHQvJysgaGlzdG9yeS5pZCArJy9nZW5lcmFsJylcIiAqbmdTd2l0Y2hDYXNlPVwiJ1dPUksnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5hc3NpZ25tZW50PC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5XT1JLX1JFQ09SRCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzLWRldGFpbHMvYWNxLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQUNRJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+c2hvcF90d288L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkNPTlRSQUNUX0FDUScgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCdsZWdhbCcsICcvY29udHJhY3RzLWRldGFpbHMvY2Vzcy8nICsgaGlzdG9yeS5pZClcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0NPTlRSQUNUX0NFU1MnXCJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5yZWNlaXB0PC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVF9DRVNTJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2xlZ2FsJywgJy9jb250cmFjdHMtZGV0YWlscy9hdXRoLycgKyBoaXN0b3J5LmlkKVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ09OVFJBQ1RfQVVUSCdcIlxuICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmFjY291bnRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5DT05UUkFDVF9BVVRIJyB8IGNvbW1vblRyYW5zbGF0ZSA6IGxhbmcgfX0ge3sgaGlzdG9yeS5yZWYgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGUoJ2V4cGVuZGl0dXJlLWNvbW1pdG1lbnQnLCAnL2J1ZGdldC9mb3JtLycgKyBoaXN0b3J5LmlkKVwiICpuZ1N3aXRjaENhc2U9XCInQlVER0VUJ1wiXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+cGF5bWVudHM8L21hdC1pY29uPlxuICAgICAgICB7eyAnQ09NTU9OLkhFQURFUi5ISVNUT1JZLkJVREdFVCcgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19IHt7IGhpc3RvcnkucmVmIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nU3dpdGNoQ2FzZT1cIidOT19ISVNUT1JZX0FWQUlMQUJMRSdcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPm5vdF9pbnRlcmVzdGVkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ0NPTU1PTi5IRUFERVIuSElTVE9SWS5OT19ISVNUT1JZX0FWQUlMQUJMRScgfCBjb21tb25UcmFuc2xhdGUgOiBsYW5nIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtbWVudT5cbiAgPHNwYW4gY2xhc3M9XCJoZWFkZXItc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gIDxzcGFuIFttYXRNZW51VHJpZ2dlckZvcl09XCJzZXR0aW5nc1wiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgaGVhZGVyLWljb24gbWF4LXdpZHRoLTVcIj5zZXR0aW5nczwvc3Bhbj5cblxuICA8IS0tICNlbmRkb2NyZWdpb24gbWF0LW1lbnUtdHJpZ2dlci1mb3IgLS0+XG4gIDxtYXQtbWVudSAjc2V0dGluZ3M9XCJtYXRNZW51XCIgY2xhc3M9XCJzZXR0aW5ncy1tZW51XCI+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic3dpdGNoVGhlbWUoKVwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJ0aGVtZS1pY29uXCI+dG9nZ2xlX29uPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuPnt7ICdDT01NT04uSEVBREVSLlBBUkFNRVRFUlMuVEhFTUUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJpbWctYnRuXCIgKGNsaWNrKT0nc3dpdGNoTGFuZyhcImVuXCIpJyAqbmdJZj0nbGFuZyAhPT0gXCJlblwiJyBtYXQtbWVudS1pdGVtPlxuICAgICAgPGltZyBjbGFzcz1cIm1hdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ltZy9mbGFnL2VuLWZsYWcucG5nXCI+XG4gICAgICA8c3Bhbj57eyAnQ09NTU9OLkhFQURFUi5QQVJBTUVURVJTLlRJVExFLkxBTkdVQUdFUy5FTkdMSVNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiaW1nLWJ0blwiIChjbGljayk9J3N3aXRjaExhbmcoXCJmclwiKScgKm5nSWY9J2xhbmcgIT09IFwiZnJcIicgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxpbWcgY2xhc3M9XCJtYXQtaWNvblwiIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9mci1mbGFnLnBuZ1wiPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuRlJFTkNIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiaW1nLWJ0blwiIChjbGljayk9J3N3aXRjaExhbmcoXCJkZVwiKScgKm5nSWY9J2xhbmcgIT09IFwiZGVcIicgbWF0LW1lbnUtaXRlbT5cbiAgICAgIDxpbWcgY2xhc3M9XCJtYXQtaWNvblwiIHNyYz1cImFzc2V0cy9pbWcvZmxhZy9kZS1mbGFnLnBuZ1wiPlxuICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuUEFSQU1FVEVSUy5USVRMRS5MQU5HVUFHRVMuREVVVENIJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bmctY29udGFpbmVyICpuZ3hQZXJtaXNzaW9uc0V4Y2VwdD1cInJlc3RyaWN0aW9uc1wiPlxuICAgICAgPCEtLVVTRVItLT5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L2F1dGhvcml6YXRpb24vc2VhcmNoJylcIiAqbmdJZj1cInVzZXIgJiYgdXNlci5hZG1pblwiIG1hdC1tZW51LWl0ZW0+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+bWFuYWdlX2FjY291bnRzPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5VU0VSLlNFQ1RJT05fVElUTEUnIHwgY29tbW9uVHJhbnNsYXRlOiBsYW5nIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IS0tTVkgUFJFRkVSRU5DRVMtLT5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5hdmlnYXRlKCd1c2VyJywgJy9hY2NvdW50L3NldHRpbmdzJylcIiBtYXQtbWVudS1pdGVtPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ0NPTU1PTi5IRUFERVIuTUVOVS5VU0VSLlNFVFRJTkdTJyB8IGNvbW1vblRyYW5zbGF0ZTogbGFuZyB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuPC9tYXQtdG9vbGJhcj5cblxuIl19
|