tin-spa 2.3.12 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/esm2020/lib/classes/Classes.mjs +1 -179
  2. package/esm2020/lib/classes/LibClasses.mjs +179 -0
  3. package/esm2020/lib/classes/TinCore.mjs +10 -1
  4. package/esm2020/lib/components/date/date.component.mjs +3 -3
  5. package/esm2020/lib/components/datetime/datetime.component.mjs +6 -3
  6. package/esm2020/lib/components/email/email.component.mjs +131 -0
  7. package/esm2020/lib/components/form/form.component.mjs +27 -10
  8. package/esm2020/lib/components/money/money.component.mjs +3 -3
  9. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +2 -2
  10. package/esm2020/lib/components/number/number.component.mjs +3 -3
  11. package/esm2020/lib/components/option/option.component.mjs +6 -3
  12. package/esm2020/lib/components/search/search.component.mjs +3 -3
  13. package/esm2020/lib/components/select/select.component.mjs +3 -3
  14. package/esm2020/lib/components/table/detailsDialog.component.mjs +14 -4
  15. package/esm2020/lib/components/table/table.component.mjs +3 -3
  16. package/esm2020/lib/components/table-header/table-header.component.mjs +67 -12
  17. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +16 -2
  18. package/esm2020/lib/components/table-internal/table-internal.component.mjs +3 -3
  19. package/esm2020/lib/components/table-row/table-row.component.mjs +21 -5
  20. package/esm2020/lib/components/text/text.component.mjs +3 -3
  21. package/esm2020/lib/modules/admin/admin-routing.module.mjs +22 -22
  22. package/esm2020/lib/modules/index/index-routing.module.mjs +4 -4
  23. package/esm2020/lib/modules/spa-admin.module.mjs +7 -7
  24. package/esm2020/lib/modules/spa-index.module.mjs +4 -4
  25. package/esm2020/lib/modules/spa-user.module.mjs +3 -3
  26. package/esm2020/lib/modules/user/user-routing.module.mjs +3 -3
  27. package/esm2020/lib/{components → pages}/accounts/accountDialog.component.mjs +3 -3
  28. package/esm2020/lib/pages/accounts/accounts.component.mjs +70 -0
  29. package/esm2020/lib/{components → pages}/bug/bug.component.mjs +1 -1
  30. package/esm2020/lib/pages/change-password/change-password.component.mjs +92 -0
  31. package/esm2020/lib/pages/create-account/create-account.component.mjs +110 -0
  32. package/esm2020/lib/pages/customers/customers.component.mjs +60 -0
  33. package/esm2020/lib/{components → pages}/departments/departments.component.mjs +2 -2
  34. package/esm2020/lib/{components → pages}/employees/employees.component.mjs +2 -2
  35. package/esm2020/lib/{components → pages}/grades/grades.component.mjs +1 -1
  36. package/esm2020/lib/pages/inventory/inventory.component.mjs +99 -0
  37. package/esm2020/lib/{components → pages}/inventory/quantityDialog.component.mjs +3 -3
  38. package/esm2020/lib/{components → pages}/invitations/invitations.component.mjs +1 -1
  39. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +70 -0
  40. package/esm2020/lib/{components → pages}/login/login.component.mjs +5 -4
  41. package/esm2020/lib/{components → pages}/logs/logs.component.mjs +2 -2
  42. package/esm2020/lib/pages/membership/membership.component.mjs +48 -0
  43. package/esm2020/lib/{components → pages}/notifications/notifications.component.mjs +1 -1
  44. package/esm2020/lib/pages/plans/plans.component.mjs +47 -0
  45. package/esm2020/lib/{components → pages}/positions/positions.component.mjs +2 -2
  46. package/esm2020/lib/pages/profile/profile.component.mjs +93 -0
  47. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +46 -0
  48. package/esm2020/lib/{components → pages}/roles/addRoleDialog.component.mjs +2 -2
  49. package/esm2020/lib/{components → pages}/roles/roles.component.mjs +1 -1
  50. package/esm2020/lib/{components → pages}/settings/settings.component.mjs +1 -1
  51. package/esm2020/lib/pages/signup/signup.component.mjs +50 -0
  52. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +50 -0
  53. package/esm2020/lib/pages/tasks/tasks.component.mjs +86 -0
  54. package/esm2020/lib/{components → pages}/tenant-settings/inviteDialog.component.mjs +3 -3
  55. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +155 -0
  56. package/esm2020/lib/pages/tenants/tenants.component.mjs +47 -0
  57. package/esm2020/lib/{components → pages}/transactions/transactDialog.component.mjs +5 -5
  58. package/esm2020/lib/pages/transactions/transactions.component.mjs +101 -0
  59. package/esm2020/lib/pages/users/users.component.mjs +118 -0
  60. package/esm2020/lib/pages/welcome/welcome.component.mjs +86 -0
  61. package/esm2020/lib/services/auth.service.mjs +3 -2
  62. package/esm2020/lib/services/csv.service.mjs +49 -0
  63. package/esm2020/lib/services/datalib.service.mjs +1 -1
  64. package/esm2020/lib/services/log.service.mjs +2 -2
  65. package/esm2020/lib/tin-spa.module.mjs +33 -28
  66. package/esm2020/public-api.mjs +26 -25
  67. package/fesm2015/tin-spa.mjs +434 -146
  68. package/fesm2015/tin-spa.mjs.map +1 -1
  69. package/fesm2020/tin-spa.mjs +433 -146
  70. package/fesm2020/tin-spa.mjs.map +1 -1
  71. package/lib/classes/Classes.d.ts +17 -173
  72. package/lib/classes/LibClasses.d.ts +172 -0
  73. package/lib/classes/TinCore.d.ts +3 -1
  74. package/lib/components/datetime/datetime.component.d.ts +2 -1
  75. package/lib/components/email/email.component.d.ts +39 -0
  76. package/lib/components/form/form.component.d.ts +2 -0
  77. package/lib/components/option/option.component.d.ts +2 -1
  78. package/lib/components/table-header/table-header.component.d.ts +14 -3
  79. package/lib/components/table-row/table-row.component.d.ts +1 -1
  80. package/lib/modules/spa-admin.module.d.ts +6 -6
  81. package/lib/modules/spa-index.module.d.ts +3 -3
  82. package/lib/modules/spa-user.module.d.ts +2 -2
  83. package/lib/{components → pages}/change-password/change-password.component.d.ts +1 -1
  84. package/lib/{components → pages}/create-account/create-account.component.d.ts +2 -1
  85. package/lib/{components → pages}/login/login.component.d.ts +3 -2
  86. package/lib/{components → pages}/profile/profile.component.d.ts +2 -1
  87. package/lib/{components → pages}/roles/addRoleDialog.component.d.ts +1 -1
  88. package/lib/{components → pages}/roles/roles.component.d.ts +1 -1
  89. package/lib/{components → pages}/signup/signup.component.d.ts +1 -1
  90. package/lib/{components → pages}/users/users.component.d.ts +1 -1
  91. package/lib/services/auth.service.d.ts +1 -1
  92. package/lib/services/csv.service.d.ts +10 -0
  93. package/lib/services/datalib.service.d.ts +2 -1
  94. package/lib/services/log.service.d.ts +1 -1
  95. package/lib/tin-spa.module.d.ts +29 -28
  96. package/package.json +1 -1
  97. package/public-api.d.ts +24 -23
  98. package/esm2020/lib/components/accounts/accounts.component.mjs +0 -70
  99. package/esm2020/lib/components/change-password/change-password.component.mjs +0 -92
  100. package/esm2020/lib/components/create-account/create-account.component.mjs +0 -109
  101. package/esm2020/lib/components/customers/customers.component.mjs +0 -60
  102. package/esm2020/lib/components/inventory/inventory.component.mjs +0 -99
  103. package/esm2020/lib/components/invitations-table/invitations-table.component.mjs +0 -70
  104. package/esm2020/lib/components/membership/membership.component.mjs +0 -48
  105. package/esm2020/lib/components/plans/plans.component.mjs +0 -47
  106. package/esm2020/lib/components/profile/profile.component.mjs +0 -92
  107. package/esm2020/lib/components/recover-account/recover-account.component.mjs +0 -46
  108. package/esm2020/lib/components/signup/signup.component.mjs +0 -50
  109. package/esm2020/lib/components/suppliers/suppliers.component.mjs +0 -50
  110. package/esm2020/lib/components/tasks/tasks.component.mjs +0 -86
  111. package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +0 -155
  112. package/esm2020/lib/components/tenants/tenants.component.mjs +0 -47
  113. package/esm2020/lib/components/transactions/transactions.component.mjs +0 -101
  114. package/esm2020/lib/components/users/users.component.mjs +0 -118
  115. package/esm2020/lib/components/welcome/welcome.component.mjs +0 -86
  116. /package/lib/{components → pages}/accounts/accountDialog.component.d.ts +0 -0
  117. /package/lib/{components → pages}/accounts/accounts.component.d.ts +0 -0
  118. /package/lib/{components → pages}/bug/bug.component.d.ts +0 -0
  119. /package/lib/{components → pages}/customers/customers.component.d.ts +0 -0
  120. /package/lib/{components → pages}/departments/departments.component.d.ts +0 -0
  121. /package/lib/{components → pages}/employees/employees.component.d.ts +0 -0
  122. /package/lib/{components → pages}/grades/grades.component.d.ts +0 -0
  123. /package/lib/{components → pages}/inventory/inventory.component.d.ts +0 -0
  124. /package/lib/{components → pages}/inventory/quantityDialog.component.d.ts +0 -0
  125. /package/lib/{components → pages}/invitations/invitations.component.d.ts +0 -0
  126. /package/lib/{components → pages}/invitations-table/invitations-table.component.d.ts +0 -0
  127. /package/lib/{components → pages}/logs/logs.component.d.ts +0 -0
  128. /package/lib/{components → pages}/membership/membership.component.d.ts +0 -0
  129. /package/lib/{components → pages}/notifications/notifications.component.d.ts +0 -0
  130. /package/lib/{components → pages}/plans/plans.component.d.ts +0 -0
  131. /package/lib/{components → pages}/positions/positions.component.d.ts +0 -0
  132. /package/lib/{components → pages}/recover-account/recover-account.component.d.ts +0 -0
  133. /package/lib/{components → pages}/settings/settings.component.d.ts +0 -0
  134. /package/lib/{components → pages}/suppliers/suppliers.component.d.ts +0 -0
  135. /package/lib/{components → pages}/tasks/tasks.component.d.ts +0 -0
  136. /package/lib/{components → pages}/tenant-settings/inviteDialog.component.d.ts +0 -0
  137. /package/lib/{components → pages}/tenant-settings/tenant-settings.component.d.ts +0 -0
  138. /package/lib/{components → pages}/tenants/tenants.component.d.ts +0 -0
  139. /package/lib/{components → pages}/transactions/transactDialog.component.d.ts +0 -0
  140. /package/lib/{components → pages}/transactions/transactions.component.d.ts +0 -0
  141. /package/lib/{components → pages}/welcome/welcome.component.d.ts +0 -0
