@bnsights/bbsf-admin-portal 1.1.74 → 1.1.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/README.md +10 -0
  2. package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +3 -3
  3. package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +3 -3
  4. package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +3 -3
  5. package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +3 -3
  6. package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +3 -3
  7. package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +3 -3
  8. package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +3 -3
  9. package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +3 -3
  10. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +3 -3
  11. package/esm2022/lib/Pages/license/license/license.component.mjs +3 -3
  12. package/esm2022/lib/Pages/localizations/localizations.component.mjs +3 -3
  13. package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +3 -3
  14. package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +3 -3
  15. package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +3 -3
  16. package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +3 -3
  17. package/esm2022/lib/Pages/providers/provider/provider.component.mjs +3 -3
  18. package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +3 -3
  19. package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +3 -3
  20. package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +3 -3
  21. package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +3 -3
  22. package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +3 -3
  23. package/esm2022/lib/Pages/users/users.component.mjs +3 -3
  24. package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +3 -3
  25. package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +3 -3
  26. package/fesm2022/bnsights-bbsf-admin-portal.mjs +48 -48
  27. package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
  28. package/package.json +2 -2
@@ -854,11 +854,11 @@ export class UsersComponent {
854
854
  this.requestHandlerService.destroyHandler();
855
855
  }
856
856
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UsersComponent, deps: [{ token: i1.AuthService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i2.PageInfoService }, { token: i3.UserService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
857
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: UsersComponent, selector: "lib-users", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPagingViewElement"], descendants: true }, { propertyName: "permissionSetDDL", first: true, predicate: ["permissionSetDDL"], descendants: true }, { propertyName: "accountStatusDDL", first: true, predicate: ["accountStatusDDL"], descendants: true }, { propertyName: "lockedStatusDDL", first: true, predicate: ["lockedStatusDDL"], descendants: true }, { propertyName: "departmentsDDL", first: true, predicate: ["departmentsDDL"], descendants: true }, { propertyName: "organizationDDL", first: true, predicate: ["organizationDDL"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"UsersForm\">\r\n <!-- (onChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{ display: ShowPageContent == true ? 'block' : 'none' }\">\r\n <button\r\n (click)=\"loadLists()\"\r\n ngbDropdownToggle\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n id=\"FiltersDropdown\"\r\n title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div\r\n *ngIf=\"IsFilterLoaded\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"FiltersDropdown\"\r\n class=\"filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin\">\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"usersFiltersBtn\">\r\n {{ utilityService.getResourceValue('Reset') }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"showGeneralBtns\"\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\"\r\n title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{ utilityService.getResourceValue('Export') }}\r\n </button>\r\n <button\r\n *ngIf=\"showActivateBtn\"\r\n type=\"button\"\r\n id=\"btnActivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{ utilityService.getResourceValue('Activate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showDeactivateBtn\"\r\n type=\"button\"\r\n id=\"btnDeactivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{ utilityService.getResourceValue('Deactivate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showResetPassBtn\"\r\n type=\"button\"\r\n id=\"btnResetPass\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{ utilityService.getResourceValue('ResetPassword') }}\r\n </button>\r\n <button\r\n *ngIf=\"showSendEmailBtn\"\r\n type=\"button\"\r\n id=\"btnResendActivation\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4, ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{ utilityService.getResourceValue('SendActivationEmail') }}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{ utilityService.getResourceValue('Add') }}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event, clientSidePagingResult)\" [checked]=\"allSelected\"> </mat-checkbox>\r\n &nbsp;<span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Mobile') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Roles') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Status') }}</th>\r\n <th *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\" class=\"min-w-150px\">\r\n {{ utilityService.getResourceValue('Organizations') }}\r\n </th>\r\n <th class=\"min-w-50px\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"updateUserList($event, user)\" [(ngModel)]=\"user.selected\"> </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a\r\n (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\"\r\n href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">\r\n {{ user.nameStr }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{ user.username }}</td>\r\n <td>{{ user.mobile ?? '-' }}</td>\r\n <td>{{ user.permissionset }}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive == true\">\r\n {{ utilityService.getResourceValue('Active') }}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive == false && user.activationDate != null\">\r\n {{ utilityService.getResourceValue('Deactivated') }}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive == false && user.activationDate == null\">\r\n {{ utilityService.getResourceValue('PendingActivation') }}\r\n </span>\r\n </td>\r\n <td *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\">{{ user.organizationName ?? '-' }}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n *ngIf=\"user.isActive\"\r\n id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user, false, ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Deactivate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnactivate\"\r\n (click)=\"showActivateUserModal(user, true, ActivateUserModal)\"\r\n *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Activate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user, ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('ResetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SetPassword') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n *ngIf=\"!user.isActive && user.activationDate == null\"\r\n (click)=\"showSendActivationEmailModal(user, SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\" [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('AddUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"addUserOrganizations\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, true)\" [options]=\"AddUserPermissionSet\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseUserModal\r\n id=\"CloseUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('EditUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"editUserOrganization\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, false)\" [options]=\"EditUserPermissionSet\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n #CloseEditUserModal\r\n id=\"CloseEditUserModal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Deactivate') }}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Activate') }}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('DeactivateConfirmation') }}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseActivateUserModal\r\n id=\"CloseActivateUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ResetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ResetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"CloseResetPasswordUserModal\"\r\n #CloseResetPasswordUserModal\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('SetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Password') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('ConfirmPassword') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{ Name }}</td>\r\n <td class=\"align-middle\">{{ Email }}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"ClosesetPasswordUserModal\"\r\n #ClosesetPasswordUserModal\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\"></div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n #CloseActivationEmailModal\r\n id=\"CloseActivationEmailModal\"\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ConfirmationMessage') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ ConfirmationMessage }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 1\" (click)=\"activateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 2\" (click)=\"deactivateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 3\" (click)=\"resetUserPasswordList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 4\" (click)=\"sendActivationEmailForUser()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options", "DropdownTemplateVariable"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i8.PhoneComponent, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.ProfileImageUploaderComponent, selector: "BBSF-ProfileImageUploader", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items", "pageStateRestored"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i4.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
857
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: UsersComponent, selector: "lib-users", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPagingViewElement"], descendants: true }, { propertyName: "permissionSetDDL", first: true, predicate: ["permissionSetDDL"], descendants: true }, { propertyName: "accountStatusDDL", first: true, predicate: ["accountStatusDDL"], descendants: true }, { propertyName: "lockedStatusDDL", first: true, predicate: ["lockedStatusDDL"], descendants: true }, { propertyName: "departmentsDDL", first: true, predicate: ["departmentsDDL"], descendants: true }, { propertyName: "organizationDDL", first: true, predicate: ["organizationDDL"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"UsersForm\">\r\n <!-- (onChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\"\r\n [ngStyle]=\"{ display: ShowPageContent == true ? 'block' : 'none' }\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\"\r\n class=\"filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin\">\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"usersFiltersBtn\">\r\n {{ utilityService.getResourceValue('Reset') }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button *ngIf=\"showGeneralBtns\" href=\"javascript:;\" type=\"button\" (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\" title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{ utilityService.getResourceValue('Export') }}\r\n </button>\r\n <button *ngIf=\"showActivateBtn\" type=\"button\" id=\"btnActivate\" class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\" (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{ utilityService.getResourceValue('Activate') }}\r\n </button>\r\n <button *ngIf=\"showDeactivateBtn\" type=\"button\" id=\"btnDeactivate\" class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\" (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{ utilityService.getResourceValue('Deactivate') }}\r\n </button>\r\n <button *ngIf=\"showResetPassBtn\" type=\"button\" id=\"btnResetPass\" class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\" (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{ utilityService.getResourceValue('ResetPassword') }}\r\n </button>\r\n <button *ngIf=\"showSendEmailBtn\" type=\"button\" id=\"btnResendActivation\"\r\n class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4, ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{ utilityService.getResourceValue('SendActivationEmail') }}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\"\r\n (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{ utilityService.getResourceValue('Add') }}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event, clientSidePagingResult)\" [checked]=\"allSelected\">\r\n </mat-checkbox>\r\n &nbsp;<span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Mobile') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Roles') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Status') }}</th>\r\n <th *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\" class=\"min-w-150px\">\r\n {{ utilityService.getResourceValue('Organizations') }}\r\n </th>\r\n <th class=\"min-w-50px\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"updateUserList($event, user)\" [(ngModel)]=\"user.selected\"> </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\" href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">\r\n {{ user.nameStr }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{ user.username }}</td>\r\n <td>{{ user.mobile ?? '-' }}</td>\r\n <td>{{ user.permissionset }}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive == true\">\r\n {{ utilityService.getResourceValue('Active') }}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive == false && user.activationDate != null\">\r\n {{ utilityService.getResourceValue('Deactivated') }}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive == false && user.activationDate == null\">\r\n {{ utilityService.getResourceValue('PendingActivation') }}\r\n </span>\r\n </td>\r\n <td *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\">{{ user.organizationName ?? '-' }}\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\"\r\n class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem\r\n (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" *ngIf=\"user.isActive\" id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user, false, ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Deactivate') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnactivate\"\r\n (click)=\"showActivateUserModal(user, true, ActivateUserModal)\" *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Activate') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user, ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('ResetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n *ngIf=\"!user.isActive && user.activationDate == null\"\r\n (click)=\"showSendActivationEmailModal(user, SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\"\r\n [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\"\r\n class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('AddUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"addUserOrganizations\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, true)\" [options]=\"AddUserPermissionSet\"\r\n [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUserModal id=\"CloseUserModal\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('EditUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"editUserOrganization\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, false)\" [options]=\"EditUserPermissionSet\"\r\n [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" #CloseEditUserModal id=\"CloseEditUserModal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Deactivate') }}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Activate') }}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('DeactivateConfirmation') }}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseActivateUserModal id=\"CloseActivateUserModal\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ResetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ResetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button id=\"CloseResetPasswordUserModal\" #CloseResetPasswordUserModal type=\"button\" data-dismiss=\"modal\"\r\n aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('SetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Password') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('ConfirmPassword') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{ Name }}</td>\r\n <td class=\"align-middle\">{{ Email }}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button id=\"ClosesetPasswordUserModal\" #ClosesetPasswordUserModal type=\"button\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\"></div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseActivationEmailModal id=\"CloseActivationEmailModal\" type=\"button\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ConfirmationMessage') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ ConfirmationMessage }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 1\" (click)=\"activateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 2\" (click)=\"deactivateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 3\" (click)=\"resetUserPasswordList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 4\" (click)=\"sendActivationEmailForUser()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "component", type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options", "DropdownTemplateVariable"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i8.PhoneComponent, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.ProfileImageUploaderComponent, selector: "BBSF-ProfileImageUploader", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items", "pageStateRestored"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i4.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
858
858
  }