@@ -2,11 +2,11 @@ import { AppConfig } from './../../classes/Classes';
2
2
  import { OnInit } from "@angular/core";
3
3
  import { MatDialog } from "@angular/material/dialog";
4
4
  import { DataServiceLib } from "../../services/datalib.service";
5
- import { Role } from "../../classes/Classes";
6
5
  import { Router } from "@angular/router";
7
6
  import { MessageService } from '../../services/message.service';
8
7
  import { AuthService } from '../../services/auth.service';
9
8
  import { HttpService } from '../../services/http.service';
9
+ import { Role } from '../../classes/LibClasses';
10
10
  import * as i0 from "@angular/core";
11
11
  export declare class RolesComponent implements OnInit {
12
12
  private httpService;
@@ -2,8 +2,8 @@ import { OnInit } from '@angular/core';
2
2
  import { MessageService } from '../../services/message.service';
3
3
  import { DataServiceLib } from '../../services/datalib.service';
4
4
  import { AuthService } from '../../services/auth.service';
5
- import { User, Profile, Account } from '../../classes/Classes';
6
5
  import { HttpService } from '../../services/http.service';
6
+ import { Account, Profile, User } from '../../classes/LibClasses';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class SignupComponent implements OnInit {
9
9
  private httpService;
@@ -5,8 +5,8 @@ import { DataServiceLib } from "../../services/datalib.service";
5
5
  import { Router } from "@angular/router";
6
6
  import { MessageService } from "../../services/message.service";
7
7
  import { AuthService } from "../../services/auth.service";
8
- import { User } from '../../classes/Classes';
9
8
  import { HttpService } from "../../services/http.service";
9
+ import { User } from "../../classes/LibClasses";
10
10
  import * as i0 from "@angular/core";
11
11
  export declare class UsersComponent implements OnInit {
12
12
  private httpService;
@@ -3,9 +3,9 @@ import { Router, CanActivate, ActivatedRoute } from '@angular/router';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import { StorageService } from './storage.service';
5
5
  import { LogService } from './log.service';
6
- import { Role } from '../classes/Classes';
7
6
  import { HttpService } from './http.service';
8
7
  import { SocialAuthService } from '@abacritt/angularx-social-login';
8
+ import { Role } from '../classes/LibClasses';
9
9
  import * as i0 from "@angular/core";
10
10
  export declare class AuthService implements CanActivate {
11
11
  private _route;
@@ -0,0 +1,10 @@
1
+ import { TableConfig } from '../classes/Classes';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CsvService {
4
+ generateCsv(data: any[], columns: string[], filename: string, config: TableConfig): void;
5
+ private convertToCsv;
6
+ private createColumnMap;
7
+ private escapeCommas;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<CsvService, never>;
9
+ static ɵprov: i0.ɵɵInjectableDeclaration<CsvService>;
10
+ }
@@ -1,7 +1,8 @@
1
- import { Action, AppConfig, Button, CapItem, FormConfig, TableConfig, User } from '../classes/Classes';
1
+ import { Action, AppConfig, Button, CapItem, FormConfig, TableConfig } from '../classes/Classes';
2
2
  import { Observable } from 'rxjs';
3
3
  import { HttpService } from './http.service';
4
4
  import { ActivatedRoute, Router } from '@angular/router';
5
+ import { User } from '../classes/LibClasses';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare class DataServiceLib {
7
8
  private httpService;
@@ -1,4 +1,4 @@
1
- import { LogLevel } from '../classes/Classes';
1
+ import { LogLevel } from "../classes/LibClasses";
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class LogService {
4
4
  constructor();
@@ -27,40 +27,41 @@ import * as i25 from "./components/number/number.component";
27
27
  import * as i26 from "./components/search/search.component";
28
28
  import * as i27 from "./components/viewer/viewer.component";
29
29
  import * as i28 from "./components/viewer/viewerDialog.component";
30
- import * as i29 from "./components/tenant-settings/tenant-settings.component";
31
- import * as i30 from "./components/tenant-settings/inviteDialog.component";
32
- import * as i31 from "./components/tenants/tenants.component";
33
- import * as i32 from "./components/bug/bug.component";
34
- import * as i33 from "./components/membership/membership.component";
35
- import * as i34 from "./components/plans/plans.component";
36
- import * as i35 from "./components/customers/customers.component";
37
- import * as i36 from "./components/inventory/inventory.component";
38
- import * as i37 from "./components/inventory/quantityDialog.component";
39
- import * as i38 from "./components/accounts/accounts.component";
40
- import * as i39 from "./components/accounts/accountDialog.component";
41
- import * as i40 from "./components/suppliers/suppliers.component";
42
- import * as i41 from "./components/transactions/transactions.component";
43
- import * as i42 from "./components/transactions/transactDialog.component";
30
+ import * as i29 from "./pages/tenant-settings/tenant-settings.component";
31
+ import * as i30 from "./pages/tenant-settings/inviteDialog.component";
32
+ import * as i31 from "./pages/tenants/tenants.component";
33
+ import * as i32 from "./pages/bug/bug.component";
34
+ import * as i33 from "./pages/membership/membership.component";
35
+ import * as i34 from "./pages/plans/plans.component";
36
+ import * as i35 from "./pages/customers/customers.component";
37
+ import * as i36 from "./pages/inventory/inventory.component";
38
+ import * as i37 from "./pages/inventory/quantityDialog.component";
39
+ import * as i38 from "./pages/accounts/accounts.component";
40
+ import * as i39 from "./pages/accounts/accountDialog.component";
41
+ import * as i40 from "./pages/suppliers/suppliers.component";
42
+ import * as i41 from "./pages/transactions/transactions.component";
43
+ import * as i42 from "./pages/transactions/transactDialog.component";
44
44
  import * as i43 from "./components/list-dialog/list-dialog.component";
45
- import * as i44 from "./components/tasks/tasks.component";
46
- import * as i45 from "./components/departments/departments.component";
47
- import * as i46 from "./components/employees/employees.component";
48
- import * as i47 from "./components/positions/positions.component";
49
- import * as i48 from "./components/grades/grades.component";
50
- import * as i49 from "./components/welcome/welcome.component";
51
- import * as i50 from "./components/invitations/invitations.component";
52
- import * as i51 from "./components/notifications/notifications.component";
53
- import * as i52 from "./components/invitations-table/invitations-table.component";
45
+ import * as i44 from "./pages/tasks/tasks.component";
46
+ import * as i45 from "./pages/departments/departments.component";
47
+ import * as i46 from "./pages/employees/employees.component";
48
+ import * as i47 from "./pages/positions/positions.component";
49
+ import * as i48 from "./pages/grades/grades.component";
50
+ import * as i49 from "./pages/welcome/welcome.component";
51
+ import * as i50 from "./pages/invitations/invitations.component";
52
+ import * as i51 from "./pages/notifications/notifications.component";
53
+ import * as i52 from "./pages/invitations-table/invitations-table.component";
54
54
  import * as i53 from "./components/table-header/table-header.component";
55
55
  import * as i54 from "./components/table-row/table-row.component";
56
56
  import * as i55 from "./components/table-action/table-action.component";
57
57
  import * as i56 from "./components/alert/alert.component";
58
- import * as i57 from "./modules/spa-mat.module";
59
- import * as i58 from "@angular/common/http";
60
- import * as i59 from "./components/money/currency-input-mask.module";
61
- import * as i60 from "ngx-doc-viewer";
58
+ import * as i57 from "./components/email/email.component";
59
+ import * as i58 from "./modules/spa-mat.module";
60
+ import * as i59 from "@angular/common/http";
61
+ import * as i60 from "./components/money/currency-input-mask.module";
62
+ import * as i61 from "ngx-doc-viewer";
62
63
  export declare class TinSpaModule {
63
64
  static ɵfac: i0.ɵɵFactoryDeclaration<TinSpaModule, never>;
64
- static ɵmod: i0.ɵɵNgModuleDeclaration<TinSpaModule, [typeof i1.TinSpaComponent, typeof i2.TextComponent, typeof i3.CheckComponent, typeof i4.DateComponent, typeof i5.DatetimeComponent, typeof i6.LabelComponent, typeof i7.SelectComponent, typeof i8.ActivityComponent, typeof i9.FilterComponent, typeof i10.messageDialog, typeof i11.MoneyComponent, typeof i12.OptionComponent, typeof i13.TilesComponent, typeof i14.StepsComponent, typeof i15.AttachComponent, typeof i16.ChipsComponent, typeof i17.LoaderComponent, typeof i18.NavMenuComponent, typeof i19.TableComponent, typeof i20.TableInternalComponent, typeof i21.DetailsDialog, typeof i22.DetailsDialogInternal, typeof i23.FormComponent, typeof i24.CamelToWordsPipe, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i29.TenantSettingsComponent, typeof i30.inviteDialog, typeof i31.TenantsComponent, typeof i32.BugComponent, typeof i33.MembershipComponent, typeof i34.PlansComponent, typeof i35.CustomersComponent, typeof i36.InventoryComponent, typeof i37.quantityDialog, typeof i38.AccountsComponent, typeof i39.accountDialog, typeof i40.SuppliersComponent, typeof i41.TransactionsComponent, typeof i42.transactDialog, typeof i43.ListDialogComponent, typeof i44.TasksComponent, typeof i45.DepartmentsComponent, typeof i46.EmployeesComponent, typeof i47.PositionsComponent, typeof i48.GradesComponent, typeof i49.WelcomeComponent, typeof i50.InvitationsComponent, typeof i51.NotificationsComponent, typeof i52.InvitationsTableComponent, typeof i53.TableHeaderComponent, typeof i54.TableRowComponent, typeof i55.TableActionComponent, typeof i56.AlertComponent], [typeof i57.SpaMatModule, typeof i58.HttpClientModule, typeof i59.CurrencyInputModule, typeof i60.NgxDocViewerModule], [typeof i1.TinSpaComponent, typeof i57.SpaMatModule, typeof i56.AlertComponent, typeof i2.TextComponent, typeof i10.messageDialog, typeof i18.NavMenuComponent, typeof i17.LoaderComponent, typeof i13.TilesComponent, typeof i4.DateComponent, typeof i7.SelectComponent, typeof i5.DatetimeComponent, typeof i3.CheckComponent, typeof i15.AttachComponent, typeof i11.MoneyComponent, typeof i16.ChipsComponent, typeof i8.ActivityComponent, typeof i12.OptionComponent, typeof i6.LabelComponent, typeof i14.StepsComponent, typeof i9.FilterComponent, typeof i19.TableComponent, typeof i21.DetailsDialog, typeof i23.FormComponent, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i43.ListDialogComponent, typeof i35.CustomersComponent, typeof i38.AccountsComponent, typeof i36.InventoryComponent, typeof i40.SuppliersComponent, typeof i41.TransactionsComponent, typeof i43.ListDialogComponent, typeof i44.TasksComponent, typeof i45.DepartmentsComponent, typeof i46.EmployeesComponent, typeof i47.PositionsComponent, typeof i48.GradesComponent, typeof i49.WelcomeComponent]>;
65
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TinSpaModule, [typeof i1.TinSpaComponent, typeof i2.TextComponent, typeof i3.CheckComponent, typeof i4.DateComponent, typeof i5.DatetimeComponent, typeof i6.LabelComponent, typeof i7.SelectComponent, typeof i8.ActivityComponent, typeof i9.FilterComponent, typeof i10.messageDialog, typeof i11.MoneyComponent, typeof i12.OptionComponent, typeof i13.TilesComponent, typeof i14.StepsComponent, typeof i15.AttachComponent, typeof i16.ChipsComponent, typeof i17.LoaderComponent, typeof i18.NavMenuComponent, typeof i19.TableComponent, typeof i20.TableInternalComponent, typeof i21.DetailsDialog, typeof i22.DetailsDialogInternal, typeof i23.FormComponent, typeof i24.CamelToWordsPipe, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i29.TenantSettingsComponent, typeof i30.inviteDialog, typeof i31.TenantsComponent, typeof i32.BugComponent, typeof i33.MembershipComponent, typeof i34.PlansComponent, typeof i35.CustomersComponent, typeof i36.InventoryComponent, typeof i37.quantityDialog, typeof i38.AccountsComponent, typeof i39.accountDialog, typeof i40.SuppliersComponent, typeof i41.TransactionsComponent, typeof i42.transactDialog, typeof i43.ListDialogComponent, typeof i44.TasksComponent, typeof i45.DepartmentsComponent, typeof i46.EmployeesComponent, typeof i47.PositionsComponent, typeof i48.GradesComponent, typeof i49.WelcomeComponent, typeof i50.InvitationsComponent, typeof i51.NotificationsComponent, typeof i52.InvitationsTableComponent, typeof i53.TableHeaderComponent, typeof i54.TableRowComponent, typeof i55.TableActionComponent, typeof i56.AlertComponent, typeof i57.EmailComponent], [typeof i58.SpaMatModule, typeof i59.HttpClientModule, typeof i60.CurrencyInputModule, typeof i61.NgxDocViewerModule], [typeof i1.TinSpaComponent, typeof i58.SpaMatModule, typeof i56.AlertComponent, typeof i2.TextComponent, typeof i10.messageDialog, typeof i18.NavMenuComponent, typeof i17.LoaderComponent, typeof i13.TilesComponent, typeof i4.DateComponent, typeof i7.SelectComponent, typeof i5.DatetimeComponent, typeof i3.CheckComponent, typeof i15.AttachComponent, typeof i11.MoneyComponent, typeof i16.ChipsComponent, typeof i8.ActivityComponent, typeof i12.OptionComponent, typeof i6.LabelComponent, typeof i14.StepsComponent, typeof i9.FilterComponent, typeof i19.TableComponent, typeof i21.DetailsDialog, typeof i23.FormComponent, typeof i25.NumberComponent, typeof i26.SearchComponent, typeof i27.ViewerComponent, typeof i28.viewerDialog, typeof i43.ListDialogComponent, typeof i35.CustomersComponent, typeof i38.AccountsComponent, typeof i36.InventoryComponent, typeof i40.SuppliersComponent, typeof i41.TransactionsComponent, typeof i43.ListDialogComponent, typeof i44.TasksComponent, typeof i45.DepartmentsComponent, typeof i46.EmployeesComponent, typeof i47.PositionsComponent, typeof i48.GradesComponent, typeof i49.WelcomeComponent, typeof i57.EmailComponent]>;
65
66
  static ɵinj: i0.ɵɵInjectorDeclaration<TinSpaModule>;
66
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tin-spa",
3
- "version": "2.3.12",
3
+ "version": "2.4.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.2.0",
6
6
  "@angular/core": "^14.2.0"
package/public-api.d.ts CHANGED
@@ -36,18 +36,6 @@ export * from './lib/components/steps/steps.component';
36
36
  export * from './lib/components/filter/filter.component';
37
37
  export * from './lib/components/message/messageDialog.component';
38
38
  export * from './lib/components/loader/loader.component';
39
- export * from './lib/components/users/users.component';
40
- export * from './lib/components/login/login.component';
41
- export * from './lib/components/nav-menu/nav-menu.component';
42
- export * from './lib/components/roles/roles.component';
43
- export * from './lib/components/roles/addRoleDialog.component';
44
- export * from './lib/components/signup/signup.component';
45
- export * from './lib/components/change-password/change-password.component';
46
- export * from './lib/components/profile/profile.component';
47
- export * from './lib/components/recover-account/recover-account.component';
48
- export * from './lib/components/create-account/create-account.component';
49
- export * from './lib/components/logs/logs.component';
50
- export * from './lib/components/settings/settings.component';
51
39
  export * from './lib/components/table/table.component';
52
40
  export * from './lib/components/table/detailsDialog.component';
53
41
  export * from './lib/components/form/form.component';
@@ -55,15 +43,28 @@ export * from './lib/components/number/number.component';
55
43
  export * from './lib/components/search/search.component';
56
44
  export * from './lib/components/viewer/viewer.component';
57
45
  export * from './lib/components/viewer/viewerDialog.component';
58
- export * from './lib/components/customers/customers.component';
59
- export * from './lib/components/inventory/inventory.component';
60
- export * from './lib/components/accounts/accounts.component';
61
- export * from './lib/components/suppliers/suppliers.component';
46
+ export * from './lib/components/nav-menu/nav-menu.component';
62
47
  export * from './lib/components/list-dialog/list-dialog.component';
63
- export * from './lib/components/transactions/transactions.component';
64
- export * from './lib/components/tasks/tasks.component';
65
- export * from './lib/components/departments/departments.component';
66
- export * from './lib/components/employees/employees.component';
67
- export * from './lib/components/positions/positions.component';
68
- export * from './lib/components/grades/grades.component';
69
- export * from './lib/components/welcome/welcome.component';
48
+ export * from './lib/components/email/email.component';
49
+ export * from './lib/pages/transactions/transactions.component';
50
+ export * from './lib/pages/tasks/tasks.component';
51
+ export * from './lib/pages/departments/departments.component';
52
+ export * from './lib/pages/employees/employees.component';
53
+ export * from './lib/pages/positions/positions.component';
54
+ export * from './lib/pages/grades/grades.component';
55
+ export * from './lib/pages/welcome/welcome.component';
56
+ export * from './lib/pages/customers/customers.component';
57
+ export * from './lib/pages/inventory/inventory.component';
58
+ export * from './lib/pages/accounts/accounts.component';
59
+ export * from './lib/pages/suppliers/suppliers.component';
60
+ export * from './lib/pages/users/users.component';
61
+ export * from './lib/pages/login/login.component';
62
+ export * from './lib/pages/roles/roles.component';
63
+ export * from './lib/pages/roles/addRoleDialog.component';
64
+ export * from './lib/pages/signup/signup.component';
65
+ export * from './lib/pages/change-password/change-password.component';
66
+ export * from './lib/pages/profile/profile.component';
67
+ export * from './lib/pages/recover-account/recover-account.component';
68
+ export * from './lib/pages/create-account/create-account.component';
69
+ export * from './lib/pages/logs/logs.component';
70
+ export * from './lib/pages/settings/settings.component';
@@ -1,70 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { accountDialog } from './accountDialog.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/router";
6
- import * as i2 from "../../services/datalib.service";
7
- import * as i3 from "../../services/message.service";
8
- import * as i4 from "../../services/auth.service";
9
- import * as i5 from "@angular/material/dialog";
10
- import * as i6 from "@angular/common";
11
- import * as i7 from "@angular/material/button";
12
- import * as i8 from "@angular/material/icon";
13
- import * as i9 from "@angular/material/card";
14
- import * as i10 from "../filter/filter.component";
15
- export class AccountsComponent {
16
- constructor(router, dataService, messageService, authService, dialog) {
17
- this.router = router;
18
- this.dataService = dataService;
19
- this.messageService = messageService;
20
- this.authService = authService;
21
- this.dialog = dialog;
22
- this.reload = new Subject();
23
- }
24
- ngOnInit() {
25
- this.loadData();
26
- }
27
- loadData() {
28
- this.dataService.CallApi({ url: 'general/accounts/x' }, '').subscribe((apiResponse) => {
29
- this.accounts = apiResponse.data;
30
- });
31
- }
32
- view(x) {
33
- this.dataService.NavigateWithValue("home/admin/transactions", x.accountID);
34
- }
35
- open(x) {
36
- const dialogRef = this.dialog.open(accountDialog, {
37
- width: "900px",
38
- data: x,
39
- });
40
- dialogRef.afterClosed().subscribe((result) => {
41
- if (result == 'success') {
42
- this.loadData();
43
- this.messageService.toast("Updated");
44
- }
45
- });
46
- }
47
- delete(row) {
48
- this.messageService.confirm(`DELETE ${row.name} ?`).subscribe((result) => {
49
- if (result == "yes") {
50
- this.dataService.CallApi({ url: `general/accounts?action=delete`, method: 'post' }, row).subscribe((apiResponse) => {
51
- if (apiResponse.message == "success") {
52
- this.messageService.toast("Account Deleted");
53
- this.loadData();
54
- }
55
- else {
56
- this.messageService.toast(apiResponse.message);
57
- }
58
- });
59
- }
60
- ;
61
- });
62
- }
63
- }
64
- AccountsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountsComponent, deps: [{ token: i1.Router }, { token: i2.DataServiceLib }, { token: i3.MessageService }, { token: i4.AuthService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
65
- AccountsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountsComponent, selector: "spa-accounts", ngImport: i0, template: "<h4>Accounts</h4>\r\n<hr>\r\n\r\n<div class=\"tin-row d-flex justify-content-between\" style=\"font-size: 14px;margin-left: 5px;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"open(null)\">Create</button>\r\n <spa-filter [showText]=\"false\" (refreshClick)=\"loadData()\"></spa-filter>\r\n</div>\r\n\r\n<div class=\"row \" style=\"margin-left: 0px;\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" *ngFor=\"let account of accounts\" style=\"max-width: 350px;margin: 5px;\">\r\n\r\n <div class=\"tin-row d-flex justify-content-between\">\r\n <label style=\"font-size: 24px; font-weight: 300;\">{{account.name}}</label>\r\n <button mat-mini-fab color=\"primary\" (click)=\"open(account)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <hr style=\"margin-top: 5px;margin-bottom: 10px;\"/>\r\n\r\n <label *ngIf=\"account.description != ''\" style=\"font-size: small;margin-bottom: 5px;\">{{account.description}}</label>\r\n\r\n <div *ngIf=\"account\" class=\"tin-row\">\r\n <label style=\"margin-right: 5px;font-size: 14px;\">{{account?.currency}}</label>\r\n <label style=\"font-size: 34px;margin-right: 20px;\">{{account?.balance | currency : '' : ''}}</label>\r\n </div>\r\n\r\n <mat-card-actions class=\"d-flex justify-content-between\" >\r\n <button mat-stroked-button color=\"primary\" style=\"margin-right:10px;\" (click)=\"view(account)\">View</button>\r\n <button mat-mini-fab *ngIf=\"account.count == 0\" color=\"warn\" style=\"margin-right:10px\" (click)=\"delete(account)\"><mat-icon>delete</mat-icon></button>\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n</div>\r\n\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: i10.FilterComponent, selector: "spa-filter", inputs: ["flatButtons", "showText", "showButton", "data"], outputs: ["refreshClick"] }, { kind: "pipe", type: i6.CurrencyPipe, name: "currency" }] });
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountsComponent, decorators: [{
67
- type: Component,
68
- args: [{ selector: 'spa-accounts', template: "<h4>Accounts</h4>\r\n<hr>\r\n\r\n<div class=\"tin-row d-flex justify-content-between\" style=\"font-size: 14px;margin-left: 5px;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"open(null)\">Create</button>\r\n <spa-filter [showText]=\"false\" (refreshClick)=\"loadData()\"></spa-filter>\r\n</div>\r\n\r\n<div class=\"row \" style=\"margin-left: 0px;\">\r\n\r\n <mat-card class=\"mat-elevation-z8\" *ngFor=\"let account of accounts\" style=\"max-width: 350px;margin: 5px;\">\r\n\r\n <div class=\"tin-row d-flex justify-content-between\">\r\n <label style=\"font-size: 24px; font-weight: 300;\">{{account.name}}</label>\r\n <button mat-mini-fab color=\"primary\" (click)=\"open(account)\"><mat-icon>edit</mat-icon></button>\r\n </div>\r\n\r\n <hr style=\"margin-top: 5px;margin-bottom: 10px;\"/>\r\n\r\n <label *ngIf=\"account.description != ''\" style=\"font-size: small;margin-bottom: 5px;\">{{account.description}}</label>\r\n\r\n <div *ngIf=\"account\" class=\"tin-row\">\r\n <label style=\"margin-right: 5px;font-size: 14px;\">{{account?.currency}}</label>\r\n <label style=\"font-size: 34px;margin-right: 20px;\">{{account?.balance | currency : '' : ''}}</label>\r\n </div>\r\n\r\n <mat-card-actions class=\"d-flex justify-content-between\" >\r\n <button mat-stroked-button color=\"primary\" style=\"margin-right:10px;\" (click)=\"view(account)\">View</button>\r\n <button mat-mini-fab *ngIf=\"account.count == 0\" color=\"warn\" style=\"margin-right:10px\" (click)=\"delete(account)\"><mat-icon>delete</mat-icon></button>\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n</div>\r\n\r\n\r\n", styles: [".mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}\n"] }]
69
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataServiceLib }, { type: i3.MessageService }, { type: i4.AuthService }, { type: i5.MatDialog }]; } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvYWNjb3VudHMvYWNjb3VudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvYWNjb3VudHMvYWNjb3VudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQU9sRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTzFELE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBbUIsTUFBYyxFQUFTLFdBQTJCLEVBQVUsY0FBOEIsRUFBUyxXQUF3QixFQUFTLE1BQWlCO1FBQXJKLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVc7UUFNeEssV0FBTSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBTm1JLENBQUM7SUFFN0ssUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBS0QsUUFBUTtRQUVOLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBeUIsRUFBRSxFQUFFO1lBQ2pHLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFJRCxJQUFJLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQztRQUVKLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoRCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRTNDLElBQUksTUFBTSxJQUFJLFNBQVMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO2dCQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsTUFBTSxDQUFDLEdBQUc7UUFDUixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRXZFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFHbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtvQkFFOUgsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTt3QkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUNqQjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ2hEO2dCQUVILENBQUMsQ0FBQyxDQUFBO2FBR0g7WUFBQSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs4R0E5RFUsaUJBQWlCO2tHQUFqQixpQkFBaUIsb0RDaEI5Qixxb0RBb0NBOzJGRHBCYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUNvbmZpZywgVGFibGVDb25maWcsIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbi8vIGltcG9ydCB7IHF1YW50aXR5RGlhbG9nIH0gZnJvbSAnLi9xdWFudGl0eURpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGFjY291bnREaWFsb2cgfSBmcm9tICcuL2FjY291bnREaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLWFjY291bnRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3VudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjY291bnRzLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3VudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIscHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZERhdGEoKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgYWNjb3VudHM7XHJcblxyXG4gIGxvYWREYXRhKCl7XHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKHsgdXJsOiAnZ2VuZXJhbC9hY2NvdW50cy94JyB9LCcnKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlIDogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5hY2NvdW50cyA9IGFwaVJlc3BvbnNlLmRhdGE7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcbiAgdmlldyh4KXtcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuTmF2aWdhdGVXaXRoVmFsdWUoXCJob21lL2FkbWluL3RyYW5zYWN0aW9uc1wiLCB4LmFjY291bnRJRClcclxuICB9XHJcblxyXG4gIG9wZW4oeCkge1xyXG5cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oYWNjb3VudERpYWxvZywge1xyXG4gICAgICB3aWR0aDogXCI5MDBweFwiLFxyXG4gICAgICBkYXRhOiB4LFxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQgPT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlVwZGF0ZWRcIilcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZGVsZXRlKHJvdyl7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYERFTEVURSAke3Jvdy5uYW1lfSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHJcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKHsgdXJsOiBgZ2VuZXJhbC9hY2NvdW50cz9hY3Rpb249ZGVsZXRlYCwgbWV0aG9kOiAncG9zdCcgfSwgcm93KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJBY2NvdW50IERlbGV0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8aDQ+QWNjb3VudHM8L2g0PlxyXG48aHI+XHJcblxyXG48ZGl2IGNsYXNzPVwidGluLXJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDttYXJnaW4tbGVmdDogNXB4O1wiPlxyXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW4obnVsbClcIj5DcmVhdGU8L2J1dHRvbj5cclxuICA8c3BhLWZpbHRlciBbc2hvd1RleHRdPVwiZmFsc2VcIiAocmVmcmVzaENsaWNrKT1cImxvYWREYXRhKClcIj48L3NwYS1maWx0ZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInJvdyBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAwcHg7XCI+XHJcblxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIiAqbmdGb3I9XCJsZXQgYWNjb3VudCBvZiBhY2NvdW50c1wiIHN0eWxlPVwibWF4LXdpZHRoOiAzNTBweDttYXJnaW46IDVweDtcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGluLXJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4OyBmb250LXdlaWdodDogMzAwO1wiPnt7YWNjb3VudC5uYW1lfX08L2xhYmVsPlxyXG4gICAgICA8YnV0dG9uIG1hdC1taW5pLWZhYiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib3BlbihhY2NvdW50KVwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxociBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDttYXJnaW4tYm90dG9tOiAxMHB4O1wiLz5cclxuXHJcbiAgICA8bGFiZWwgKm5nSWY9XCJhY2NvdW50LmRlc2NyaXB0aW9uICE9ICcnXCIgc3R5bGU9XCJmb250LXNpemU6IHNtYWxsO21hcmdpbi1ib3R0b206IDVweDtcIj57e2FjY291bnQuZGVzY3JpcHRpb259fTwvbGFiZWw+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImFjY291bnRcIiBjbGFzcz1cInRpbi1yb3dcIj5cclxuICAgICAgPGxhYmVsIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7Zm9udC1zaXplOiAxNHB4O1wiPnt7YWNjb3VudD8uY3VycmVuY3l9fTwvbGFiZWw+XHJcbiAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZTogMzRweDttYXJnaW4tcmlnaHQ6IDIwcHg7XCI+e3thY2NvdW50Py5iYWxhbmNlIHwgY3VycmVuY3kgOiAnJyA6ICcnfX08L2xhYmVsPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiA+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjEwcHg7XCIgKGNsaWNrKT1cInZpZXcoYWNjb3VudClcIj5WaWV3PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LW1pbmktZmFiICpuZ0lmPVwiYWNjb3VudC5jb3VudCA9PSAwXCIgY29sb3I9XCJ3YXJuXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6MTBweFwiIChjbGljayk9XCJkZWxldGUoYWNjb3VudClcIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgPC9tYXQtY2FyZD5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcbiJdfQ==
@@ -1,92 +0,0 @@
1
- import { ChangeUserPassword } from './../../classes/Classes';
2
- import { Component } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "../../services/http.service";
7
- import * as i4 from "../../services/message.service";
8
- import * as i5 from "../../services/datalib.service";
9
- import * as i6 from "../../services/auth.service";
10
- import * as i7 from "@angular/material/button";
11
- import * as i8 from "../text/text.component";
12
- export class ChangePasswordComponent {
13
- constructor(router, location, httpService, messageService, dataService, authService, route) {
14
- this.router = router;
15
- this.location = location;
16
- this.httpService = httpService;
17
- this.messageService = messageService;
18
- this.dataService = dataService;
19
- this.authService = authService;
20
- this.route = route;
21
- this.isProcessing = false;
22
- this.changePassword = new ChangeUserPassword();
23
- }
24
- ngOnInit() {
25
- this.myRole = this.authService.currentRoleSource.value;
26
- if (this.dataService.tmpProfileuserName == "") {
27
- this.changePassword.userName = this.authService.currentUser;
28
- }
29
- else {
30
- this.changePassword.userName = this.dataService.tmpProfileuserName;
31
- this.dataService.tmpProfileuserName = "";
32
- }
33
- if (this.route.snapshot.queryParams["redirectTo"] != undefined) {
34
- this.redirectPath = this.route.snapshot.queryParams["redirectTo"];
35
- }
36
- else {
37
- this.redirectPath = "home";
38
- }
39
- }
40
- change() {
41
- if (!this.myRole[this.dataService.capUsers.name]) {
42
- if (this.changePassword.currentPassword == "") {
43
- this.messageService.toast("Please enter current Password");
44
- return;
45
- }
46
- }
47
- if (this.changePassword.newPassword == "") {
48
- this.messageService.toast("Please enter new Password");
49
- return;
50
- }
51
- if (this.changePassword.confirmPassword == "") {
52
- this.messageService.toast("Please confirm new Password");
53
- return;
54
- }
55
- if (this.changePassword.confirmPassword != this.changePassword.newPassword) {
56
- this.messageService.toast("Passwords do not match");
57
- return;
58
- }
59
- this.isProcessing = true;
60
- if (this.myRole[this.dataService.capUsers.name]) {
61
- this.dataService.ChangePasswordAdmin(this.changePassword).subscribe((apiResponse) => {
62
- this.isProcessing = false;
63
- if (apiResponse.message == "success") {
64
- this.messageService.toast("Password Changed");
65
- this.router.navigate([this.redirectPath]);
66
- }
67
- else {
68
- this.messageService.toast("Error: " + apiResponse.message);
69
- }
70
- });
71
- }
72
- else {
73
- this.dataService.ChangePassword(this.changePassword).subscribe((apiResponse) => {
74
- this.isProcessing = false;
75
- if (apiResponse.message == "success") {
76
- this.messageService.toast("Password Changed");
77
- this.router.navigate([this.redirectPath]);
78
- }
79
- else {
80
- this.messageService.toast("Error: " + apiResponse.message);
81
- }
82
- });
83
- }
84
- }
85
- }
86
- ChangePasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChangePasswordComponent, deps: [{ token: i1.Router }, { token: i2.Location }, { token: i3.HttpService }, { token: i4.MessageService }, { token: i5.DataServiceLib }, { token: i6.AuthService }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
87
- ChangePasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ChangePasswordComponent, selector: "spa-change-password", ngImport: i0, template: "<h4>Change Password</h4>\r\n<hr>\r\n\r\n\r\n<div class=\"container tin-grid\" style=\"font-size:14px;\">\r\n\r\n <div class=\"fill\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" [readonly]=\"true\"></spa-text>\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" type=\"password\"></spa-text>\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n\r\n </div>\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<!-- <div class=\"container\">\r\n\r\n <div class=\"d-flex justify-content-center row align-items-center\" >\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"tin-input \" style=\"font-size:14px;\">\r\n\r\n <div class=\"col\" *ngIf=\"changePassword.userName!=''\">\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" width=\"300px\" [readonly]=\"true\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\" *ngIf=\"!myRole[dataService.capUsers.name]\">\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col mt-3\">\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div> -->\r\n\r\n", styles: [""], dependencies: [{ kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.TextComponent, selector: "spa-text", inputs: ["readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "options", "optionValue", "required", "min", "max", "regex", "suffix", "infoMessage"], outputs: ["valueChange", "leave", "enterPress", "infoClick"] }] });
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ChangePasswordComponent, decorators: [{
89
- type: Component,
90
- args: [{ selector: 'spa-change-password', template: "<h4>Change Password</h4>\r\n<hr>\r\n\r\n\r\n<div class=\"container tin-grid\" style=\"font-size:14px;\">\r\n\r\n <div class=\"fill\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" [readonly]=\"true\"></spa-text>\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" type=\"password\"></spa-text>\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" type=\"password\"></spa-text>\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n\r\n </div>\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<!-- <div class=\"container\">\r\n\r\n <div class=\"d-flex justify-content-center row align-items-center\" >\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"tin-input \" style=\"font-size:14px;\">\r\n\r\n <div class=\"col\" *ngIf=\"changePassword.userName!=''\">\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"changePassword.userName\" width=\"300px\" [readonly]=\"true\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\" *ngIf=\"!myRole[dataService.capUsers.name]\">\r\n <spa-text id=\"txtPassword\" display=\"Current Password\" [(value)]=\"changePassword.currentPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtNewPassword\" display=\"New Password\" [(value)]=\"changePassword.newPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <spa-text id=\"txtConfirmPassword\" display=\"Confirm Password\" [(value)]=\"changePassword.confirmPassword\" width=\"300px\" type=\"password\"></spa-text>\r\n </div>\r\n\r\n <div class=\"col mt-3\">\r\n <button id=\"btnChange\" mat-raised-button color=\"primary\" (click)=\"change()\" cdkFocusInitial>Change</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col\">\r\n\r\n <div class=\"alert alert-info\" style=\"font-size: 14px;\" role=\"alert\">\r\n <b>*Please consider these requirements for your new password.</b> <br><br>\r\n\r\n At least 8 characters<br>\r\n At least 1 uppercase letter (A-Z)<br>\r\n At least 2 lowercase letters (a-z)<br>\r\n At least 1 digit (0-9)<br>\r\n At least 1 special character (~`! \u2026)<br>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n</div> -->\r\n\r\n" }]
91
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.HttpService }, { type: i4.MessageService }, { type: i5.DataServiceLib }, { type: i6.AuthService }, { type: i1.ActivatedRoute }]; } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL2NoYW5nZS1wYXNzd29yZC9jaGFuZ2UtcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvY2hhbmdlLXBhc3N3b3JkL2NoYW5nZS1wYXNzd29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQWUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBYWxELE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsWUFBbUIsTUFBYyxFQUFVLFFBQWtCLEVBQVUsV0FBd0IsRUFBVSxjQUE4QixFQUFTLFdBQTJCLEVBQVUsV0FBd0IsRUFBVSxLQUFxQjtRQUF6TixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXVCNU8saUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsbUJBQWMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUF4QnNNLENBQUM7SUFFalAsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUE7UUFFdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFFLEVBQUUsRUFBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztTQUU3RDthQUFJO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztTQUMxQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtTQUNsRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUE7U0FDM0I7SUFFSCxDQUFDO0lBT00sTUFBTTtRQUVYLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFDO1lBQy9DLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLElBQUksRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUMzRCxPQUFPO2FBQ1I7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDdkQsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsSUFBSSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUN6RCxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFHO1lBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDcEQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFDO1lBRzlDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtnQkFDL0YsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTFCLElBQUksV0FBVyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRTlDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBRTNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzVEO1lBQ0gsQ0FBQyxDQUNBLENBQUM7U0FFSDthQUFJO1lBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtnQkFDMUYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTFCLElBQUksV0FBVyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRTlDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQzNDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzVEO1lBQ0gsQ0FBQyxDQUNBLENBQUM7U0FFSDtJQUNILENBQUM7O29IQXZGVSx1QkFBdUI7d0dBQXZCLHVCQUF1QiwyRENmcEMsMG1HQW9GQTsyRkRyRWEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDaGFuZ2VVc2VyUGFzc3dvcmQsIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi8uLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1jaGFuZ2UtcGFzc3dvcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFuZ2UtcGFzc3dvcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoYW5nZS1wYXNzd29yZC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENoYW5nZVBhc3N3b3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiwgcHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubXlSb2xlID0gdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlLnRtcFByb2ZpbGV1c2VyTmFtZT09XCJcIil7XHJcbiAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQudXNlck5hbWUgPSB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyO1xyXG5cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLmNoYW5nZVBhc3N3b3JkLnVzZXJOYW1lID0gdGhpcy5kYXRhU2VydmljZS50bXBQcm9maWxldXNlck5hbWU7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UudG1wUHJvZmlsZXVzZXJOYW1lID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInJlZGlyZWN0VG9cIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucmVkaXJlY3RQYXRoID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInJlZGlyZWN0VG9cIl1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVkaXJlY3RQYXRoID0gXCJob21lXCJcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBteVJvbGU7XHJcbiAgcmVkaXJlY3RQYXRoXHJcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhbmdlUGFzc3dvcmQgPSBuZXcgQ2hhbmdlVXNlclBhc3N3b3JkKCk7XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2UoKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLm15Um9sZVt0aGlzLmRhdGFTZXJ2aWNlLmNhcFVzZXJzLm5hbWVdKXtcclxuICAgICAgaWYgKHRoaXMuY2hhbmdlUGFzc3dvcmQuY3VycmVudFBhc3N3b3JkID09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGVudGVyIGN1cnJlbnQgUGFzc3dvcmRcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhbmdlUGFzc3dvcmQubmV3UGFzc3dvcmQgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGVudGVyIG5ldyBQYXNzd29yZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYW5nZVBhc3N3b3JkLmNvbmZpcm1QYXNzd29yZCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgY29uZmlybSBuZXcgUGFzc3dvcmRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFuZ2VQYXNzd29yZC5jb25maXJtUGFzc3dvcmQgIT0gdGhpcy5jaGFuZ2VQYXNzd29yZC5uZXdQYXNzd29yZCApIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBhc3N3b3JkcyBkbyBub3QgbWF0Y2hcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMubXlSb2xlW3RoaXMuZGF0YVNlcnZpY2UuY2FwVXNlcnMubmFtZV0pe1xyXG5cclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2hhbmdlUGFzc3dvcmRBZG1pbih0aGlzLmNoYW5nZVBhc3N3b3JkKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5tZXNzYWdlID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGFzc3dvcmQgQ2hhbmdlZFwiKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yZWRpcmVjdFBhdGhdKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9ZWxzZXtcclxuXHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2hhbmdlUGFzc3dvcmQodGhpcy5jaGFuZ2VQYXNzd29yZCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoYXBpUmVzcG9uc2UubWVzc2FnZSA9PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBhc3N3b3JkIENoYW5nZWRcIik7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVkaXJlY3RQYXRoXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxoND5DaGFuZ2UgUGFzc3dvcmQ8L2g0PlxyXG48aHI+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lciB0aW4tZ3JpZFwiIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7XCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmaWxsXCI+XHJcblxyXG4gICAgPHNwYS10ZXh0IGlkPVwidHh0dXNlck5hbWVcIiBkaXNwbGF5PVwiVXNlcm5hbWVcIiBbKHZhbHVlKV09XCJjaGFuZ2VQYXNzd29yZC51c2VyTmFtZVwiICBbcmVhZG9ubHldPVwidHJ1ZVwiPjwvc3BhLXRleHQ+XHJcbiAgICA8c3BhLXRleHQgaWQ9XCJ0eHRQYXNzd29yZFwiIGRpc3BsYXk9XCJDdXJyZW50IFBhc3N3b3JkXCIgWyh2YWx1ZSldPVwiY2hhbmdlUGFzc3dvcmQuY3VycmVudFBhc3N3b3JkXCIgIHR5cGU9XCJwYXNzd29yZFwiPjwvc3BhLXRleHQ+XHJcbiAgICA8c3BhLXRleHQgaWQ9XCJ0eHROZXdQYXNzd29yZFwiIGRpc3BsYXk9XCJOZXcgUGFzc3dvcmRcIiBbKHZhbHVlKV09XCJjaGFuZ2VQYXNzd29yZC5uZXdQYXNzd29yZFwiIHR5cGU9XCJwYXNzd29yZFwiPjwvc3BhLXRleHQ+XHJcbiAgICA8c3BhLXRleHQgaWQ9XCJ0eHRDb25maXJtUGFzc3dvcmRcIiBkaXNwbGF5PVwiQ29uZmlybSBQYXNzd29yZFwiIFsodmFsdWUpXT1cImNoYW5nZVBhc3N3b3JkLmNvbmZpcm1QYXNzd29yZFwiICB0eXBlPVwicGFzc3dvcmRcIj48L3NwYS10ZXh0PlxyXG4gICAgPGJ1dHRvbiBpZD1cImJ0bkNoYW5nZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjaGFuZ2UoKVwiIGNka0ZvY3VzSW5pdGlhbD5DaGFuZ2U8L2J1dHRvbj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDxiPipQbGVhc2UgY29uc2lkZXIgdGhlc2UgcmVxdWlyZW1lbnRzIGZvciB5b3VyIG5ldyBwYXNzd29yZC48L2I+IDxicj48YnI+XHJcblxyXG4gICAgICAgIEF0IGxlYXN0IDggY2hhcmFjdGVyczxicj5cclxuICAgICAgICBBdCBsZWFzdCAxIHVwcGVyY2FzZSBsZXR0ZXIgKEEtWik8YnI+XHJcbiAgICAgICAgQXQgbGVhc3QgMiBsb3dlcmNhc2UgbGV0dGVycyAoYS16KTxicj5cclxuICAgICAgICBBdCBsZWFzdCAxIGRpZ2l0ICgwLTkpPGJyPlxyXG4gICAgICAgIEF0IGxlYXN0IDEgc3BlY2lhbCBjaGFyYWN0ZXIgKH5gISDigKYpPGJyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcblxyXG48IS0tIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIiA+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dCBcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4O1wiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgKm5nSWY9XCJjaGFuZ2VQYXNzd29yZC51c2VyTmFtZSE9JydcIj5cclxuICAgICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dHVzZXJOYW1lXCIgZGlzcGxheT1cIlVzZXJuYW1lXCIgWyh2YWx1ZSldPVwiY2hhbmdlUGFzc3dvcmQudXNlck5hbWVcIiB3aWR0aD1cIjMwMHB4XCIgW3JlYWRvbmx5XT1cInRydWVcIj48L3NwYS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgKm5nSWY9XCIhbXlSb2xlW2RhdGFTZXJ2aWNlLmNhcFVzZXJzLm5hbWVdXCI+XHJcbiAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHRQYXNzd29yZFwiIGRpc3BsYXk9XCJDdXJyZW50IFBhc3N3b3JkXCIgWyh2YWx1ZSldPVwiY2hhbmdlUGFzc3dvcmQuY3VycmVudFBhc3N3b3JkXCIgd2lkdGg9XCIzMDBweFwiIHR5cGU9XCJwYXNzd29yZFwiPjwvc3BhLXRleHQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dE5ld1Bhc3N3b3JkXCIgZGlzcGxheT1cIk5ldyBQYXNzd29yZFwiIFsodmFsdWUpXT1cImNoYW5nZVBhc3N3b3JkLm5ld1Bhc3N3b3JkXCIgd2lkdGg9XCIzMDBweFwiIHR5cGU9XCJwYXNzd29yZFwiPjwvc3BhLXRleHQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHRDb25maXJtUGFzc3dvcmRcIiBkaXNwbGF5PVwiQ29uZmlybSBQYXNzd29yZFwiIFsodmFsdWUpXT1cImNoYW5nZVBhc3N3b3JkLmNvbmZpcm1QYXNzd29yZFwiIHdpZHRoPVwiMzAwcHhcIiB0eXBlPVwicGFzc3dvcmRcIj48L3NwYS10ZXh0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIG10LTNcIj5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5DaGFuZ2VcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2hhbmdlKClcIiBjZGtGb2N1c0luaXRpYWw+Q2hhbmdlPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgIDxiPipQbGVhc2UgY29uc2lkZXIgdGhlc2UgcmVxdWlyZW1lbnRzIGZvciB5b3VyIG5ldyBwYXNzd29yZC48L2I+IDxicj48YnI+XHJcblxyXG4gICAgICAgIEF0IGxlYXN0IDggY2hhcmFjdGVyczxicj5cclxuICAgICAgICBBdCBsZWFzdCAxIHVwcGVyY2FzZSBsZXR0ZXIgKEEtWik8YnI+XHJcbiAgICAgICAgQXQgbGVhc3QgMiBsb3dlcmNhc2UgbGV0dGVycyAoYS16KTxicj5cclxuICAgICAgICBBdCBsZWFzdCAxIGRpZ2l0ICgwLTkpPGJyPlxyXG4gICAgICAgIEF0IGxlYXN0IDEgc3BlY2lhbCBjaGFyYWN0ZXIgKH5gISDigKYpPGJyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG5cclxuIl19