859
859
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UsersComponent, decorators: [{
860
860
  type: Component,
861
- args: [{ selector: 'lib-users', template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"UsersForm\">\r\n <!-- (onChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{ display: ShowPageContent == true ? 'block' : 'none' }\">\r\n <button\r\n (click)=\"loadLists()\"\r\n ngbDropdownToggle\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n id=\"FiltersDropdown\"\r\n title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div\r\n *ngIf=\"IsFilterLoaded\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"FiltersDropdown\"\r\n class=\"filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin\">\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"usersFiltersBtn\">\r\n {{ utilityService.getResourceValue('Reset') }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"showGeneralBtns\"\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\"\r\n title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{ utilityService.getResourceValue('Export') }}\r\n </button>\r\n <button\r\n *ngIf=\"showActivateBtn\"\r\n type=\"button\"\r\n id=\"btnActivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{ utilityService.getResourceValue('Activate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showDeactivateBtn\"\r\n type=\"button\"\r\n id=\"btnDeactivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{ utilityService.getResourceValue('Deactivate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showResetPassBtn\"\r\n type=\"button\"\r\n id=\"btnResetPass\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{ utilityService.getResourceValue('ResetPassword') }}\r\n </button>\r\n <button\r\n *ngIf=\"showSendEmailBtn\"\r\n type=\"button\"\r\n id=\"btnResendActivation\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4, ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{ utilityService.getResourceValue('SendActivationEmail') }}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{ utilityService.getResourceValue('Add') }}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event, clientSidePagingResult)\" [checked]=\"allSelected\"> </mat-checkbox>\r\n &nbsp;<span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Mobile') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Roles') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Status') }}</th>\r\n <th *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\" class=\"min-w-150px\">\r\n {{ utilityService.getResourceValue('Organizations') }}\r\n </th>\r\n <th class=\"min-w-50px\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"updateUserList($event, user)\" [(ngModel)]=\"user.selected\"> </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a\r\n (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\"\r\n href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">\r\n {{ user.nameStr }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{ user.username }}</td>\r\n <td>{{ user.mobile ?? '-' }}</td>\r\n <td>{{ user.permissionset }}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive == true\">\r\n {{ utilityService.getResourceValue('Active') }}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive == false && user.activationDate != null\">\r\n {{ utilityService.getResourceValue('Deactivated') }}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive == false && user.activationDate == null\">\r\n {{ utilityService.getResourceValue('PendingActivation') }}\r\n </span>\r\n </td>\r\n <td *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\">{{ user.organizationName ?? '-' }}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n *ngIf=\"user.isActive\"\r\n id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user, false, ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Deactivate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnactivate\"\r\n (click)=\"showActivateUserModal(user, true, ActivateUserModal)\"\r\n *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Activate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user, ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('ResetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SetPassword') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n *ngIf=\"!user.isActive && user.activationDate == null\"\r\n (click)=\"showSendActivationEmailModal(user, SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\" [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('AddUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"addUserOrganizations\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, true)\" [options]=\"AddUserPermissionSet\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseUserModal\r\n id=\"CloseUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('EditUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"editUserOrganization\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, false)\" [options]=\"EditUserPermissionSet\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n #CloseEditUserModal\r\n id=\"CloseEditUserModal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Deactivate') }}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Activate') }}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('DeactivateConfirmation') }}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseActivateUserModal\r\n id=\"CloseActivateUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ResetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ResetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"CloseResetPasswordUserModal\"\r\n #CloseResetPasswordUserModal\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('SetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Password') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('ConfirmPassword') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{ Name }}</td>\r\n <td class=\"align-middle\">{{ Email }}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"ClosesetPasswordUserModal\"\r\n #ClosesetPasswordUserModal\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\"></div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n #CloseActivationEmailModal\r\n id=\"CloseActivationEmailModal\"\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ConfirmationMessage') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ ConfirmationMessage }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 1\" (click)=\"activateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 2\" (click)=\"deactivateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 3\" (click)=\"resetUserPasswordList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 4\" (click)=\"sendActivationEmailForUser()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n" }]
861
+ args: [{ selector: 'lib-users', template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"UsersForm\">\r\n <!-- (onChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\"\r\n [ngStyle]=\"{ display: ShowPageContent == true ? 'block' : 'none' }\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\"\r\n class=\"filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin\">\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\"\r\n [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"usersFiltersBtn\">\r\n {{ utilityService.getResourceValue('Reset') }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button *ngIf=\"showGeneralBtns\" href=\"javascript:;\" type=\"button\" (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\" title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{ utilityService.getResourceValue('Export') }}\r\n </button>\r\n <button *ngIf=\"showActivateBtn\" type=\"button\" id=\"btnActivate\" class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\" (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{ utilityService.getResourceValue('Activate') }}\r\n </button>\r\n <button *ngIf=\"showDeactivateBtn\" type=\"button\" id=\"btnDeactivate\" class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\" (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{ utilityService.getResourceValue('Deactivate') }}\r\n </button>\r\n <button *ngIf=\"showResetPassBtn\" type=\"button\" id=\"btnResetPass\" class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\" (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{ utilityService.getResourceValue('ResetPassword') }}\r\n </button>\r\n <button *ngIf=\"showSendEmailBtn\" type=\"button\" id=\"btnResendActivation\"\r\n class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4, ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{ utilityService.getResourceValue('SendActivationEmail') }}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\"\r\n (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{ utilityService.getResourceValue('Add') }}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event, clientSidePagingResult)\" [checked]=\"allSelected\">\r\n </mat-checkbox>\r\n &nbsp;<span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Mobile') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Roles') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Status') }}</th>\r\n <th *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\" class=\"min-w-150px\">\r\n {{ utilityService.getResourceValue('Organizations') }}\r\n </th>\r\n <th class=\"min-w-50px\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"updateUserList($event, user)\" [(ngModel)]=\"user.selected\"> </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\" href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">\r\n {{ user.nameStr }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{ user.username }}</td>\r\n <td>{{ user.mobile ?? '-' }}</td>\r\n <td>{{ user.permissionset }}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive == true\">\r\n {{ utilityService.getResourceValue('Active') }}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive == false && user.activationDate != null\">\r\n {{ utilityService.getResourceValue('Deactivated') }}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive == false && user.activationDate == null\">\r\n {{ utilityService.getResourceValue('PendingActivation') }}\r\n </span>\r\n </td>\r\n <td *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\">{{ user.organizationName ?? '-' }}\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\"\r\n class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem\r\n (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" *ngIf=\"user.isActive\" id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user, false, ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Deactivate') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnactivate\"\r\n (click)=\"showActivateUserModal(user, true, ActivateUserModal)\" *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Activate') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user, ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('ResetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n *ngIf=\"!user.isActive && user.activationDate == null\"\r\n (click)=\"showSendActivationEmailModal(user, SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\"\r\n [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\"\r\n class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('AddUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"addUserOrganizations\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, true)\" [options]=\"AddUserPermissionSet\"\r\n [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUserModal id=\"CloseUserModal\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('EditUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"editUserOrganization\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, false)\" [options]=\"EditUserPermissionSet\"\r\n [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" #CloseEditUserModal id=\"CloseEditUserModal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Deactivate') }}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Activate') }}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('DeactivateConfirmation') }}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseActivateUserModal id=\"CloseActivateUserModal\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ResetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ResetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button id=\"CloseResetPasswordUserModal\" #CloseResetPasswordUserModal type=\"button\" data-dismiss=\"modal\"\r\n aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('SetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Password') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('ConfirmPassword') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{ Name }}</td>\r\n <td class=\"align-middle\">{{ Email }}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button id=\"ClosesetPasswordUserModal\" #ClosesetPasswordUserModal type=\"button\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{ utilityService.getResourceValue('SaveLabel') }}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\"></div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseActivationEmailModal id=\"CloseActivationEmailModal\" type=\"button\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\"\r\n (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('ConfirmationMessage') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ ConfirmationMessage }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ utilityService.getResourceValue('Action') }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 1\" (click)=\"activateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 2\" (click)=\"deactivateUserList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 3\" (click)=\"resetUserPasswordList()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 4\" (click)=\"sendActivationEmailForUser()\"\r\n class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>" }]
862
862
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i2.PageInfoService }, { type: i3.UserService }, { type: i4.NgbModal }, { type: i1.RequestHandlerService }], propDecorators: { pagingElement: [{
863
863
  type: ViewChild,
864
864
  args: ['UserPagingViewElement', { static: false }]
@@ -878,4 +878,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
878
878
  type: ViewChild,
879
879
  args: ['organizationDDL', { static: false }]
880
880
  }] } });
881
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy91c2Vycy91c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3VzZXJzL3VzZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFtQixjQUFjLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7QUFDeFQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU9oRCxNQUFNLE9BQU8sY0FBYztJQXdIekIsWUFBb0IsV0FBd0IsRUFBUyxjQUE4QixFQUFVLG9CQUEwQyxFQUFVLGtCQUFzQyxFQUFVLGVBQWdDLEVBQ3ZOLFdBQXdCLEVBQVUsWUFBc0IsRUFBVSxxQkFBNEM7UUFEcEcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUN2TixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQVUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQXhIeEgsbUJBQW1CO1FBQ25CLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLFdBQU0sR0FBRyxtQkFBbUIsQ0FBQztRQUU3Qiw4QkFBOEI7UUFDOUIsY0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBYTlCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0IsMkJBQXNCLEdBQW1CLEVBQUUsQ0FBQztRQUs1Qyx3QkFBd0I7UUFDeEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2QixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDdkIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQVV0Qiw0QkFBNEI7UUFDNUIsZ0JBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyx1QkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztRQWNyQyxZQUFZO1FBRVosNkJBQTZCO1FBQzdCLGlCQUFZLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsd0JBQW1CLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFjdEMsWUFBWTtRQUdaLGlEQUFpRDtRQUNqRCwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsZ0NBQTJCLEdBQVUsRUFBRSxDQUFDO1FBR3hDLFlBQVk7UUFFWixvQ0FBb0M7UUFDcEMsMEJBQXFCLEdBQVUsRUFBRSxDQUFDO1FBRWxDLGtDQUFrQztRQUNsQyx3QkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QywrQkFBMEIsR0FBRyxJQUFJLFdBQVcsQ0FBQztRQUc3QyxxQkFBZ0IsR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBRzVELDhCQUE4QjtRQUM5QiwwQkFBcUIsR0FBVyxDQUFDLENBQUM7UUFDbEMsd0JBQW1CLEdBQVcsRUFBRSxDQUFDO1FBRWpDLGlCQUFpQjtRQUNqQiwyQkFBc0IsR0FBVyxDQUFDLENBQUM7UUFDbkMsNkJBQXdCLEdBQVcsQ0FBQyxDQUFDO1FBQ3JDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRzdCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQXNidkMsb0JBQWUsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBWSxDQUFDO1lBQ2hELElBQUksUUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDbEMsUUFBUSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ3pDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNqQyxRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7WUFDL0MsUUFBUSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUU3QyxRQUFRLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO2dCQUNsSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDO1lBRWpGLElBQUksV0FBVyxDQUFDLGlCQUFpQixJQUFJLFNBQVM7Z0JBQzVDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7WUFFN0QsSUFBSSxjQUFjLEdBQUcsV0FBVyxDQUFDLGNBQTBCLENBQUM7WUFDNUQsUUFBUSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7WUFDekMsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQXVCLENBQUM7WUFDdEQsUUFBUSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDbkMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUM3RCxJQUFJLG1CQUFtQixHQUFXLElBQUksQ0FBQztZQUN2QyxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Z0JBQ3hDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBNkIsQ0FBQztnQkFDakYsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM5RDtZQUNELFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztZQUNoRCxRQUFRLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDMUMsUUFBUSxDQUFDLHVCQUF1QixHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztZQUN2RSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQztRQUVGLHVCQUFrQixHQUFHLENBQUMsUUFBUSxFQUFtQixFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBOElGLHFCQUFnQixHQUFHLEdBQUcsRUFBRTtZQUN0QixJQUFJLFVBQVUsR0FBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFZLENBQUM7WUFDakQsSUFBSSxTQUFTLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNwQyxTQUFTLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDaEMsU0FBUyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNwQyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ2hELFNBQVMsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNoQyxTQUFTLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFFOUMsU0FBUyxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFDbkksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixJQUFJLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztZQUVqRixJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTO2dCQUM1QyxTQUFTLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUVqRSxJQUFJLGNBQWMsR0FBRyxXQUFXLENBQUMsY0FBMEIsQ0FBQztZQUM1RCxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1lBQzVDLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUF1QixDQUFDO1lBQ3RELFNBQVMsQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDO1lBRXRDLElBQUksbUJBQW1CLEdBQVcsSUFBSSxDQUFDO1lBQ3ZDLElBQUksV0FBVyxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtnQkFDeEMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLG1CQUE2QixDQUFDO2dCQUNqRixtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsU0FBUyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztZQUN2QyxTQUFTLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUM7UUFDRix3QkFBbUIsR0FBRyxDQUFDLFNBQVMsRUFBbUIsRUFBRTtZQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQTRLRix3QkFBbUIsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFZLENBQUM7WUFDeEQsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDOUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUM7UUFFRiwyQkFBc0IsR0FBRyxDQUFDLGlCQUFpQixFQUFtQixFQUFFO1lBQzlELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQztRQUVGLG9CQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQztJQXAwQkYsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixlQUFlLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUUsZUFBZSxDQUFDLGVBQWUsR0FBRztZQUNoQztnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7Z0JBQ25ELElBQUksRUFBRSxhQUFhO2dCQUNuQixXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLO2FBQ3BDO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSzthQUNuQztTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsTUFBTTtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXBDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUFXO1FBQzFCLElBQUksV0FBVztZQUNiLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUM5RCxVQUFVLElBQUk7Z0JBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7dUJBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7dUJBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUM7O1lBRUwsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUN4RCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLGNBQWM7UUFFWix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUNuRCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDcEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFNUMsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1FBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRWpELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUNuRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUVoRCxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUVqRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztRQUNwRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWxELGVBQWU7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFHN0YsU0FBUztRQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUVyRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7UUFDNUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO1FBQ25FLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUUvRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFDMUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO1FBQ2xFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUU5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFDeEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDO1FBQ2hFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUU3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDdEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixHQUFHLGVBQWUsQ0FBQztRQUM3RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFFNUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ3ZHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLElBQUksRUFBRSxDQUFDO1lBRWhHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztZQUN6RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUM7WUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDOUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1lBRTlELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDNUY7UUFHRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztRQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixHQUFHO1lBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSTtTQUN4QixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsR0FBRztZQUM1QyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCO1lBQzlDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlO1lBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlO1NBQ3ZDLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRztZQUN4QixJQUFJLENBQUMsb0JBQW9CO1lBQ3pCLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQjtZQUN4QixJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxlQUFlO1NBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDOUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQztRQUUxRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBQ0QsWUFBWTtJQUVaLGdDQUFnQztJQUNoQyxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNwRCxJQUFJLHNCQUFzQixHQUFHLE1BQWdDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxhQUFhLENBQUM7Z0JBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLENBQUM7Z0JBQzVELElBQUksQ0FBQyxlQUFlLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsYUFBYSxDQUFDO2dCQUU3RCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDakQsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2pELElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDL0MsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM3QyxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBRWhELG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5RCxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDOUQsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzVELGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDMUQsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBRTdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFDRCxZQUFZO0lBR1osOENBQThDO0lBQzlDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFZO1FBQ25DLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2pCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsQ0FBQztpQkFDbEM7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztpQkFDcEM7YUFDRjtZQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0csSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ25IO2FBQ0k7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMzRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUNmLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLENBQUM7O2dCQUVqQyxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxDQUFDO1NBQ3RDO2FBQ0k7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3QyxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUU7b0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUNmLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLENBQUM7O2dCQUVqQyxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDZixJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxDQUFDOztZQUVqQyxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFFN0IseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxFQUFFO2dCQUN6RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2FBQzlCO2lCQUNJLElBQUksSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxFQUFNLDJCQUEyQjthQUMvRztnQkFDRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUM5QjtpQkFDSSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsRUFBRSw2Q0FBNkM7YUFDNUg7Z0JBQ0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7YUFDNUI7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsWUFBWTtRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUV2RCxJQUFJLHNCQUFzQixHQUFHLE1BQWdDLENBQUM7WUFDOUQsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7WUFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLGFBQWEsQ0FBQztZQUU3RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3hFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUU3RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBRTdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7WUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxHQUFHLCtCQUErQixDQUFDO1lBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ3JFLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUVqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFFbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztZQUNsRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDekQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUVoRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7WUFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQztZQUM3RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFFaEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztZQUNsRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO1lBQ3RELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7WUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUUzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztZQUM3QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztZQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFFeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBRWxELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7WUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV0RSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7WUFDakUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQztZQUNyRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUM5QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFFcEUsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO2dCQUN2RyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7YUFDcEQ7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQXVDRCxZQUFZO0lBRVosbUJBQW1CO0lBQ25CLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxhQUFhO1FBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxTQUFTLEdBQUcsTUFBYSxDQUFDO1lBQzlCLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDM0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQStCLENBQUM7WUFFdEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFFNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV0QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNsRSxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQzFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBRWpFLElBQUksSUFBSSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFFOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBZ0IsQ0FBQztZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1lBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsK0JBQStCLENBQUM7WUFDckUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUd6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUUvQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO1lBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBR3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7WUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO2dCQUN2RyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7YUFDcEQ7WUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO1lBQ25ELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7WUFDdkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUMvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUNuRCxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ3BELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBRTdDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBRTVDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFFNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFFbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQztZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQXNDRCxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBYztRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2pFLElBQUksR0FBRyxHQUFHLE1BQWEsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztZQUMzQixJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2FBQzNEO2lCQUNJO2dCQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDNUQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxZQUFZO0lBR1osNEJBQTRCO0lBQzVCLFdBQVc7UUFDVCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEQsUUFBUSxDQUFDO1lBQ1QsSUFBSSxPQUFPLEdBQUcsTUFBYSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUVBQW1FLEVBQUUsQ0FBQyxDQUFDO1lBQ2hILElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUczQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUViLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUNELFlBQVk7SUFFWixvQkFBb0I7SUFFcEIsdUNBQXVDO0lBQ3ZDLHFCQUFxQixDQUFDLElBQVMsRUFBRSxlQUF3QixFQUFFLGlCQUFpQjtRQUMxRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxlQUFlLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXBDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFFYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFFYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsMEJBQTBCLENBQUMsSUFBUyxFQUFFLHNCQUFzQjtRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUdwQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkYsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFFYixDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFDRCxZQUFZO0lBRVosK0JBQStCO0lBQy9CLDRCQUE0QixDQUFDLElBQVMsRUFBRSx3QkFBd0I7UUFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFcEMsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RGLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRWxDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFFYixDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCx1QkFBdUI7SUFFdkIsd0JBQXdCLENBQUMsSUFBUyxFQUFFLG9CQUFvQjtRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNyRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzVFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDcEYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDM0UsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFHeEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUVoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDbkUsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLFFBQVE7Z0JBQzNCLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNwRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQW1CRCxzQkFBc0I7SUFFdEIsbUVBQW1FO0lBQ25FLHFCQUFxQixDQUFDLElBQVksRUFBRSxpQkFBaUI7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN4RixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixLQUFLLENBQUM7Z0JBQ0osSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztnQkFDN0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUNSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXBDLENBQUM7SUFDRCxxQkFBcUI7SUFDckIsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUViLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELHVCQUF1QjtJQUN2QixrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUViLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELDRCQUE0QjtJQUM1QixxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5RSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBRWIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDOytHQXhnQ1UsY0FBYzttR0FBZCxjQUFjLG9xQkNwQjNCLDJ5bkNBc3RCQTs7NEZEbHNCYSxjQUFjO2tCQUoxQixTQUFTOytCQUNFLFdBQVc7b1NBNEJrQyxhQUFhO3NCQUFuRSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFjSCxnQkFBZ0I7c0JBQWpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNFLGdCQUFnQjtzQkFBakUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0csZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ291bnRyeSwgQ3VzdG9tVmFsaWRhdGlvbiwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGhvbmVPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSwgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucywgSW1hZ2VUeXBlLCBQYWdpbmdDb21wb25lbnQsIFBlcm1pc3Npb25TZXRzLCBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgUGFnaW5nT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQWRkVXNlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Vc2VyTW9kZWxzL0FkZFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRHJvcGRvd25zUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRWRpdFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL3VzZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVc2VyTW9kZWxEVE8gfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVzZXJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9Vc2Vycy9cIjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBjb21wb25lbnRzXHJcbiAgVXNlcnNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgcGVybWlzc2lvblNldHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgYWNjb3VudFN0YXR1c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBsb2NrZWRTdGF0dXNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgZGVwYXJ0bWVudHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgb3JnYW5pemF0aW9uT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBwZXJtaXNzaW9uU2V0c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBsb2NrZWRTdGF0dXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgYWNjb3VudFN0YXR1c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBkZXBhcnRtZW50c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBvcmdhbml6YXRpb25zRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSXNGaWx0ZXJEYXRhTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgVXNlclBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBjbGllbnRTaWRlUGFnaW5nUmVzdWx0OiBVc2VyTW9kZWxEVE9bXSA9IFtdO1xyXG4gIFVzZXJQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZCgnVXNlclBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIFJlcXVpcmVkIGxpc3RzXHJcbiAgU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gIHBlcm1pc3Npb25TZXRMaXN0ID0gW107XHJcbiAgcGVybWlzc2lvbnNMaXN0ID0gW107XHJcbiAgYWNjb3VudFN0YXR1c0xpc3QgPSBbXTtcclxuICBsb2NrZWRTdGF0dXNMaXN0ID0gW107XHJcbiAgZGVwYXJ0bWVudHNMaXN0ID0gW107XHJcbiAgY291bnRyaWVzTGlzdCA9IFtdO1xyXG4gIG9yZ2FuaXphdGlvbkxpc3QgPSBbXTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgncGVybWlzc2lvblNldERETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZXJtaXNzaW9uU2V0RERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnYWNjb3VudFN0YXR1c0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBhY2NvdW50U3RhdHVzRERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbG9ja2VkU3RhdHVzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2tlZFN0YXR1c0RETDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlcGFydG1lbnRzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlcGFydG1lbnRzRERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnb3JnYW5pemF0aW9uRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIG9yZ2FuaXphdGlvbkRETDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIEFkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkVXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEFkZE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEFkZFVzZXJuYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRTYW1BY2NvdW50OiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyRGVwYXJ0bWVudDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNlbmRBY3RpdmF0aW9uRW1haWw6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBBZGRVc2VyUGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFByb2ZpbGVJbWFnZTogUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucztcclxuICBBZGRVc2VyRUlEOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyTmF0aW9uYWxpdHk6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIGFkZFVzZXJPcmdhbml6YXRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0TmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEVkaXRVc2VybmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdEVtYWlsOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0U2FtQWNjb3VudDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFVzZXJEZXBhcnRtZW50OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFVzZXJQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGVkaXRVc2VyT3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFByb2ZpbGVJbWFnZTogUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucztcclxuICBFZGl0VXNlckVJRDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFVzZXJOYXRpb25hbGl0eTogRHJvcGRvd25PcHRpb25zO1xyXG4gIFVzZXJJZDogc3RyaW5nO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIERlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNob3dBY3RpdmF0ZU1vZGVsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdDogYW55W10gPSBbXTtcclxuICBOYW1lOiBzdHJpbmc7XHJcbiAgRW1haWw6IHN0cmluZztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9SZXNldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgUmVzZXRQYXNzd29yZFVzZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAvL3NldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgU2V0VXNlclBhc3N3b3JkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIFBhc3N3b3JkOiBUZXh0Qm94T3B0aW9ucztcclxuICBQYXNzd29yZENvbmZpcm1hdGlvbjogVGV4dEJveE9wdGlvbnM7XHJcbiAgY3VzdG9tVmFsaWRhdGlvbjogQ3VzdG9tVmFsaWRhdGlvbiA9IG5ldyBDdXN0b21WYWxpZGF0aW9uKCk7XHJcbiAgc2V0UGFzc3dvcmRVc2VyVG9rZW46IHN0cmluZztcclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXNlcnMgc2VsZWN0aW9uXHJcbiAgYWN0aXZhdGVkVXNlcnNTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICBkZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgc2hvd0FjdGl2YXRlQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlYWN0aXZhdGVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2V0UGFzc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZXNldFBhc3NCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2VuZEVtYWlsQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dlbmVyYWxCdG5zOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50VXNlclByb2ZpbGU6IGFueTtcclxuICBwZXJtaXNzaW9uU2V0cyA9IFBlcm1pc3Npb25TZXRzO1xyXG4gIGlzTXVsdGlUZW5hbmN5QWxsb3dlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLFxyXG4gICAgICAgIHBhdGg6ICcvQWRtaW4vSG9tZScsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBwYXRoOiAnJyxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLlByb2R1Y3Rpb25Nb2RlID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0UHJvZHVjdGlvbk1vZGUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICAgIHRoaXMuY3VycmVudFVzZXJQcm9maWxlID0gdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnByb2ZpbGU7XHJcbiAgICB0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFsbG93TXVsdGlUZW5hbmN5KCk7XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRVc2Vyc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHNlYXJjaENsaWVudFNpZGUoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0LmZpbHRlcihcclxuICAgICAgICBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIChpdGVtLm5hbWUuZW5nbGlzaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGl0ZW0ubmFtZS5hcmFiaWMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBpdGVtLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLlVzZXJQYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gSW5pdGlhbGl6ZSBmaWx0ZXJzIGFuZCBwYWdpbmdcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuXHJcbiAgICAvLyBQZXJtaXNzaW9uIFNldHMgaW5pdFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5uYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMucGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIC8vIEFjY291bnQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLm5hbWUgPSBcImFjY291bnRzdGF0dXNcIjtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMubGFiZWxLZXkgPSBcIkFjY291bnRTdGF0dXNcIjtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBMb2NrZWQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5uYW1lID0gXCJsb2NrZWRzdGF0dXNcIjtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5sYWJlbEtleSA9IFwiTG9ja2VkU3RhdHVzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZXBhcnRtZW50cyBpbml0XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLm5hbWUgPSBcImRlcGFydG1lbnRzXCI7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5uYW1lID0gXCJvcmdhbml6YXRpb25cIjtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5sYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uc1wiO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbk9wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gubmFtZSA9IFwic2VhcmNoVGV4dEJveFwiO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmV4dHJhQ2xhc3NlcyA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5wbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZU9yRW1haWxcIik7XHJcblxyXG5cclxuICAgIC8vRmlsdGVyc1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5zZWFyY2hUZXh0Qm94Lm5hbWU7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJuYW1lRmlsdGVyXCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3g7XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLm5hbWU7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIlBlcm1pc3Npb25TZXRJZHNcIjtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJhY2NvdW50U3RhdHVzSURzXCI7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5uYW1lO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwibG9ja2VkU3RhdHVzSWRzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5kZXBhcnRtZW50c09wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiZGVwYXJ0bWVudElkc1wiO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgdGhpcy5Vc2VyUGFnaW5nLmZpbHRlcnMgPSB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycyA/PyBbXTtcclxuICAgICAgdGhpcy5Vc2VyUGFnaW5nLmRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyA9IHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPz8gW107XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLm5hbWU7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3Q7XHJcblxyXG4gICAgICB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycy5wdXNoKHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlcik7XHJcbiAgICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMucHVzaCh0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0VXNlcnNCeUZpbHRlcic7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmcub25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXHJcbiAgICAgIC4uLnRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMsXHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycyA9IFtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlcixcclxuICAgICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIsXHJcbiAgICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlcixcclxuICAgICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlcixcclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXJcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmcucmVzZXRGaWx0ZXJCdXR0b25OYW1lID0gXCJ1c2Vyc0ZpbHRlcnNCdG5cIjtcclxuXHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBMb2FkIGxpc3RzIGZvciBmaWx0ZXJzXHJcbiAgbG9hZExpc3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBEcm9wZG93bnNSZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwucGVybWVzc2lvbnNldHM7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50U3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuYWNjb3VudFN0YXR1cztcclxuICAgICAgICB0aGlzLmxvY2tlZFN0YXR1c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmxvY2tlZFN0YXR1cztcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuZGVwYXJ0bWVudHM7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5vcmdhbml6YXRpb25zO1xyXG5cclxuICAgICAgICBsZXQgcGVybWlzc2lvblNldEVsZW1lbnQgPSB0aGlzLnBlcm1pc3Npb25TZXREREw7XHJcbiAgICAgICAgbGV0IGFjY291bnRTdGF0dXNFbGVtZW50ID0gdGhpcy5hY2NvdW50U3RhdHVzRERMO1xyXG4gICAgICAgIGxldCBsb2NrZWRTdGF0dXNFbGVtZW50ID0gdGhpcy5sb2NrZWRTdGF0dXNEREw7XHJcbiAgICAgICAgbGV0IGRlcGFydG1lbnRzRWxlbWVudCA9IHRoaXMuZGVwYXJ0bWVudHNEREw7XHJcbiAgICAgICAgbGV0IG9yZ2FuaXphdGlvbnNFbGVtZW50ID0gdGhpcy5vcmdhbml6YXRpb25EREw7XHJcblxyXG4gICAgICAgIHBlcm1pc3Npb25TZXRFbGVtZW50LnVwZGF0ZURhdGFTb3VyY2UodGhpcy5wZXJtaXNzaW9uU2V0TGlzdCk7XHJcbiAgICAgICAgYWNjb3VudFN0YXR1c0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLmFjY291bnRTdGF0dXNMaXN0KTtcclxuICAgICAgICBsb2NrZWRTdGF0dXNFbGVtZW50LnVwZGF0ZURhdGFTb3VyY2UodGhpcy5sb2NrZWRTdGF0dXNMaXN0KTtcclxuICAgICAgICBkZXBhcnRtZW50c0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLmRlcGFydG1lbnRzTGlzdCk7XHJcbiAgICAgICAgb3JnYW5pemF0aW9uc0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLm9yZ2FuaXphdGlvbkxpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBVc2VycyBjaGVja2JveGVzIHNlbGVjdGlvbiBmdW5jdGlvbnNcclxuICBzZWxlY3RBbGxVc2VyTGlzdChldmVudCwgVXNlcnM6IGFueVtdKSB7XHJcbiAgICBpZiAodGhpcy5Vc2VyUGFnaW5nUmVzdWx0ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZXZlbnQuY2hlY2tlZCk7XHJcblxyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFVzZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVc2Vyc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnB1c2godXNlcik7XHJcbiAgICAgICAgaWYgKHVzZXIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5pc0FjdGl2ZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSkubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gIWl0ZW0uaXNBY3RpdmU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID0gMDtcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyTGlzdChldmVudCwgVXNlcikge1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZpbmQodSA9PiB1LmlkID09PSBVc2VyLmlkKS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5Vc2VyUGFnaW5nUmVzdWx0ICE9IG51bGwgJiYgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmV2ZXJ5KHUgPT4gdS5zZWxlY3RlZCk7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgICAgaWYgKFVzZXIuaXNBY3RpdmUpXHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUuaWQgPT0gVXNlci5pZCkgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoVXNlci5pc0FjdGl2ZSlcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkIC09IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZUJ1dHRvbnMoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJGcm9tTGlzdCh1c2VyOiBhbnkpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5maW5kKHUgPT4gdS5pZCA9PT0gdXNlci5pZCkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHVzZXIpO1xyXG4gICAgaWYgKHVzZXIuaXNBY3RpdmUpXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZUJ1dHRvbnMoKSB7XHJcbiAgICAvL1Jlc2V0IGFsbCBidG5zXHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwICYmIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApXHJcbiAgICAgIHRoaXMuc2hvd0dlbmVyYWxCdG5zID0gdHJ1ZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IGZhbHNlO1xyXG5cclxuICAgICAgLy9pZiBvbmx5IGFjdGl2YXRlZCB1c2Vyc1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGVhY3RpdmF0ZUJ0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApICAgICAvL2lmIG9ubHkgZGVBY3RpdmF0ZWQgdXNlcnNcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd0FjdGl2YXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZW5kRW1haWxCdG4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPiAwKSAvL2lmIGFjdGl2YXRlZCBhbmQgZGVhY3RpdmF0ZWQgdXNlcnMgc2VsZWN0ZWRcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVCdXR0b25zKCkge1xyXG4gICAgLy9SZXNldCBhbGwgYnRuc1xyXG4gICAgdGhpcy5zaG93QWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0RlYWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlbmRFbWFpbEJ0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldFVzZXJzQ291bnQoKSB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gQWRkIFVzZXJcclxuICBzaG93QWRkVXNlck1vZGFsKGFkZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblxyXG4gICAgICBsZXQgRHJvcGRvd25zUmVzcG9uc2VNb2RlbCA9IHJlc3VsdCBhcyBEcm9wZG93bnNSZXNwb25zZU1vZGVsO1xyXG4gICAgICAvL1NldCByZXF1aXJlZCBsaXN0c1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5wZXJtZXNzaW9uc2V0cztcclxuICAgICAgdGhpcy5kZXBhcnRtZW50c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmNvdW50cmllcztcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5vcmdhbml6YXRpb25zO1xyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5BZGRVc2VyRm9ybTtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkVXNlck1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgICAgdGhpcy5BZGROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIubmFtZSA9IFwiUGhvbmVJbnB1dE1vYmlsZVwiO1xyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5sYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCI7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmV4dHJhQ2xhc3NlcyA9IFwiZm9ybS1jb250cm9sIGJuc2lnaHRzLWNvbnRyb2xcIjtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuc2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXM7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUubmFtZSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQudmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudFwiO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmRhdGFTb3VyY2UgPSB0aGlzLmRlcGFydG1lbnRzTGlzdDtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLm5hbWUgPSBcIlNlbmRBY3RpdmF0aW9uTWFpbFwiO1xyXG4gICAgICB0aGlzLkFkZFNlbmRBY3RpdmF0aW9uRW1haWwubGFiZWxLZXkgPSBcIlNlbmRBY3RpdmF0aW9uRW1haWxcIjtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQubmFtZSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5sYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5pc1JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubmFtZSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubGFiZWxLZXkgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuZGF0YVNvdXJjZSA9IHRoaXMuY291bnRyaWVzTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFVzZXJFSUQubmFtZSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC50eXBlID0gSW5wdXRUeXBlLkVJRDtcclxuICAgICAgdGhpcy5BZGRVc2VyRUlELnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlID0gbmV3IFByb2ZpbGVJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIjtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubGFiZWxWYWx1ZSA9IFwiUHJvZmlsZUltYWdlXCI7XHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkFkZFByb2ZpbGVJbWFnZS5pbWFnZVVwbG9hZEFjY2VwdHNUeXBlcyA9IFtJbWFnZVR5cGUuSW1hZ2VUeXBlc107XHJcblxyXG4gICAgICB0aGlzLkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkLm5hbWUgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQubGFiZWxLZXkgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQudmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuYWRkVXNlck9yZ2FuaXphdGlvbnMubmFtZSA9IFwib3JnYW5pemF0aW9uSWRcIjtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLmxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIjtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYWRkVXNlck9yZ2FuaXphdGlvbnMuZGF0YVNvdXJjZSA9IHRoaXMub3JnYW5pemF0aW9uTGlzdDtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGRVc2VyT3JnYW5pemF0aW9ucy5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oYWRkVXNlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFVzZXJGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBhZGRNb2RlbCA9IG5ldyBBZGRVc2VyTW9kZWwoKTtcclxuICAgIGFkZE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBhZGRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIGFkZE1vZGVsLk5hdGlvbmFsaXR5ID0gUmVzdWx0TW9kZWwuTmF0aW9uYWxpdHk7XHJcbiAgICBhZGRNb2RlbC5FSUQgPSBSZXN1bHRNb2RlbC5FSUQ7XHJcbiAgICBhZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuXHJcbiAgICBhZGRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEID0gKHRoaXMuaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIHRoaXMuY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gdGhpcy5wZXJtaXNzaW9uU2V0cy5BZG1pbilcclxuICAgICAgPyBSZXN1bHRNb2RlbFt0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLm5hbWVdXHJcbiAgICAgIDogdGhpcy5jdXJyZW50VXNlclByb2ZpbGUub3JnYW5pemF0aW9uR1VJRF9JRCA/PyBDb25zdGFudHMuT3JnYW5pemF0aW9uSURfR1VJRDtcclxuXHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEX0dVSUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBhZGRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCA9IFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEO1xyXG5cclxuICAgIGxldCBQZXJtaXNzaW9uU2V0cyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25TZXRzIGFzIHN0cmluZ1tdO1xyXG4gICAgYWRkTW9kZWwuUGVybWlzc2lvblNldHMgPSBQZXJtaXNzaW9uU2V0cztcclxuICAgIGxldCBQZXJtaXNzaW9ucyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25zIGFzIHN0cmluZ1tdO1xyXG4gICAgYWRkTW9kZWwuUGVybWlzc2lvbnMgPSBQZXJtaXNzaW9ucztcclxuICAgIGFkZE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbCA9IFJlc3VsdE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbDtcclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgYWRkTW9kZWwuUGhvbmVJbnB1dE1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBhZGRNb2RlbC5Qcm9maWxlSW1hZ2UgPSBSZXN1bHRNb2RlbC5JbWFnZTtcclxuICAgIGFkZE1vZGVsLkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkID0gUmVzdWx0TW9kZWwuRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQ7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goYWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0QWRkVXNlckZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLkFkZFVzZXIoQWRkTW9kZWwpO1xyXG4gIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IFVzZXJcclxuICBzaG93RWRpdFVzZXJNb2RhbCh1c2VySUQ6IHN0cmluZywgRWRpdFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuVXNlcklkID0gdXNlcklEO1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0RWRpdFVzZXIodXNlcklEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgbGV0IHVzZXIgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIGxldCBsaXN0cyA9IHJlc3VsdE9iai5saXN0cyBhcyBEcm9wZG93bnNSZXNwb25zZU1vZGVsO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IGxpc3RzLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBsaXN0cy5jb3VudHJpZXM7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uTGlzdCA9IGxpc3RzLm9yZ2FuaXphdGlvbnM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLkVkaXRVc2VyRm9ybTtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG4gICAgICBsZXQgTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIE5hbWUuZW5nbGlzaCA9IHVzZXIubmFtZS5lbmdsaXNoO1xyXG4gICAgICBOYW1lLmFyYWJpYyA9IHVzZXIubmFtZS5hcmFiaWM7XHJcblxyXG4gICAgICB0aGlzLkVkaXROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS52YWx1ZSA9IE5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIudmFsdWUgPSB1c2VyLm1vYmlsZSBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5uYW1lID0gXCJQaG9uZUlucHV0TW9iaWxlXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5sYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5leHRyYUNsYXNzZXMgPSBcImZvcm0tY29udHJvbCBibnNpZ2h0cy1jb250cm9sXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5zZWxlY3RlZENvdW50cnlJU08gPSBDb3VudHJ5LlVuaXRlZEFyYWJFbWlyYXRlcztcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5hbGxvd1NlYXJjaCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUudmFsdWUgPSB1c2VyLnVzZXJuYW1lO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5uYW1lID0gXCJVc2VybmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLnZhbHVlID0gdXNlci5lbWFpbDtcclxuICAgICAgdGhpcy5FZGl0RW1haWwubmFtZSA9IFwiRW1haWxcIjtcclxuICAgICAgdGhpcy5FZGl0RW1haWwubGFiZWxLZXkgPSBcIkVtYWlsXCI7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLnR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5tYXhMZW5ndGggPSAyNTY7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQudmFsdWUgPSB1c2VyLnNhbUFjY291bnQ7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50LmxhYmVsS2V5ID0gXCJTYW1BY2NvdW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQubGFiZWxLZXkgPSBcIkRlcGFydG1lbnRcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2VsZWN0ZWRJdGVtcyA9IHVzZXIuZGVwYXJ0bWVudElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LmRhdGFTb3VyY2UgPSB0aGlzLmRlcGFydG1lbnRzTGlzdDtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIHRoaXMuY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gdGhpcy5wZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5uYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24ubGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiO1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24uc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5kYXRhU291cmNlID0gdGhpcy5vcmdhbml6YXRpb25MaXN0O1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24uc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRVc2VyT3JnYW5pemF0aW9uLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0Lm5hbWUgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gdXNlci5wZXJtaXNzaW9uU2V0SURzLm1hcCgoaXRlbSkgPT4gaXRlbS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25TZXQuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvblNldExpc3Q7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uc1wiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IHVzZXIucGVybWlzc2lvbklEcy5tYXAoKGl0ZW0pID0+IGl0ZW0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uc0xpc3Q7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5Lm5hbWUgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5sYWJlbEtleSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmRhdGFTb3VyY2UgPSB0aGlzLmNvdW50cmllc0xpc3Q7XHJcbiAgICAgIGlmICh1c2VyLm5hdGlvbmFsaXR5KVxyXG4gICAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5zZWxlY3RlZEl0ZW1zID0gdXNlci5uYXRpb25hbGl0eTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC5uYW1lID0gXCJFSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudHlwZSA9IElucHV0VHlwZS5FSUQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRUlELnZhbHVlID0gdXNlci5laWQ7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UgPSBuZXcgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIjtcclxuICAgICAgdGhpcy5FZGl0UHJvZmlsZUltYWdlLmxhYmVsVmFsdWUgPSBcIlByb2ZpbGVJbWFnZVwiO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaW1hZ2VVcGxvYWRBY2NlcHRzVHlwZXMgPSBbSW1hZ2VUeXBlLkltYWdlVHlwZXNdO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UudmFsdWUgPSB1c2VyLnByb2ZpbGVJbWFnZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFVzZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgZ2V0RWRpdFVzZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0VXNlckZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IGVkaXRNb2RlbCA9IG5ldyBFZGl0VXNlck1vZGVsKCk7XHJcbiAgICBlZGl0TW9kZWwuSURfR1VJRCA9IHRoaXMuVXNlcklkO1xyXG4gICAgZWRpdE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBlZGl0TW9kZWwuRW1haWwgPSBSZXN1bHRNb2RlbC5FbWFpbDtcclxuICAgIGVkaXRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIGVkaXRNb2RlbC5OYXRpb25hbGl0eSA9IFJlc3VsdE1vZGVsLk5hdGlvbmFsaXR5O1xyXG4gICAgZWRpdE1vZGVsLkVJRCA9IFJlc3VsdE1vZGVsLkVJRDtcclxuICAgIGVkaXRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuXHJcbiAgICBlZGl0TW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRCA9ICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pXHJcbiAgICAgID8gUmVzdWx0TW9kZWxbdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5uYW1lXVxyXG4gICAgICA6IHRoaXMuY3VycmVudFVzZXJQcm9maWxlLm9yZ2FuaXphdGlvbkdVSURfSUQgPz8gQ29uc3RhbnRzLk9yZ2FuaXphdGlvbklEX0dVSUQ7XHJcblxyXG4gICAgaWYgKFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEICE9IHVuZGVmaW5lZClcclxuICAgICAgZWRpdE1vZGVsLkRlcGFydG1lbnRJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCk7XHJcblxyXG4gICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvblNldHMgYXMgc3RyaW5nW107XHJcbiAgICBlZGl0TW9kZWwuUGVybWlzc2lvblNldElEcyA9IFBlcm1pc3Npb25TZXRzO1xyXG4gICAgbGV0IFBlcm1pc3Npb25zID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvbnMgYXMgc3RyaW5nW107XHJcbiAgICBlZGl0TW9kZWwuUGVybWlzc2lvbklEcyA9IFBlcm1pc3Npb25zO1xyXG5cclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgZWRpdE1vZGVsLk1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBlZGl0TW9kZWwuUHJvZmlsZUltYWdlID0gUmVzdWx0TW9kZWwuSW1hZ2U7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goZWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH07XHJcbiAgZ2V0RWRpdFVzZXJGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuRWRpdFVzZXIoRWRpdE1vZGVsKTtcclxuICB9O1xyXG4gIGNoYW5nZVBlcm1pc3Npb25TZXQoaWRzLCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5Mb2FkUGVybWlzc2lvbnNEcm9wRG93bihpZHMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBkZGwgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGRkbDtcclxuICAgICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gRXhwb3J0IHVzZXJzIGV4Y2VsXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgZmlsdGVycyA9IHt9O1xyXG4gICAgZmlsdGVycyA9IHRoaXMucGFnaW5nRWxlbWVudC5nZXRGaWx0ZXJzVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkV4cG9ydChmaWx0ZXJzKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpICsgXCIueGxzeFwiO1xyXG4gICAgICBzYXZlQXMoZmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcblxyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vT25lIHVzZXIgZnVuY3Rpb25zXHJcblxyXG4gIC8vQWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIGZ1bmN0aW9uc1xyXG4gIHNob3dBY3RpdmF0ZVVzZXJNb2RhbChVc2VyOiBhbnksIGlzQWN0aXZhdGVNb2RlbDogYm9vbGVhbiwgQWN0aXZhdGVVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5BY3RpdmF0b3JEZWFjdGl2YXRlVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5TaG93QWN0aXZhdGVNb2RlbERhdGEgPSBpc0FjdGl2YXRlTW9kZWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFjdGl2YXRlVXNlck1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuQWN0aXZhdGVVc2Vycyh0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuRGVhY3RpdmF0ZVVzZXJzKHRoaXMuQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFJlc2V0IFBhc3N3b3JkIEZ1bmN0aW9uc1xyXG4gIHNob3dSZXNldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgUmVzZXRQYXNzd29yZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuUmVzZXRQYXNzd29yZFVzZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFJlc2V0UGFzc3dvcmRVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZXNldFBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9TZW5kIGFjdGl2YXRpb24gbWFpbCBmdW5jdGlvblxyXG4gIHNob3dTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwoVXNlcjogYW55LCBTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLlNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9TZXQgcGFzc3dvcmQgZnVuY3Rpb25cclxuXHJcbiAgc2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRTZXRQQXNzd29yZE1vZGVsO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFNldFBhc3N3b3JkRnVuY3Rpb247XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMucGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG5cclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5zZXRQYXNzd29yZFVzZXJUb2tlbiA9IFVzZXIudG9rZW47XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5QYXNzd29yZC5uYW1lID0gXCJQYXNzd29yZFwiO1xyXG4gICAgdGhpcy5QYXNzd29yZC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZC50eXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgdGhpcy5QYXNzd29yZC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5ID0gKGNvbnRyb2wpID0+IHtcclxuICAgICAgbGV0IFBhc3N3b3JkID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtLmNvbnRyb2xzW1wiUGFzc3dvcmRcIl0udmFsdWU7XHJcbiAgICAgIGlmIChjb250cm9sLnZhbHVlICE9IFBhc3N3b3JkKVxyXG4gICAgICAgIHJldHVybiB7ICdjdXN0b21lckVycm9yJzogdHJ1ZSB9O1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24ubWFzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBhc3N3b3JkTm90TWF0Y2hcIik7XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5uYW1lID0gXCJQYXNzd29yZENvbmZpcm1hdGlvblwiO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi50eXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IFt0aGlzLmN1c3RvbVZhbGlkYXRpb25dO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oc2V0UGFzc3dvcmRVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuICBnZXRTZXRQQXNzd29yZE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgUmVzdWx0TW9kZWwudG9rZW4gPSB0aGlzLnNldFBhc3N3b3JkVXNlclRva2VuO1xyXG4gICAgUmVzdWx0TW9kZWwuaXNBZG1pblNldCA9IHRydWU7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goUmVzdWx0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0U2V0UGFzc3dvcmRGdW5jdGlvbiA9ICh1c2VyUGFzc3dvcmRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5TZXRVc2Vyc1Bhc3N3b3JkKHVzZXJQYXNzd29yZE1vZGVsKTtcclxuICB9O1xyXG5cclxuICBvblN1Ym1pdFN1Y2Nlc3MgPSAocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gIH07XHJcblxyXG4gIC8vVXNlcnMgTGlzdCBGdW5jdGlvbnNcclxuXHJcbiAgLy9TaG93IGFjdGl2YXRlLGRlYWN0aXZhdGUscmVzZXRQYXNzd29yZCxzZW5kYWN0aXZhdGlvbmVtYWlsIG1vZGFsc1xyXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbCh0eXBlOiBudW1iZXIsIENvbmZpcm1hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKTtcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSAzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25NYWlsQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gNDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvbmZpcm1hdGlvbk1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG4gIC8vQWN0aXZhdGUgdXNlcnMgbGlzdFxyXG4gIGFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkFjdGl2YXRlVXNlcnModGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9EZWFjdGl2YXRlIHVzZXJzIGxpc3RcclxuICBkZWFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkRlYWN0aXZhdGVVc2Vycyh0aGlzLlNlbGVjdGVkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICAvL1Jlc2V0IHBhc3N3b3JkcyB1c2VycyBsaXN0XHJcbiAgcmVzZXRVc2VyUGFzc3dvcmRMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiAqbmdJZj1cIlNob3dQYWdlQ29udGVudFwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPCEtLSBiZWdpbjo6SGVhZGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlcnNGb3JtXCI+XHJcbiAgICAgICAgICA8IS0tIChvbkNoYW5nZSk9XCJzZWFyY2hDbGllbnRTaWRlKCRldmVudClcIiAtLT5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgbmdiRHJvcGRvd24gY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiIFtuZ1N0eWxlXT1cInsgZGlzcGxheTogU2hvd1BhZ2VDb250ZW50ID09IHRydWUgPyAnYmxvY2snIDogJ25vbmUnIH1cIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRMaXN0cygpXCJcclxuICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGVcclxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICAgIGlkPVwiRmlsdGVyc0Ryb3Bkb3duXCJcclxuICAgICAgICAgICAgdGl0bGU9XCJGaWx0ZXJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0ZpbHRlcicpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgIG5nYkRyb3Bkb3duTWVudVxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJGaWx0ZXJzRHJvcGRvd25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci1jb250YWluZXIgbWVudSBtZW51LXN1YiBtZW51LXN1Yi1kcm9wZG93biBtZW51LWNvbHVtbiBtZW51LXJvdW5kZWQgbWVudS1ncmF5LTgwMCBtZW51LXN0YXRlLWJnLWxpZ2h0LXByaW1hcnkgdy0yNTBweCB3LW1kLTUwMHB4IGZ3LWJvbGQgcHktMyBkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cclxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJVc2Vyc0Zvcm1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNwZXJtaXNzaW9uU2V0RERMIFtvcHRpb25zXT1cInBlcm1pc3Npb25TZXRzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2FjY291bnRTdGF0dXNEREwgW29wdGlvbnNdPVwiYWNjb3VudFN0YXR1c09wdGlvbnNcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNsb2NrZWRTdGF0dXNEREwgW29wdGlvbnNdPVwibG9ja2VkU3RhdHVzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2RlcGFydG1lbnRzRERMIFtvcHRpb25zXT1cImRlcGFydG1lbnRzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBjdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSBwZXJtaXNzaW9uU2V0cy5BZG1pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjb3JnYW5pemF0aW9uRERMIFtvcHRpb25zXT1cIm9yZ2FuaXphdGlvbk9wdGlvbnNcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnkgcHYtcmVzZXQgYnRuLXNtXCIgbmFtZT1cInVzZXJzRmlsdGVyc0J0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0JykgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIlxyXG4gICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zIGJuc2lnaHRzLWJ0bi1leHBvcnRcIlxyXG4gICAgICAgICAgdGl0bGU9XCJFeHBvcnRcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWRvd25sb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFeHBvcnQnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2hvd0FjdGl2YXRlQnRuXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgaWQ9XCJidG5BY3RpdmF0ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoMSwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhpc3RvcnlcIj48L2k+IHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNob3dEZWFjdGl2YXRlQnRuXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgaWQ9XCJidG5EZWFjdGl2YXRlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgyLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcG93ZXItb2ZmXCI+PC9pPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlYWN0aXZhdGUnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jlc2V0UGFzc0J0blwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgzLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PC9pPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2hvd1NlbmRFbWFpbEJ0blwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGlkPVwiYnRuUmVzZW5kQWN0aXZhdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoNCwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlXCI+PC9pPiB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZW5kQWN0aXZhdGlvbkVtYWlsJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgKGNsaWNrKT1cInNob3dBZGRVc2VyTW9kYWwoYWRkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWRkJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICA8IS0tIGJlZ2luOjpCb2R5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB1c2Vycy10YWJsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInctNTBweFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInNlbGVjdEFsbFVzZXJMaXN0KCRldmVudCwgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdClcIiBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiPiA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAmbmJzcDs8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ01vYmlsZScpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1JvbGVzJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU3RhdHVzJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCAqbmdJZj1cImN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHBlcm1pc3Npb25TZXRzLkFkbWluXCIgY2xhc3M9XCJtaW4tdy0xNTBweFwiPlxyXG4gICAgICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnT3JnYW5pemF0aW9ucycpIH19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aW9uJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInVwZGF0ZVVzZXJMaXN0KCRldmVudCwgdXNlcilcIiBbKG5nTW9kZWwpXT1cInVzZXIuc2VsZWN0ZWRcIj4gPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ltYm9sLWxhYmVsIGZvbnQtc2l6ZS1oNSBmb250LXdlaWdodC1ib2xkIGJnLWxpZ2h0LXByaW1hcnkgbWwtMiBtYi0wIG1lLTNcIj5BPC9oNj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFVzZXJNb2RhbCh1c2VyLmlEX0dVSUQsIEVkaXRVc2VyTW9kYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmsgZnctYm9sZGVyIHRleHQtaG92ZXItcHJpbWFyeSBmcy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyLm5hbWVTdHIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgdXNlci51c2VybmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHVzZXIubW9iaWxlID8/ICctJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHVzZXIucGVybWlzc2lvbnNldCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlID09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aXZlJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlID09IGZhbHNlICYmIHVzZXIuYWN0aXZhdGlvbkRhdGUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlZCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmdcIiAqbmdJZj1cInVzZXIuaXNBY3RpdmUgPT0gZmFsc2UgJiYgdXNlci5hY3RpdmF0aW9uRGF0ZSA9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1BlbmRpbmdBY3RpdmF0aW9uJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHBlcm1pc3Npb25TZXRzLkFkbWluXCI+e3sgdXNlci5vcmdhbml6YXRpb25OYW1lID8/ICctJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgY2xhc3M9XCJtYXQtbWVudS1jb250ZW50XCIgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlci5pRF9HVUlELCBFZGl0VXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VkaXQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuRGVhY3RpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FjdGl2YXRlVXNlck1vZGFsKHVzZXIsIGZhbHNlLCBBY3RpdmF0ZVVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuYWN0aXZhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBY3RpdmF0ZVVzZXJNb2RhbCh1c2VyLCB0cnVlLCBBY3RpdmF0ZVVzZXJNb2RhbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5pc0FjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVzZXRQYXNzd29yZFVzZXJNb2RhbCh1c2VyLCBSZXNldFBhc3N3b3JkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIiAoY2xpY2spPVwic2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKHVzZXIsIHNldFBhc3N3b3JkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NldFBhc3N3b3JkJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIuaXNBY3RpdmUgJiYgdXNlci5hY3RpdmF0aW9uRGF0ZSA9PSBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKHVzZXIsIFNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZW5kQWN0aXZhdGlvbkVtYWlsJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8dHIgKm5nSWY9XCJjbGllbnRTaWRlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwhLS0gZW5kOjpUYWJsZSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gZW5kOjpUYWJsZSBjb250YWluZXIgLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICA8IS0tIGJlZ2luIHBhZ2luZy0tPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFVzZXJzTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIlVzZXJQYWdpbmdcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCIgI1VzZXJQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgPCEtLSBFbmQgcGFnaW5nLS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIGFkZCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYWRkVXNlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBZGRVc2VyJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZFVzZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkFkZE5hbWVcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGRVc2VybmFtZVwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFNhbUFjY291bnRcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGRVc2VyRUlEXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyTmF0aW9uYWxpdHlcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICBAaWYgKGlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBjdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSBwZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJhZGRVc2VyT3JnYW5pemF0aW9uc1wiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIH1cclxuICAgICAgPEJCU0YtUGhvbmUgW29wdGlvbnNdPVwiQWRkTW9iaWxlTnVtYmVyXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVBob25lPlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkVXNlckRlcGFydG1lbnRcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJBZGRTZW5kQWN0aXZhdGlvbkVtYWlsXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJBZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChvbkNoYW5nZSk9XCJjaGFuZ2VQZXJtaXNzaW9uU2V0KCRldmVudCwgdHJ1ZSlcIiBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvblNldFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Qcm9maWxlSW1hZ2VVcGxvYWRlciBbb3B0aW9uc109XCJBZGRQcm9maWxlSW1hZ2VcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtUHJvZmlsZUltYWdlVXBsb2FkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAjQ2xvc2VVc2VyTW9kYWxcclxuICAgICAgICAgIGlkPVwiQ2xvc2VVc2VyTW9kYWxcIlxyXG4gICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRWRpdCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRWRpdFVzZXInKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFVzZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJFZGl0TW9iaWxlTnVtYmVyXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1QaG9uZT5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VXNlcm5hbWVcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdEVtYWlsXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTYW1BY2NvdW50XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRVc2VyRUlEXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJOYXRpb25hbGl0eVwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICBAaWYgKGlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBjdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSBwZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJlZGl0VXNlck9yZ2FuaXphdGlvblwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICB9XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlckRlcGFydG1lbnRcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChvbkNoYW5nZSk9XCJjaGFuZ2VQZXJtaXNzaW9uU2V0KCRldmVudCwgZmFsc2UpXCIgW29wdGlvbnNdPVwiRWRpdFVzZXJQZXJtaXNzaW9uU2V0XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlclBlcm1pc3Npb25zXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyIFtvcHRpb25zXT1cIkVkaXRQcm9maWxlSW1hZ2VcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgI0Nsb3NlRWRpdFVzZXJNb2RhbFxyXG4gICAgICAgICAgaWQ9XCJDbG9zZUVkaXRVc2VyTW9kYWxcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBEZWFjdGl2YXRlL0FjdGl2YXRlIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQWN0aXZhdGVVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlJykgfX1cclxuICAgICAgPC9oMT5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlJykgfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIj5cclxuICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVhY3RpdmF0ZUNvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cIlNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZUNvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJcIiBjbGFzcz1cIlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBFbWFpbCB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgI0Nsb3NlQWN0aXZhdGVVc2VyTW9kYWxcclxuICAgICAgICBpZD1cIkNsb3NlQWN0aXZhdGVVc2VyTW9kYWxcIlxyXG4gICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIChjbGljayk9XCJkZWFjdGl2YXRlKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJTaG93QWN0aXZhdGVNb2RlbERhdGFcIiAoY2xpY2spPVwiYWN0aXZhdGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gUmVzZXRQYXNzd29yZCBVc2VyIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmRDb25maXJtYXRpb24nKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6Q29udGVudC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0yMDBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOYW1lJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0yMDBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyBOYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IEVtYWlsIH19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBpZD1cIkNsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbFwiXHJcbiAgICAgICAgI0Nsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRQYXNzd29yZCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gc2V0UGFzc3dvcmQgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNzZXRQYXNzd29yZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2V0UGFzc3dvcmQnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NldFBhc3N3b3JkQ29uZmlybWF0aW9uJykgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZCcpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDb25maXJtUGFzc3dvcmQnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPnt7IE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPnt7IEVtYWlsIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlBhc3N3b3JkXCIgW2dyb3VwXT1cIlNldFVzZXJQYXNzd29yZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUGFzc3dvcmRDb25maXJtYXRpb25cIiBbZ3JvdXBdPVwiU2V0VXNlclBhc3N3b3JkRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGlkPVwiQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFwiXHJcbiAgICAgICAgICAjQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBTZW5kIEFjdGl2YXRpb24gRW1haWwgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZW5kQWN0aXZhdGlvbkVtYWlsJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZUNvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RlIG5vdGUtd2FybmluZyB0ZXh0LWNlbnRlclwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGggPiAxXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aW9uJykgfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyB1c2VyLm5hbWVTdHIgfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7IHVzZXIudXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvbiBidG4tc21cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI0Nsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWxcclxuICAgICAgICBpZD1cIkNsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWxcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cInNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKClcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBjb25maXJtYXRpb24gTWVzc2FnZSAgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQ29uZmlybWF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NvbmZpcm1hdGlvbk1lc3NhZ2UnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IENvbmZpcm1hdGlvbk1lc3NhZ2UgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGggPiAxXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aW9uJykgfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyB1c2VyLm5hbWVTdHIgfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7IHVzZXIudXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gI0Nsb3NlQ29uZmlybWF0aW9uTW9kYWwgaWQ9XCJDbG9zZUNvbmZpcm1hdGlvbk1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9PSAxXCIgKGNsaWNrKT1cImFjdGl2YXRlVXNlckxpc3QoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9PSAyXCIgKGNsaWNrKT1cImRlYWN0aXZhdGVVc2VyTGlzdCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiQ29uZmlybWF0aW9uTW9kYWxUeXBlID09IDNcIiAoY2xpY2spPVwicmVzZXRVc2VyUGFzc3dvcmRMaXN0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGUgPT0gNFwiIChjbGljayk9XCJzZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcigpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
881
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy91c2Vycy91c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3VzZXJzL3VzZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFtQixjQUFjLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7QUFDeFQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU9oRCxNQUFNLE9BQU8sY0FBYztJQXdIekIsWUFBb0IsV0FBd0IsRUFBUyxjQUE4QixFQUFV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LE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0csZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ291bnRyeSwgQ3VzdG9tVmFsaWRhdGlvbiwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGhvbmVPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSwgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucywgSW1hZ2VUeXBlLCBQYWdpbmdDb21wb25lbnQsIFBlcm1pc3Npb25TZXRzLCBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgUGFnaW5nT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQWRkVXNlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Vc2VyTW9kZWxzL0FkZFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRHJvcGRvd25zUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRWRpdFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL3VzZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVc2VyTW9kZWxEVE8gfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVzZXJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9Vc2Vycy9cIjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBjb21wb25lbnRzXHJcbiAgVXNlcnNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgcGVybWlzc2lvblNldHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgYWNjb3VudFN0YXR1c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBsb2NrZWRTdGF0dXNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgZGVwYXJ0bWVudHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgb3JnYW5pemF0aW9uT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBwZXJtaXNzaW9uU2V0c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBsb2NrZWRTdGF0dXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgYWNjb3VudFN0YXR1c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBkZXBhcnRtZW50c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBvcmdhbml6YXRpb25zRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSXNGaWx0ZXJEYXRhTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgVXNlclBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBjbGllbnRTaWRlUGFnaW5nUmVzdWx0OiBVc2VyTW9kZWxEVE9bXSA9IFtdO1xyXG4gIFVzZXJQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZCgnVXNlclBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIFJlcXVpcmVkIGxpc3RzXHJcbiAgU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gIHBlcm1pc3Npb25TZXRMaXN0ID0gW107XHJcbiAgcGVybWlzc2lvbnNMaXN0ID0gW107XHJcbiAgYWNjb3VudFN0YXR1c0xpc3QgPSBbXTtcclxuICBsb2NrZWRTdGF0dXNMaXN0ID0gW107XHJcbiAgZGVwYXJ0bWVudHNMaXN0ID0gW107XHJcbiAgY291bnRyaWVzTGlzdCA9IFtdO1xyXG4gIG9yZ2FuaXphdGlvbkxpc3QgPSBbXTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgncGVybWlzc2lvblNldERETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZXJtaXNzaW9uU2V0RERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnYWNjb3VudFN0YXR1c0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBhY2NvdW50U3RhdHVzRERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbG9ja2VkU3RhdHVzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2tlZFN0YXR1c0RETDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlcGFydG1lbnRzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlcGFydG1lbnRzRERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnb3JnYW5pemF0aW9uRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIG9yZ2FuaXphdGlvbkRETDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIEFkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkVXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEFkZE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEFkZFVzZXJuYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRTYW1BY2NvdW50OiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyRGVwYXJ0bWVudDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNlbmRBY3RpdmF0aW9uRW1haWw6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBBZGRVc2VyUGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFByb2ZpbGVJbWFnZTogUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucztcclxuICBBZGRVc2VyRUlEOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyTmF0aW9uYWxpdHk6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIGFkZFVzZXJPcmdhbml6YXRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0TmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEVkaXRVc2VybmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdEVtYWlsOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0U2FtQWNjb3VudDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFVzZXJEZXBhcnRtZW50OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFVzZXJQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGVkaXRVc2VyT3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFByb2ZpbGVJbWFnZTogUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucztcclxuICBFZGl0VXNlckVJRDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFVzZXJOYXRpb25hbGl0eTogRHJvcGRvd25PcHRpb25zO1xyXG4gIFVzZXJJZDogc3RyaW5nO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIERlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNob3dBY3RpdmF0ZU1vZGVsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdDogYW55W10gPSBbXTtcclxuICBOYW1lOiBzdHJpbmc7XHJcbiAgRW1haWw6IHN0cmluZztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9SZXNldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgUmVzZXRQYXNzd29yZFVzZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAvL3NldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgU2V0VXNlclBhc3N3b3JkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIFBhc3N3b3JkOiBUZXh0Qm94T3B0aW9ucztcclxuICBQYXNzd29yZENvbmZpcm1hdGlvbjogVGV4dEJveE9wdGlvbnM7XHJcbiAgY3VzdG9tVmFsaWRhdGlvbjogQ3VzdG9tVmFsaWRhdGlvbiA9IG5ldyBDdXN0b21WYWxpZGF0aW9uKCk7XHJcbiAgc2V0UGFzc3dvcmRVc2VyVG9rZW46IHN0cmluZztcclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXNlcnMgc2VsZWN0aW9uXHJcbiAgYWN0aXZhdGVkVXNlcnNTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICBkZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgc2hvd0FjdGl2YXRlQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlYWN0aXZhdGVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2V0UGFzc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZXNldFBhc3NCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2VuZEVtYWlsQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dlbmVyYWxCdG5zOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50VXNlclByb2ZpbGU6IGFueTtcclxuICBwZXJtaXNzaW9uU2V0cyA9IFBlcm1pc3Npb25TZXRzO1xyXG4gIGlzTXVsdGlUZW5hbmN5QWxsb3dlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLFxyXG4gICAgICAgIHBhdGg6ICcvQWRtaW4vSG9tZScsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBwYXRoOiAnJyxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLlByb2R1Y3Rpb25Nb2RlID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0UHJvZHVjdGlvbk1vZGUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICAgIHRoaXMuY3VycmVudFVzZXJQcm9maWxlID0gdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnByb2ZpbGU7XHJcbiAgICB0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFsbG93TXVsdGlUZW5hbmN5KCk7XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRVc2Vyc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHNlYXJjaENsaWVudFNpZGUoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0LmZpbHRlcihcclxuICAgICAgICBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIChpdGVtLm5hbWUuZW5nbGlzaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGl0ZW0ubmFtZS5hcmFiaWMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBpdGVtLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLlVzZXJQYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gSW5pdGlhbGl6ZSBmaWx0ZXJzIGFuZCBwYWdpbmdcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuXHJcbiAgICAvLyBQZXJtaXNzaW9uIFNldHMgaW5pdFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5uYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMucGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIC8vIEFjY291bnQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLm5hbWUgPSBcImFjY291bnRzdGF0dXNcIjtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMubGFiZWxLZXkgPSBcIkFjY291bnRTdGF0dXNcIjtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBMb2NrZWQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5uYW1lID0gXCJsb2NrZWRzdGF0dXNcIjtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5sYWJlbEtleSA9IFwiTG9ja2VkU3RhdHVzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZXBhcnRtZW50cyBpbml0XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLm5hbWUgPSBcImRlcGFydG1lbnRzXCI7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5uYW1lID0gXCJvcmdhbml6YXRpb25cIjtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5sYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uc1wiO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbk9wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gubmFtZSA9IFwic2VhcmNoVGV4dEJveFwiO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmV4dHJhQ2xhc3NlcyA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5wbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZU9yRW1haWxcIik7XHJcblxyXG5cclxuICAgIC8vRmlsdGVyc1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5zZWFyY2hUZXh0Qm94Lm5hbWU7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJuYW1lRmlsdGVyXCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3g7XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLm5hbWU7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIlBlcm1pc3Npb25TZXRJZHNcIjtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJhY2NvdW50U3RhdHVzSURzXCI7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5uYW1lO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwibG9ja2VkU3RhdHVzSWRzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5kZXBhcnRtZW50c09wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiZGVwYXJ0bWVudElkc1wiO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgdGhpcy5Vc2VyUGFnaW5nLmZpbHRlcnMgPSB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycyA/PyBbXTtcclxuICAgICAgdGhpcy5Vc2VyUGFnaW5nLmRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyA9IHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPz8gW107XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLm5hbWU7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3Q7XHJcblxyXG4gICAgICB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycy5wdXNoKHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlcik7XHJcbiAgICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMucHVzaCh0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0VXNlcnNCeUZpbHRlcic7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmcub25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXHJcbiAgICAgIC4uLnRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMsXHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycyA9IFtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlcixcclxuICAgICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIsXHJcbiAgICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlcixcclxuICAgICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlcixcclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXJcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmcucmVzZXRGaWx0ZXJCdXR0b25OYW1lID0gXCJ1c2Vyc0ZpbHRlcnNCdG5cIjtcclxuXHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBMb2FkIGxpc3RzIGZvciBmaWx0ZXJzXHJcbiAgbG9hZExpc3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBEcm9wZG93bnNSZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwucGVybWVzc2lvbnNldHM7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50U3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuYWNjb3VudFN0YXR1cztcclxuICAgICAgICB0aGlzLmxvY2tlZFN0YXR1c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmxvY2tlZFN0YXR1cztcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuZGVwYXJ0bWVudHM7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5vcmdhbml6YXRpb25zO1xyXG5cclxuICAgICAgICBsZXQgcGVybWlzc2lvblNldEVsZW1lbnQgPSB0aGlzLnBlcm1pc3Npb25TZXREREw7XHJcbiAgICAgICAgbGV0IGFjY291bnRTdGF0dXNFbGVtZW50ID0gdGhpcy5hY2NvdW50U3RhdHVzRERMO1xyXG4gICAgICAgIGxldCBsb2NrZWRTdGF0dXNFbGVtZW50ID0gdGhpcy5sb2NrZWRTdGF0dXNEREw7XHJcbiAgICAgICAgbGV0IGRlcGFydG1lbnRzRWxlbWVudCA9IHRoaXMuZGVwYXJ0bWVudHNEREw7XHJcbiAgICAgICAgbGV0IG9yZ2FuaXphdGlvbnNFbGVtZW50ID0gdGhpcy5vcmdhbml6YXRpb25EREw7XHJcblxyXG4gICAgICAgIHBlcm1pc3Npb25TZXRFbGVtZW50LnVwZGF0ZURhdGFTb3VyY2UodGhpcy5wZXJtaXNzaW9uU2V0TGlzdCk7XHJcbiAgICAgICAgYWNjb3VudFN0YXR1c0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLmFjY291bnRTdGF0dXNMaXN0KTtcclxuICAgICAgICBsb2NrZWRTdGF0dXNFbGVtZW50LnVwZGF0ZURhdGFTb3VyY2UodGhpcy5sb2NrZWRTdGF0dXNMaXN0KTtcclxuICAgICAgICBkZXBhcnRtZW50c0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLmRlcGFydG1lbnRzTGlzdCk7XHJcbiAgICAgICAgb3JnYW5pemF0aW9uc0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLm9yZ2FuaXphdGlvbkxpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBVc2VycyBjaGVja2JveGVzIHNlbGVjdGlvbiBmdW5jdGlvbnNcclxuICBzZWxlY3RBbGxVc2VyTGlzdChldmVudCwgVXNlcnM6IGFueVtdKSB7XHJcbiAgICBpZiAodGhpcy5Vc2VyUGFnaW5nUmVzdWx0ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZXZlbnQuY2hlY2tlZCk7XHJcblxyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFVzZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVc2Vyc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnB1c2godXNlcik7XHJcbiAgICAgICAgaWYgKHVzZXIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5pc0FjdGl2ZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSkubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gIWl0ZW0uaXNBY3RpdmU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID0gMDtcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyTGlzdChldmVudCwgVXNlcikge1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZpbmQodSA9PiB1LmlkID09PSBVc2VyLmlkKS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5Vc2VyUGFnaW5nUmVzdWx0ICE9IG51bGwgJiYgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmV2ZXJ5KHUgPT4gdS5zZWxlY3RlZCk7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgICAgaWYgKFVzZXIuaXNBY3RpdmUpXHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUuaWQgPT0gVXNlci5pZCkgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoVXNlci5pc0FjdGl2ZSlcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkIC09IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZUJ1dHRvbnMoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJGcm9tTGlzdCh1c2VyOiBhbnkpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5maW5kKHUgPT4gdS5pZCA9PT0gdXNlci5pZCkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHVzZXIpO1xyXG4gICAgaWYgKHVzZXIuaXNBY3RpdmUpXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZUJ1dHRvbnMoKSB7XHJcbiAgICAvL1Jlc2V0IGFsbCBidG5zXHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwICYmIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApXHJcbiAgICAgIHRoaXMuc2hvd0dlbmVyYWxCdG5zID0gdHJ1ZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IGZhbHNlO1xyXG5cclxuICAgICAgLy9pZiBvbmx5IGFjdGl2YXRlZCB1c2Vyc1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGVhY3RpdmF0ZUJ0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApICAgICAvL2lmIG9ubHkgZGVBY3RpdmF0ZWQgdXNlcnNcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd0FjdGl2YXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZW5kRW1haWxCdG4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPiAwKSAvL2lmIGFjdGl2YXRlZCBhbmQgZGVhY3RpdmF0ZWQgdXNlcnMgc2VsZWN0ZWRcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVCdXR0b25zKCkge1xyXG4gICAgLy9SZXNldCBhbGwgYnRuc1xyXG4gICAgdGhpcy5zaG93QWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0RlYWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlbmRFbWFpbEJ0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldFVzZXJzQ291bnQoKSB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gQWRkIFVzZXJcclxuICBzaG93QWRkVXNlck1vZGFsKGFkZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblxyXG4gICAgICBsZXQgRHJvcGRvd25zUmVzcG9uc2VNb2RlbCA9IHJlc3VsdCBhcyBEcm9wZG93bnNSZXNwb25zZU1vZGVsO1xyXG4gICAgICAvL1NldCByZXF1aXJlZCBsaXN0c1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5wZXJtZXNzaW9uc2V0cztcclxuICAgICAgdGhpcy5kZXBhcnRtZW50c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmNvdW50cmllcztcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5vcmdhbml6YXRpb25zO1xyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5BZGRVc2VyRm9ybTtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkVXNlck1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgICAgdGhpcy5BZGROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIubmFtZSA9IFwiUGhvbmVJbnB1dE1vYmlsZVwiO1xyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5sYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCI7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmV4dHJhQ2xhc3NlcyA9IFwiZm9ybS1jb250cm9sIGJuc2lnaHRzLWNvbnRyb2xcIjtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuc2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXM7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUubmFtZSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQudmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudFwiO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmRhdGFTb3VyY2UgPSB0aGlzLmRlcGFydG1lbnRzTGlzdDtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLm5hbWUgPSBcIlNlbmRBY3RpdmF0aW9uTWFpbFwiO1xyXG4gICAgICB0aGlzLkFkZFNlbmRBY3RpdmF0aW9uRW1haWwubGFiZWxLZXkgPSBcIlNlbmRBY3RpdmF0aW9uRW1haWxcIjtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQubmFtZSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5sYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5pc1JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubmFtZSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubGFiZWxLZXkgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuZGF0YVNvdXJjZSA9IHRoaXMuY291bnRyaWVzTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFVzZXJFSUQubmFtZSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC50eXBlID0gSW5wdXRUeXBlLkVJRDtcclxuICAgICAgdGhpcy5BZGRVc2VyRUlELnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlID0gbmV3IFByb2ZpbGVJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIjtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubGFiZWxWYWx1ZSA9IFwiUHJvZmlsZUltYWdlXCI7XHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkFkZFByb2ZpbGVJbWFnZS5pbWFnZVVwbG9hZEFjY2VwdHNUeXBlcyA9IFtJbWFnZVR5cGUuSW1hZ2VUeXBlc107XHJcblxyXG4gICAgICB0aGlzLkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkLm5hbWUgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQubGFiZWxLZXkgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQudmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuYWRkVXNlck9yZ2FuaXphdGlvbnMubmFtZSA9IFwib3JnYW5pemF0aW9uSWRcIjtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLmxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIjtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYWRkVXNlck9yZ2FuaXphdGlvbnMuZGF0YVNvdXJjZSA9IHRoaXMub3JnYW5pemF0aW9uTGlzdDtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGRVc2VyT3JnYW5pemF0aW9ucy5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oYWRkVXNlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFVzZXJGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBhZGRNb2RlbCA9IG5ldyBBZGRVc2VyTW9kZWwoKTtcclxuICAgIGFkZE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBhZGRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIGFkZE1vZGVsLk5hdGlvbmFsaXR5ID0gUmVzdWx0TW9kZWwuTmF0aW9uYWxpdHk7XHJcbiAgICBhZGRNb2RlbC5FSUQgPSBSZXN1bHRNb2RlbC5FSUQ7XHJcbiAgICBhZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuXHJcbiAgICBhZGRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEID0gKHRoaXMuaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIHRoaXMuY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gdGhpcy5wZXJtaXNzaW9uU2V0cy5BZG1pbilcclxuICAgICAgPyBSZXN1bHRNb2RlbFt0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLm5hbWVdXHJcbiAgICAgIDogdGhpcy5jdXJyZW50VXNlclByb2ZpbGUub3JnYW5pemF0aW9uR1VJRF9JRCA/PyBDb25zdGFudHMuT3JnYW5pemF0aW9uSURfR1VJRDtcclxuXHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEX0dVSUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBhZGRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCA9IFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEO1xyXG5cclxuICAgIGxldCBQZXJtaXNzaW9uU2V0cyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25TZXRzIGFzIHN0cmluZ1tdO1xyXG4gICAgYWRkTW9kZWwuUGVybWlzc2lvblNldHMgPSBQZXJtaXNzaW9uU2V0cztcclxuICAgIGxldCBQZXJtaXNzaW9ucyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25zIGFzIHN0cmluZ1tdO1xyXG4gICAgYWRkTW9kZWwuUGVybWlzc2lvbnMgPSBQZXJtaXNzaW9ucztcclxuICAgIGFkZE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbCA9IFJlc3VsdE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbDtcclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgYWRkTW9kZWwuUGhvbmVJbnB1dE1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBhZGRNb2RlbC5Qcm9maWxlSW1hZ2UgPSBSZXN1bHRNb2RlbC5JbWFnZTtcclxuICAgIGFkZE1vZGVsLkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkID0gUmVzdWx0TW9kZWwuRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQ7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goYWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0QWRkVXNlckZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLkFkZFVzZXIoQWRkTW9kZWwpO1xyXG4gIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IFVzZXJcclxuICBzaG93RWRpdFVzZXJNb2RhbCh1c2VySUQ6IHN0cmluZywgRWRpdFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuVXNlcklkID0gdXNlcklEO1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0RWRpdFVzZXIodXNlcklEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgbGV0IHVzZXIgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIGxldCBsaXN0cyA9IHJlc3VsdE9iai5saXN0cyBhcyBEcm9wZG93bnNSZXNwb25zZU1vZGVsO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IGxpc3RzLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBsaXN0cy5jb3VudHJpZXM7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uTGlzdCA9IGxpc3RzLm9yZ2FuaXphdGlvbnM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLkVkaXRVc2VyRm9ybTtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG4gICAgICBsZXQgTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIE5hbWUuZW5nbGlzaCA9IHVzZXIubmFtZS5lbmdsaXNoO1xyXG4gICAgICBOYW1lLmFyYWJpYyA9IHVzZXIubmFtZS5hcmFiaWM7XHJcblxyXG4gICAgICB0aGlzLkVkaXROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS52YWx1ZSA9IE5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIudmFsdWUgPSB1c2VyLm1vYmlsZSBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5uYW1lID0gXCJQaG9uZUlucHV0TW9iaWxlXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5sYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5leHRyYUNsYXNzZXMgPSBcImZvcm0tY29udHJvbCBibnNpZ2h0cy1jb250cm9sXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5zZWxlY3RlZENvdW50cnlJU08gPSBDb3VudHJ5LlVuaXRlZEFyYWJFbWlyYXRlcztcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5hbGxvd1NlYXJjaCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUudmFsdWUgPSB1c2VyLnVzZXJuYW1lO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5uYW1lID0gXCJVc2VybmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLnZhbHVlID0gdXNlci5lbWFpbDtcclxuICAgICAgdGhpcy5FZGl0RW1haWwubmFtZSA9IFwiRW1haWxcIjtcclxuICAgICAgdGhpcy5FZGl0RW1haWwubGFiZWxLZXkgPSBcIkVtYWlsXCI7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLnR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5tYXhMZW5ndGggPSAyNTY7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQudmFsdWUgPSB1c2VyLnNhbUFjY291bnQ7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50LmxhYmVsS2V5ID0gXCJTYW1BY2NvdW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQubGFiZWxLZXkgPSBcIkRlcGFydG1lbnRcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2VsZWN0ZWRJdGVtcyA9IHVzZXIuZGVwYXJ0bWVudElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LmRhdGFTb3VyY2UgPSB0aGlzLmRlcGFydG1lbnRzTGlzdDtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIHRoaXMuY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gdGhpcy5wZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5uYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24ubGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiO1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24uc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5kYXRhU291cmNlID0gdGhpcy5vcmdhbml6YXRpb25MaXN0O1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24uc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRVc2VyT3JnYW5pemF0aW9uLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0Lm5hbWUgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gdXNlci5wZXJtaXNzaW9uU2V0SURzLm1hcCgoaXRlbSkgPT4gaXRlbS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25TZXQuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvblNldExpc3Q7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uc1wiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IHVzZXIucGVybWlzc2lvbklEcy5tYXAoKGl0ZW0pID0+IGl0ZW0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uc0xpc3Q7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5Lm5hbWUgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5sYWJlbEtleSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmRhdGFTb3VyY2UgPSB0aGlzLmNvdW50cmllc0xpc3Q7XHJcbiAgICAgIGlmICh1c2VyLm5hdGlvbmFsaXR5KVxyXG4gICAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5zZWxlY3RlZEl0ZW1zID0gdXNlci5uYXRpb25hbGl0eTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC5uYW1lID0gXCJFSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudHlwZSA9IElucHV0VHlwZS5FSUQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRUlELnZhbHVlID0gdXNlci5laWQ7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UgPSBuZXcgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIjtcclxuICAgICAgdGhpcy5FZGl0UHJvZmlsZUltYWdlLmxhYmVsVmFsdWUgPSBcIlByb2ZpbGVJbWFnZVwiO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaW1hZ2VVcGxvYWRBY2NlcHRzVHlwZXMgPSBbSW1hZ2VUeXBlLkltYWdlVHlwZXNdO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UudmFsdWUgPSB1c2VyLnByb2ZpbGVJbWFnZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFVzZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgZ2V0RWRpdFVzZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0VXNlckZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IGVkaXRNb2RlbCA9IG5ldyBFZGl0VXNlck1vZGVsKCk7XHJcbiAgICBlZGl0TW9kZWwuSURfR1VJRCA9IHRoaXMuVXNlcklkO1xyXG4gICAgZWRpdE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBlZGl0TW9kZWwuRW1haWwgPSBSZXN1bHRNb2RlbC5FbWFpbDtcclxuICAgIGVkaXRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIGVkaXRNb2RlbC5OYXRpb25hbGl0eSA9IFJlc3VsdE1vZGVsLk5hdGlvbmFsaXR5O1xyXG4gICAgZWRpdE1vZGVsLkVJRCA9IFJlc3VsdE1vZGVsLkVJRDtcclxuICAgIGVkaXRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuXHJcbiAgICBlZGl0TW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRCA9ICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pXHJcbiAgICAgID8gUmVzdWx0TW9kZWxbdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5uYW1lXVxyXG4gICAgICA6IHRoaXMuY3VycmVudFVzZXJQcm9maWxlLm9yZ2FuaXphdGlvbkdVSURfSUQgPz8gQ29uc3RhbnRzLk9yZ2FuaXphdGlvbklEX0dVSUQ7XHJcblxyXG4gICAgaWYgKFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEICE9IHVuZGVmaW5lZClcclxuICAgICAgZWRpdE1vZGVsLkRlcGFydG1lbnRJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCk7XHJcblxyXG4gICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvblNldHMgYXMgc3RyaW5nW107XHJcbiAgICBlZGl0TW9kZWwuUGVybWlzc2lvblNldElEcyA9IFBlcm1pc3Npb25TZXRzO1xyXG4gICAgbGV0IFBlcm1pc3Npb25zID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvbnMgYXMgc3RyaW5nW107XHJcbiAgICBlZGl0TW9kZWwuUGVybWlzc2lvbklEcyA9IFBlcm1pc3Npb25zO1xyXG5cclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgZWRpdE1vZGVsLk1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBlZGl0TW9kZWwuUHJvZmlsZUltYWdlID0gUmVzdWx0TW9kZWwuSW1hZ2U7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goZWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH07XHJcbiAgZ2V0RWRpdFVzZXJGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuRWRpdFVzZXIoRWRpdE1vZGVsKTtcclxuICB9O1xyXG4gIGNoYW5nZVBlcm1pc3Npb25TZXQoaWRzLCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5Mb2FkUGVybWlzc2lvbnNEcm9wRG93bihpZHMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBkZGwgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGRkbDtcclxuICAgICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gRXhwb3J0IHVzZXJzIGV4Y2VsXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgZmlsdGVycyA9IHt9O1xyXG4gICAgZmlsdGVycyA9IHRoaXMucGFnaW5nRWxlbWVudC5nZXRGaWx0ZXJzVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkV4cG9ydChmaWx0ZXJzKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpICsgXCIueGxzeFwiO1xyXG4gICAgICBzYXZlQXMoZmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcblxyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vT25lIHVzZXIgZnVuY3Rpb25zXHJcblxyXG4gIC8vQWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIGZ1bmN0aW9uc1xyXG4gIHNob3dBY3RpdmF0ZVVzZXJNb2RhbChVc2VyOiBhbnksIGlzQWN0aXZhdGVNb2RlbDogYm9vbGVhbiwgQWN0aXZhdGVVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5BY3RpdmF0b3JEZWFjdGl2YXRlVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5TaG93QWN0aXZhdGVNb2RlbERhdGEgPSBpc0FjdGl2YXRlTW9kZWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFjdGl2YXRlVXNlck1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuQWN0aXZhdGVVc2Vycyh0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuRGVhY3RpdmF0ZVVzZXJzKHRoaXMuQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFJlc2V0IFBhc3N3b3JkIEZ1bmN0aW9uc1xyXG4gIHNob3dSZXNldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgUmVzZXRQYXNzd29yZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuUmVzZXRQYXNzd29yZFVzZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFJlc2V0UGFzc3dvcmRVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZXNldFBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9TZW5kIGFjdGl2YXRpb24gbWFpbCBmdW5jdGlvblxyXG4gIHNob3dTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwoVXNlcjogYW55LCBTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLlNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9TZXQgcGFzc3dvcmQgZnVuY3Rpb25cclxuXHJcbiAgc2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRTZXRQQXNzd29yZE1vZGVsO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFNldFBhc3N3b3JkRnVuY3Rpb247XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMucGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG5cclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5zZXRQYXNzd29yZFVzZXJUb2tlbiA9IFVzZXIudG9rZW47XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5QYXNzd29yZC5uYW1lID0gXCJQYXNzd29yZFwiO1xyXG4gICAgdGhpcy5QYXNzd29yZC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZC50eXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgdGhpcy5QYXNzd29yZC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5ID0gKGNvbnRyb2wpID0+IHtcclxuICAgICAgbGV0IFBhc3N3b3JkID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtLmNvbnRyb2xzW1wiUGFzc3dvcmRcIl0udmFsdWU7XHJcbiAgICAgIGlmIChjb250cm9sLnZhbHVlICE9IFBhc3N3b3JkKVxyXG4gICAgICAgIHJldHVybiB7ICdjdXN0b21lckVycm9yJzogdHJ1ZSB9O1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24ubWFzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBhc3N3b3JkTm90TWF0Y2hcIik7XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5uYW1lID0gXCJQYXNzd29yZENvbmZpcm1hdGlvblwiO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi50eXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IFt0aGlzLmN1c3RvbVZhbGlkYXRpb25dO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oc2V0UGFzc3dvcmRVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuICBnZXRTZXRQQXNzd29yZE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgUmVzdWx0TW9kZWwudG9rZW4gPSB0aGlzLnNldFBhc3N3b3JkVXNlclRva2VuO1xyXG4gICAgUmVzdWx0TW9kZWwuaXNBZG1pblNldCA9IHRydWU7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goUmVzdWx0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0U2V0UGFzc3dvcmRGdW5jdGlvbiA9ICh1c2VyUGFzc3dvcmRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5TZXRVc2Vyc1Bhc3N3b3JkKHVzZXJQYXNzd29yZE1vZGVsKTtcclxuICB9O1xyXG5cclxuICBvblN1Ym1pdFN1Y2Nlc3MgPSAocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gIH07XHJcblxyXG4gIC8vVXNlcnMgTGlzdCBGdW5jdGlvbnNcclxuXHJcbiAgLy9TaG93IGFjdGl2YXRlLGRlYWN0aXZhdGUscmVzZXRQYXNzd29yZCxzZW5kYWN0aXZhdGlvbmVtYWlsIG1vZGFsc1xyXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbCh0eXBlOiBudW1iZXIsIENvbmZpcm1hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKTtcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSAzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25NYWlsQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gNDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvbmZpcm1hdGlvbk1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG4gIC8vQWN0aXZhdGUgdXNlcnMgbGlzdFxyXG4gIGFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkFjdGl2YXRlVXNlcnModGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9EZWFjdGl2YXRlIHVzZXJzIGxpc3RcclxuICBkZWFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkRlYWN0aXZhdGVVc2Vycyh0aGlzLlNlbGVjdGVkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICAvL1Jlc2V0IHBhc3N3b3JkcyB1c2VycyBsaXN0XHJcbiAgcmVzZXRVc2VyUGFzc3dvcmRMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiAqbmdJZj1cIlNob3dQYWdlQ29udGVudFwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPCEtLSBiZWdpbjo6SGVhZGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlcnNGb3JtXCI+XHJcbiAgICAgICAgICA8IS0tIChvbkNoYW5nZSk9XCJzZWFyY2hDbGllbnRTaWRlKCRldmVudClcIiAtLT5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgbmdiRHJvcGRvd24gY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7IGRpc3BsYXk6IFNob3dQYWdlQ29udGVudCA9PSB0cnVlID8gJ2Jsb2NrJyA6ICdub25lJyB9XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTGlzdHMoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBpZD1cIkZpbHRlcnNEcm9wZG93blwiIHRpdGxlPVwiRmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdGaWx0ZXInKSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiRmlsdGVyc0Ryb3Bkb3duXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5IHctMjUwcHggdy1tZC01MDBweCBmdy1ib2xkIHB5LTMgZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlcnNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTcgcHktNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjcGVybWlzc2lvblNldERETCBbb3B0aW9uc109XCJwZXJtaXNzaW9uU2V0c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNhY2NvdW50U3RhdHVzRERMIFtvcHRpb25zXT1cImFjY291bnRTdGF0dXNPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIlVzZXJzRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjbG9ja2VkU3RhdHVzRERMIFtvcHRpb25zXT1cImxvY2tlZFN0YXR1c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNkZXBhcnRtZW50c0RETCBbb3B0aW9uc109XCJkZXBhcnRtZW50c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc011bHRpVGVuYW5jeUFsbG93ZWQgJiYgY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gcGVybWlzc2lvblNldHMuQWRtaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI29yZ2FuaXphdGlvbkRETCBbb3B0aW9uc109XCJvcmdhbml6YXRpb25PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeSBwdi1yZXNldCBidG4tc21cIiBuYW1lPVwidXNlcnNGaWx0ZXJzQnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUmVzZXQnKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtMyBibnNpZ2h0cy1idG4tZXhwb3J0XCIgdGl0bGU9XCJFeHBvcnRcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWRvd25sb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFeHBvcnQnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93QWN0aXZhdGVCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5BY3RpdmF0ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDEsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaXN0b3J5XCI+PC9pPiB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZScpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dEZWFjdGl2YXRlQnRuXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuRGVhY3RpdmF0ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDIsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wb3dlci1vZmZcIj48L2k+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVhY3RpdmF0ZScpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dSZXNldFBhc3NCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5SZXNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgzLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PC9pPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93U2VuZEVtYWlsQnRuXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuUmVzZW5kQWN0aXZhdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCg0LCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZW52ZWxvcGVcIj48L2k+IHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NlbmRBY3RpdmF0aW9uRW1haWwnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dBZGRVc2VyTW9kYWwoYWRkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWRkJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICA8IS0tIGJlZ2luOjpCb2R5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB1c2Vycy10YWJsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInctNTBweFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInNlbGVjdEFsbFVzZXJMaXN0KCRldmVudCwgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdClcIiBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICZuYnNwOzxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTW9iaWxlJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUm9sZXMnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTdGF0dXMnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gcGVybWlzc2lvblNldHMuQWRtaW5cIiBjbGFzcz1cIm1pbi13LTE1MHB4XCI+XHJcbiAgICAgICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdPcmdhbml6YXRpb25zJykgfX1cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3Rpb24nKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdXNlciBvZiBjbGllbnRTaWRlUGFnaW5nUmVzdWx0XCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLXNtIGZvcm0tY2hlY2stY3VzdG9tIGZvcm0tY2hlY2stc29saWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidXBkYXRlVXNlckxpc3QoJGV2ZW50LCB1c2VyKVwiIFsobmdNb2RlbCldPVwidXNlci5zZWxlY3RlZFwiPiA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTM1cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzeW1ib2wtbGFiZWwgZm9udC1zaXplLWg1IGZvbnQtd2VpZ2h0LWJvbGQgYmctbGlnaHQtcHJpbWFyeSBtbC0yIG1iLTAgbWUtM1wiPkE8L2g2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlci5pRF9HVUlELCBFZGl0VXNlck1vZGFsKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmsgZnctYm9sZGVyIHRleHQtaG92ZXItcHJpbWFyeSBmcy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyLm5hbWVTdHIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgdXNlci51c2VybmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHVzZXIubW9iaWxlID8/ICctJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHVzZXIucGVybWlzc2lvbnNldCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlID09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aXZlJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlID09IGZhbHNlICYmIHVzZXIuYWN0aXZhdGlvbkRhdGUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlZCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmdcIiAqbmdJZj1cInVzZXIuaXNBY3RpdmUgPT0gZmFsc2UgJiYgdXNlci5hY3RpdmF0aW9uRGF0ZSA9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1BlbmRpbmdBY3RpdmF0aW9uJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHBlcm1pc3Npb25TZXRzLkFkbWluXCI+e3sgdXNlci5vcmdhbml6YXRpb25OYW1lID8/ICctJyB9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSBjbGFzcz1cIm1hdC1tZW51LWNvbnRlbnRcIiAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlci5pRF9HVUlELCBFZGl0VXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VkaXQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlXCIgaWQ9XCJidG5EZWFjdGl2YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QWN0aXZhdGVVc2VyTW9kYWwodXNlciwgZmFsc2UsIEFjdGl2YXRlVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlYWN0aXZhdGUnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5hY3RpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FjdGl2YXRlVXNlck1vZGFsKHVzZXIsIHRydWUsIEFjdGl2YXRlVXNlck1vZGFsKVwiICpuZ0lmPVwiIXVzZXIuaXNBY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZScpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwodXNlciwgUmVzZXRQYXNzd29yZFVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdSZXNldFBhc3N3b3JkJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93c2V0UGFzc3dvcmRVc2VyTW9kYWwodXNlciwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2V0UGFzc3dvcmQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5pc0FjdGl2ZSAmJiB1c2VyLmFjdGl2YXRpb25EYXRlID09IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwodXNlciwgU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NlbmRBY3RpdmF0aW9uRW1haWwnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImNsaWVudFNpZGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjZcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPCEtLSBlbmQ6OlRhYmxlIC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBlbmQ6OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgIDwhLS0gYmVnaW4gcGFnaW5nLS0+XHJcbiAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0VXNlcnNMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiVXNlclBhZ2luZ1wiXHJcbiAgICAgICAgW2dyb3VwXT1cIlVzZXJzRm9ybVwiICNVc2VyUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwhLS0gRW5kIHBhZ2luZy0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBhZGQgdXNlci0tPlxyXG48bmctdGVtcGxhdGUgI2FkZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIlxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWRkVXNlcicpIH19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRVc2VyRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJBZGROYW1lXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkVXNlcm5hbWVcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGRTYW1BY2NvdW50XCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkVXNlckVJRFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkVXNlck5hdGlvbmFsaXR5XCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgQGlmIChpc011bHRpVGVuYW5jeUFsbG93ZWQgJiYgY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gcGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImFkZFVzZXJPcmdhbml6YXRpb25zXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgfVxyXG4gICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJBZGRNb2JpbGVOdW1iZXJcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtUGhvbmU+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyRGVwYXJ0bWVudFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkFkZFNlbmRBY3RpdmF0aW9uRW1haWxcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKG9uQ2hhbmdlKT1cImNoYW5nZVBlcm1pc3Npb25TZXQoJGV2ZW50LCB0cnVlKVwiIFtvcHRpb25zXT1cIkFkZFVzZXJQZXJtaXNzaW9uU2V0XCJcclxuICAgICAgICBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkVXNlclBlcm1pc3Npb25zXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtUHJvZmlsZUltYWdlVXBsb2FkZXIgW29wdGlvbnNdPVwiQWRkUHJvZmlsZUltYWdlXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZVVzZXJNb2RhbCBpZD1cIkNsb3NlVXNlck1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIEVkaXQgdXNlci0tPlxyXG48bmctdGVtcGxhdGUgI0VkaXRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VkaXRVc2VyJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRVc2VyRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJFZGl0TmFtZVwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgPEJCU0YtUGhvbmUgW29wdGlvbnNdPVwiRWRpdE1vYmlsZU51bWJlclwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtUGhvbmU+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFVzZXJuYW1lXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRFbWFpbFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0U2FtQWNjb3VudFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VXNlckVJRFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRVc2VyTmF0aW9uYWxpdHlcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgQGlmIChpc011bHRpVGVuYW5jeUFsbG93ZWQgJiYgY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gcGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImVkaXRVc2VyT3JnYW5pemF0aW9uXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIH1cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRVc2VyRGVwYXJ0bWVudFwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKG9uQ2hhbmdlKT1cImNoYW5nZVBlcm1pc3Npb25TZXQoJGV2ZW50LCBmYWxzZSlcIiBbb3B0aW9uc109XCJFZGl0VXNlclBlcm1pc3Npb25TZXRcIlxyXG4gICAgICAgIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJQZXJtaXNzaW9uc1wiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Qcm9maWxlSW1hZ2VVcGxvYWRlciBbb3B0aW9uc109XCJFZGl0UHJvZmlsZUltYWdlXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Qcm9maWxlSW1hZ2VVcGxvYWRlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiICNDbG9zZUVkaXRVc2VyTW9kYWwgaWQ9XCJDbG9zZUVkaXRVc2VyTW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gRGVhY3RpdmF0ZS9BY3RpdmF0ZSBVc2VyIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0FjdGl2YXRlVXNlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiXHJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVhY3RpdmF0ZScpIH19XHJcbiAgICAgIDwvaDE+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cIlNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZScpIH19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCIgKm5nSWY9XCIhU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlYWN0aXZhdGVDb25maXJtYXRpb24nKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCIgKm5nSWY9XCJTaG93QWN0aXZhdGVNb2RlbERhdGFcIj5cclxuICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aXZhdGVDb25maXJtYXRpb24nKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6Q29udGVudC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwiXCIgY2xhc3M9XCJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgaWQ9XCJ0YWJsZUNvbmZpcm1hdGlvblwiIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW1haWwnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBOYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgRW1haWwgfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlQWN0aXZhdGVVc2VyTW9kYWwgaWQ9XCJDbG9zZUFjdGl2YXRlVXNlck1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIiAoY2xpY2spPVwiZGVhY3RpdmF0ZSgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgKGNsaWNrKT1cImFjdGl2YXRlKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIFJlc2V0UGFzc3dvcmQgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNSZXNldFBhc3N3b3JkVXNlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiXHJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdSZXNldFBhc3N3b3JkJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdSZXNldFBhc3N3b3JkQ29uZmlybWF0aW9uJykgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMjAwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMjAwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW1haWwnKSB9fTwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJ0ckl0ZW1cIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1kYXJrXCI+e3sgTmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBFbWFpbCB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uIGlkPVwiQ2xvc2VSZXNldFBhc3N3b3JkVXNlck1vZGFsXCIgI0Nsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbCB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0UGFzc3dvcmQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIHNldFBhc3N3b3JkIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2V0UGFzc3dvcmRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NldFBhc3N3b3JkJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZXRQYXNzd29yZENvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJTZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOYW1lJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW1haWwnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmQnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ29uZmlybVBhc3N3b3JkJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ckl0ZW1cIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj57eyBOYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj57eyBFbWFpbCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJQYXNzd29yZFwiIFtncm91cF09XCJTZXRVc2VyUGFzc3dvcmRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlBhc3N3b3JkQ29uZmlybWF0aW9uXCIgW2dyb3VwXT1cIlNldFVzZXJQYXNzd29yZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uIGlkPVwiQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFwiICNDbG9zZXNldFBhc3N3b3JkVXNlck1vZGFsIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFNlbmQgQWN0aXZhdGlvbiBFbWFpbCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NlbmRBY3RpdmF0aW9uRW1haWwnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlQ29uZmlybWF0aW9uJykgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGUgbm90ZS13YXJuaW5nIHRleHQtY2VudGVyXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW1haWwnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwXCIgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3Rpb24nKSB9fVxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyB1c2VyLm5hbWVTdHIgfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7IHVzZXIudXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvbiBidG4tc21cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uICNDbG9zZUFjdGl2YXRpb25FbWFpbE1vZGFsIGlkPVwiQ2xvc2VBY3RpdmF0aW9uRW1haWxNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiAoY2xpY2spPVwic2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIGNvbmZpcm1hdGlvbiBNZXNzYWdlICBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNDb25maXJtYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIlxyXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ29uZmlybWF0aW9uTWVzc2FnZScpIH19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAge3sgQ29uZmlybWF0aW9uTWVzc2FnZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6Q29udGVudC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW1haWwnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwXCIgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3Rpb24nKSB9fVxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyB1c2VyLm5hbWVTdHIgfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7IHVzZXIudXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gI0Nsb3NlQ29uZmlybWF0aW9uTW9kYWwgaWQ9XCJDbG9zZUNvbmZpcm1hdGlvbk1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiQ29uZmlybWF0aW9uTW9kYWxUeXBlID09IDFcIiAoY2xpY2spPVwiYWN0aXZhdGVVc2VyTGlzdCgpXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGUgPT0gMlwiIChjbGljayk9XCJkZWFjdGl2YXRlVXNlckxpc3QoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiQ29uZmlybWF0aW9uTW9kYWxUeXBlID09IDNcIiAoY2xpY2spPVwicmVzZXRVc2VyUGFzc3dvcmRMaXN0KClcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9PSA0XCIgKGNsaWNrKT1cInNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKClcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19