@pobuca/email-builder 1.0.0 → 1.1.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 (135) hide show
  1. package/README.md +1 -1
  2. package/bundles/pobuca-email-builder.umd.js +4464 -4414
  3. package/bundles/pobuca-email-builder.umd.js.map +1 -1
  4. package/bundles/pobuca-email-builder.umd.min.js +1 -1
  5. package/bundles/pobuca-email-builder.umd.min.js.map +1 -1
  6. package/esm2015/lib/classes/DefaultEmail.js +54 -53
  7. package/esm2015/lib/classes/Elements.js +229 -229
  8. package/esm2015/lib/classes/Structure.js +89 -89
  9. package/esm2015/lib/components/block/block.component.js +89 -89
  10. package/esm2015/lib/components/block-settings/block-settings.component.js +53 -53
  11. package/esm2015/lib/components/builder-container/builder-container.component.js +114 -114
  12. package/esm2015/lib/components/dialog.component.js +30 -30
  13. package/esm2015/lib/components/general-settings/general-settings.component.js +25 -25
  14. package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -62
  15. package/esm2015/lib/components/preview.component.js +89 -89
  16. package/esm2015/lib/components/structure/structure.component.js +163 -163
  17. package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -31
  18. package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -45
  19. package/esm2015/lib/directives/dynamic-component.directive.js +46 -46
  20. package/esm2015/lib/elements/abstract-block.js +23 -23
  21. package/esm2015/lib/elements/button/button.component.js +29 -29
  22. package/esm2015/lib/elements/divider/divider.component.js +30 -30
  23. package/esm2015/lib/elements/image/image.component.js +54 -54
  24. package/esm2015/lib/elements/social/social.component.js +42 -42
  25. package/esm2015/lib/elements/spacer/spacer.component.js +30 -30
  26. package/esm2015/lib/elements/text-element/text-element.component.js +80 -80
  27. package/esm2015/lib/groups/align.js +79 -79
  28. package/esm2015/lib/groups/back-repeat.js +55 -55
  29. package/esm2015/lib/groups/border.js +102 -102
  30. package/esm2015/lib/groups/color.js +139 -139
  31. package/esm2015/lib/groups/direction.js +63 -63
  32. package/esm2015/lib/groups/font-styles.js +127 -112
  33. package/esm2015/lib/groups/gaps.js +45 -45
  34. package/esm2015/lib/groups/line-height.js +68 -68
  35. package/esm2015/lib/groups/link.js +67 -67
  36. package/esm2015/lib/groups/margin.js +45 -45
  37. package/esm2015/lib/groups/padding.js +53 -53
  38. package/esm2015/lib/groups/upload-image.js +112 -112
  39. package/esm2015/lib/groups/width-height.js +94 -94
  40. package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -51
  41. package/esm2015/lib/interfaces/interfaces.js +13 -13
  42. package/esm2015/lib/pb-email-builder.component.js +258 -246
  43. package/esm2015/lib/pb-email-builder.module.js +291 -291
  44. package/esm2015/lib/pb-email-builder.service.js +134 -134
  45. package/esm2015/lib/pipes/slugify.pipe.js +39 -39
  46. package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +175 -165
  47. package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -122
  48. package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -11
  49. package/esm2015/lib/services/pb-storage/index.js +7 -7
  50. package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -79
  51. package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -26
  52. package/esm2015/lib/services/user-image-uploader-service/index.js +8 -8
  53. package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -30
  54. package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -112
  55. package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -91
  56. package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -26
  57. package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -31
  58. package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -12
  59. package/esm2015/lib/services/user-middleware-service/index.js +8 -8
  60. package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -195
  61. package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -16
  62. package/esm2015/lib/services/user-rest-api-service/index.js +7 -7
  63. package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -116
  64. package/esm2015/lib/tokens/private-tokens.js +17 -17
  65. package/esm2015/lib/tokens/tokens.js +159 -159
  66. package/esm2015/lib/utils.js +147 -147
  67. package/esm2015/pobuca-email-builder.js +42 -42
  68. package/esm2015/public_api.js +26 -26
  69. package/fesm2015/pobuca-email-builder.js +4206 -4168
  70. package/fesm2015/pobuca-email-builder.js.map +1 -1
  71. package/lib/classes/DefaultEmail.d.ts +10 -9
  72. package/lib/classes/Elements.d.ts +62 -62
  73. package/lib/classes/Structure.d.ts +11 -11
  74. package/lib/components/block/block.component.d.ts +25 -25
  75. package/lib/components/block-settings/block-settings.component.d.ts +18 -18
  76. package/lib/components/builder-container/builder-container.component.d.ts +36 -36
  77. package/lib/components/dialog.component.d.ts +10 -10
  78. package/lib/components/general-settings/general-settings.component.d.ts +6 -6
  79. package/lib/components/import-dialog/import-dialog.component.d.ts +16 -16
  80. package/lib/components/preview.component.d.ts +18 -18
  81. package/lib/components/structure/structure.component.d.ts +43 -43
  82. package/lib/components/structure-settings/structure-settings.component.d.ts +9 -9
  83. package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -15
  84. package/lib/directives/dynamic-component.directive.d.ts +13 -13
  85. package/lib/elements/abstract-block.d.ts +8 -8
  86. package/lib/elements/button/button.component.d.ts +18 -18
  87. package/lib/elements/divider/divider.component.d.ts +10 -10
  88. package/lib/elements/image/image.component.d.ts +19 -19
  89. package/lib/elements/social/social.component.d.ts +21 -21
  90. package/lib/elements/spacer/spacer.component.d.ts +5 -5
  91. package/lib/elements/text-element/text-element.component.d.ts +52 -52
  92. package/lib/groups/align.d.ts +17 -17
  93. package/lib/groups/back-repeat.d.ts +8 -8
  94. package/lib/groups/border.d.ts +13 -13
  95. package/lib/groups/color.d.ts +26 -26
  96. package/lib/groups/direction.d.ts +13 -13
  97. package/lib/groups/font-styles.d.ts +21 -17
  98. package/lib/groups/gaps.d.ts +7 -7
  99. package/lib/groups/line-height.d.ts +12 -12
  100. package/lib/groups/link.d.ts +11 -11
  101. package/lib/groups/margin.d.ts +8 -8
  102. package/lib/groups/padding.d.ts +8 -8
  103. package/lib/groups/upload-image.d.ts +19 -19
  104. package/lib/groups/width-height.d.ts +19 -19
  105. package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -10
  106. package/lib/interfaces/interfaces.d.ts +430 -422
  107. package/lib/pb-email-builder.component.d.ts +67 -67
  108. package/lib/pb-email-builder.module.d.ts +51 -51
  109. package/lib/pb-email-builder.service.d.ts +83 -83
  110. package/lib/pipes/slugify.pipe.d.ts +9 -9
  111. package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -50
  112. package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -46
  113. package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -6
  114. package/lib/services/pb-storage/index.d.ts +2 -2
  115. package/lib/services/pb-storage/pb-storage.service.d.ts +54 -54
  116. package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -12
  117. package/lib/services/user-image-uploader-service/index.d.ts +3 -3
  118. package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -14
  119. package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -28
  120. package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -27
  121. package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -26
  122. package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -15
  123. package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -7
  124. package/lib/services/user-middleware-service/index.d.ts +3 -3
  125. package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -190
  126. package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -10
  127. package/lib/services/user-rest-api-service/index.d.ts +2 -2
  128. package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -82
  129. package/lib/tokens/private-tokens.d.ts +5 -5
  130. package/lib/tokens/tokens.d.ts +70 -70
  131. package/lib/utils.d.ts +88 -88
  132. package/package.json +8 -3
  133. package/pobuca-email-builder.d.ts +42 -42
  134. package/pobuca-email-builder.metadata.json +1 -1
  135. package/public_api.d.ts +16 -16
@@ -1,291 +1,291 @@
1
- /*
2
- * Copyright (c) 2024 Pobuca.
3
- * All rights reserved.
4
- */
5
- import { Inject, NgModule } from '@angular/core';
6
- import { DragDropModule } from '@angular/cdk/drag-drop';
7
- import { FlexLayoutModule } from '@angular/flex-layout';
8
- import { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';
9
- import { MatButtonModule } from '@angular/material/button';
10
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
11
- import { MatDialog, MatDialogModule } from '@angular/material/dialog';
12
- import { MatDividerModule } from '@angular/material/divider';
13
- import { MatExpansionModule } from '@angular/material/expansion';
14
- import { MatFormFieldModule } from '@angular/material/form-field';
15
- import { MatIconModule } from '@angular/material/icon';
16
- import { MatInputModule } from '@angular/material/input';
17
- import { MatListModule } from '@angular/material/list';
18
- import { MatMenuModule } from '@angular/material/menu';
19
- import { MatProgressBarModule } from '@angular/material/progress-bar';
20
- import { MatSelectModule } from '@angular/material/select';
21
- import { MatSidenavModule } from '@angular/material/sidenav';
22
- import { MatSlideToggleModule } from '@angular/material/slide-toggle';
23
- import { MatSliderModule } from '@angular/material/slider';
24
- import { MatSnackBarModule } from '@angular/material/snack-bar';
25
- import { MatTabsModule } from '@angular/material/tabs';
26
- import { MatToolbarModule } from '@angular/material/toolbar';
27
- import { MatTooltipModule } from '@angular/material/tooltip';
28
- import { ResizableModule } from 'angular-resizable-element';
29
- import { FormsModule } from '@angular/forms';
30
- import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';
31
- import { CommonModule } from '@angular/common';
32
- import { ScrollingModule } from '@angular/cdk/scrolling';
33
- import 'quill';
34
- import { QUILL_CONFIG_TOKEN, QuillModule } from 'ngx-quill';
35
- import { ColorChromeModule } from 'ngx-color/chrome';
36
- import { PB_CONFIG, PB_TEMPLATES_TEMPORARY_STORAGE } from './tokens/tokens';
37
- import { StructureComponent } from './components/structure/structure.component';
38
- import { PbEmailBuilderComponent } from './pb-email-builder.component';
39
- import { DynamicComponentDirective } from './directives/dynamic-component.directive';
40
- import { ImageComponent } from './elements/image/image.component';
41
- import { TextElementComponent } from './elements/text-element/text-element.component';
42
- import { ButtonComponent } from './elements/button/button.component';
43
- import { DividerComponent } from './elements/divider/divider.component';
44
- import { SpacerComponent } from './elements/spacer/spacer.component';
45
- import { SocialComponent } from './elements/social/social.component';
46
- import { BuilderContainerComponent } from './components/builder-container/builder-container.component';
47
- import { FontStylesComponent } from './groups/font-styles';
48
- import { PaddingComponent } from './groups/padding';
49
- import { LineHeightComponent } from './groups/line-height';
50
- import { WidthHeightComponent } from './groups/width-height';
51
- import { BorderComponent } from './groups/border';
52
- import { ColorComponent } from './groups/color';
53
- import { LinkComponent } from './groups/link';
54
- import { AlignComponent } from './groups/align';
55
- import { DirectionComponent } from './groups/direction';
56
- import { BackRepatComponent } from './groups/back-repeat';
57
- import { ConfirmDialogComponent } from './components/dialog.component';
58
- import { PreviewTemplateComponent } from './components/preview.component';
59
- import { PbEmailBuilderService } from './pb-email-builder.service';
60
- import { BlockComponent } from './components/block/block.component';
61
- import { ImageUploadComponent } from './groups/upload-image';
62
- import { BlockSettingsComponent } from './components/block-settings/block-settings.component';
63
- import { StructureSettingsComponent } from './components/structure-settings/structure-settings.component';
64
- import { GeneralSettingsComponent } from './components/general-settings/general-settings.component';
65
- import { MarginComponent } from './groups/margin';
66
- import { TemplateListDialogComponent } from './components/template-list-dialog/template-list-dialog.component';
67
- import { GapsComponent } from './groups/gaps';
68
- import { SlugifyPipe } from './pipes/slugify.pipe';
69
- import { FreeUsersMiddleware, PaidUsersMiddleware } from './services/user-middleware-service';
70
- import { FreeUsersImageUploader, PaidUsersImageUploader } from './services/user-image-uploader-service';
71
- import { PbUserMiddlewaresService } from './services/user-middleware-service/pb-middlewares.service';
72
- import { PbUserImageUploaderService } from './services/user-image-uploader-service/user-image-uploader.service';
73
- import { IpInterceptorInterceptor } from './interceptors/pb-interceptor.interceptor';
74
- import { ImportDialogComponent } from './components/import-dialog/import-dialog.component';
75
- import { UploadBottomSheetDialogComponent } from './services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component';
76
- import { UploadImageGalleryComponent } from './services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component';
77
- import { LIBRARY_IS_PRO } from './tokens/private-tokens';
78
- import { PbUserInterfaceService } from './services/internals/user-interfaces/user-interface.service';
79
- import { PbEmailObjectStoreService } from './services/internals/pb-email-object-store/pb-email-object-store.service';
80
- import { FreeUsersRestApi } from './services/user-rest-api-service';
81
- import { FreeUsersPbStorage } from './services/pb-storage';
82
- import { PbStorageService } from './services/pb-storage/pb-storage.service';
83
- import { PbUserRestApiService } from './services/user-rest-api-service/user-rest-api.service';
84
- import { PortalModule } from '@angular/cdk/portal';
85
- import '@angular/localize/init';
86
- /**
87
- * @internal
88
- * @param http
89
- */
90
- export function createCustomRestApiService(http) {
91
- return new FreeUsersRestApi(http);
92
- }
93
- /**
94
- * @internal
95
- * @param libraryIsProEnv
96
- */
97
- export function createUserMiddlewareService(libraryIsProEnv) {
98
- if (!libraryIsProEnv) {
99
- return new FreeUsersMiddleware();
100
- }
101
- else {
102
- return new PaidUsersMiddleware();
103
- }
104
- }
105
- /**
106
- * @internal
107
- * @param templateStorage
108
- */
109
- export function createUsersIpStorage(templateStorage) {
110
- return new FreeUsersPbStorage(templateStorage);
111
- }
112
- /**
113
- * @internal
114
- * @param libraryIsProEnv
115
- * @param matBottomSheet
116
- * @param matDialog
117
- * @param userMiddleware
118
- * @param userRestApi
119
- */
120
- export function createUserUploaderService(libraryIsProEnv, matBottomSheet, matDialog, userMiddleware, userRestApi) {
121
- if (!libraryIsProEnv) {
122
- return new FreeUsersImageUploader(matBottomSheet, userMiddleware);
123
- }
124
- else {
125
- return new PaidUsersImageUploader(matDialog, userMiddleware, userRestApi);
126
- }
127
- }
128
- const ɵ0 = {
129
- bounds: 'pb-builder-container',
130
- theme: 'bubble',
131
- format: 'html',
132
- trackChanges: 'all',
133
- suppressGlobalRegisterWarning: true
134
- };
135
- export class PbEmailBuilderModule {
136
- constructor(pbMiddlewaresService, userImageUploader, libraryIsPro) {
137
- if (!libraryIsPro && !(pbMiddlewaresService instanceof FreeUsersMiddleware)) {
138
- throw new Error('Upgrade to an Extended or Commercial License to use Custom Middlewares.');
139
- }
140
- if (!libraryIsPro && !(userImageUploader instanceof FreeUsersImageUploader)) {
141
- throw new Error('Upgrade to an Extended or Commercial License to use Custom Image Uploader.');
142
- }
143
- }
144
- /**
145
- * @deprecated use PbEmailBuilderModule.withConfig(userConfig) instead
146
- * @internal
147
- */
148
- static forRoot(userConfig = {}) {
149
- return PbEmailBuilderModule.withConfig(userConfig);
150
- }
151
- /**
152
- * Import module with configurations
153
- * @param userConfig Configurations
154
- */
155
- static withConfig(userConfig = {}) {
156
- return {
157
- ngModule: PbEmailBuilderModule,
158
- providers: [
159
- PbEmailBuilderService,
160
- PbEmailObjectStoreService,
161
- PbUserInterfaceService,
162
- { provide: PB_CONFIG, useValue: userConfig },
163
- {
164
- provide: PbUserMiddlewaresService,
165
- useFactory: createUserMiddlewareService,
166
- deps: [LIBRARY_IS_PRO]
167
- },
168
- {
169
- provide: PbStorageService,
170
- useFactory: createUsersIpStorage,
171
- deps: [PB_TEMPLATES_TEMPORARY_STORAGE]
172
- },
173
- {
174
- provide: PbUserImageUploaderService,
175
- useFactory: createUserUploaderService,
176
- deps: [LIBRARY_IS_PRO, MatBottomSheet, MatDialog, PbUserMiddlewaresService, PbUserRestApiService]
177
- },
178
- {
179
- provide: PbUserRestApiService,
180
- useFactory: createCustomRestApiService,
181
- deps: [HttpClient]
182
- }
183
- ]
184
- };
185
- }
186
- }
187
- PbEmailBuilderModule.decorators = [
188
- { type: NgModule, args: [{
189
- imports: [
190
- CommonModule,
191
- HttpClientModule,
192
- QuillModule,
193
- FlexLayoutModule,
194
- DragDropModule,
195
- FormsModule,
196
- ColorChromeModule,
197
- MatButtonModule,
198
- MatIconModule,
199
- MatFormFieldModule,
200
- MatInputModule,
201
- MatTabsModule,
202
- MatSliderModule,
203
- MatSelectModule,
204
- MatSlideToggleModule,
205
- MatButtonToggleModule,
206
- MatDividerModule,
207
- MatTooltipModule,
208
- MatDialogModule,
209
- MatSnackBarModule,
210
- MatProgressBarModule,
211
- MatMenuModule,
212
- MatSidenavModule,
213
- MatToolbarModule,
214
- MatListModule,
215
- MatBottomSheetModule,
216
- MatDividerModule,
217
- MatExpansionModule,
218
- ResizableModule,
219
- ScrollingModule,
220
- PortalModule
221
- ],
222
- declarations: [
223
- PbEmailBuilderComponent,
224
- StructureComponent,
225
- BlockComponent,
226
- DynamicComponentDirective,
227
- PreviewTemplateComponent,
228
- TextElementComponent,
229
- ImageComponent,
230
- ButtonComponent,
231
- DividerComponent,
232
- SpacerComponent,
233
- SocialComponent,
234
- BuilderContainerComponent,
235
- FontStylesComponent,
236
- PaddingComponent,
237
- MarginComponent,
238
- GapsComponent,
239
- LineHeightComponent,
240
- WidthHeightComponent,
241
- BorderComponent,
242
- ColorComponent,
243
- LinkComponent,
244
- AlignComponent,
245
- DirectionComponent,
246
- BackRepatComponent,
247
- ConfirmDialogComponent,
248
- ImageUploadComponent,
249
- BlockSettingsComponent,
250
- StructureSettingsComponent,
251
- GeneralSettingsComponent,
252
- UploadBottomSheetDialogComponent,
253
- UploadImageGalleryComponent,
254
- TemplateListDialogComponent,
255
- SlugifyPipe,
256
- ImportDialogComponent
257
- ],
258
- exports: [PbEmailBuilderComponent, PreviewTemplateComponent, SlugifyPipe],
259
- entryComponents: [
260
- TextElementComponent,
261
- ImageComponent,
262
- ButtonComponent,
263
- DividerComponent,
264
- SpacerComponent,
265
- SocialComponent,
266
- ConfirmDialogComponent,
267
- UploadBottomSheetDialogComponent,
268
- UploadImageGalleryComponent,
269
- TemplateListDialogComponent,
270
- ImportDialogComponent
271
- ],
272
- providers: [
273
- {
274
- provide: QUILL_CONFIG_TOKEN,
275
- useValue: ɵ0
276
- },
277
- { provide: HTTP_INTERCEPTORS, useClass: IpInterceptorInterceptor, multi: true },
278
- // { provide: PB_BLOCK_ELEMENT, useClass: TextBlock, multi: true },
279
- PbEmailBuilderService,
280
- PbEmailObjectStoreService,
281
- PbUserInterfaceService
282
- ]
283
- },] }
284
- ];
285
- PbEmailBuilderModule.ctorParameters = () => [
286
- { type: PbUserMiddlewaresService },
287
- { type: PbUserImageUploaderService },
288
- { type: Boolean, decorators: [{ type: Inject, args: [LIBRARY_IS_PRO,] }] }
289
- ];
290
- export { ɵ0 };
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItZW1haWwtYnVpbGRlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvcGItZW1haWwtYnVpbGRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUs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LGFBQWE7b0JBQ2IsY0FBYztvQkFDZCxrQkFBa0I7b0JBQ2xCLGtCQUFrQjtvQkFDbEIsc0JBQXNCO29CQUN0QixvQkFBb0I7b0JBQ3BCLHNCQUFzQjtvQkFDdEIsMEJBQTBCO29CQUMxQix3QkFBd0I7b0JBQ3hCLGdDQUFnQztvQkFDaEMsMkJBQTJCO29CQUMzQiwyQkFBMkI7b0JBQzNCLFdBQVc7b0JBQ1gscUJBQXFCO2lCQUN0QjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxXQUFXLENBQUM7Z0JBQ3pFLGVBQWUsRUFBRTtvQkFDZixvQkFBb0I7b0JBQ3BCLGNBQWM7b0JBQ2QsZUFBZTtvQkFDZixnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2YsZUFBZTtvQkFDZixzQkFBc0I7b0JBQ3RCLGdDQUFnQztvQkFDaEMsMkJBQTJCO29CQUMzQiwyQkFBMkI7b0JBQzNCLHFCQUFxQjtpQkFDdEI7Z0JBQ0QsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxrQkFBa0I7d0JBQzNCLFFBQVEsSUFNUDtxQkFDRjtvQkFDRCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDL0UsbUVBQW1FO29CQUNuRSxxQkFBcUI7b0JBQ3JCLHlCQUF5QjtvQkFDekIsc0JBQXNCO2lCQUN2QjthQUNGOzs7WUE3S1Esd0JBQXdCO1lBQ3hCLDBCQUEwQjswQ0FpTDlCLE1BQU0sU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXQsIE1hdEJvdHRvbVNoZWV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFNsaWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlcic7XG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNYXRUb29sYmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhcic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBSZXNpemFibGVNb2R1bGUgfSBmcm9tICdhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMsIEh0dHBDbGllbnQsIEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbmltcG9ydCAncXVpbGwnO1xuaW1wb3J0IHsgUVVJTExfQ09ORklHX1RPS0VOLCBRdWlsbE1vZHVsZSB9IGZyb20gJ25neC1xdWlsbCc7XG5pbXBvcnQgeyBDb2xvckNocm9tZU1vZHVsZSB9IGZyb20gJ25neC1jb2xvci9jaHJvbWUnO1xuXG5pbXBvcnQgeyBJRm9yUm9vdENvbmYgfSBmcm9tICcuL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQQl9DT05GSUcsIFBCX1RFTVBMQVRFU19URU1QT1JBUllfU1RPUkFHRSB9IGZyb20gJy4vdG9rZW5zL3Rva2Vucyc7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RydWN0dXJlL3N0cnVjdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGJFbWFpbEJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuL3BiLWVtYWlsLWJ1aWxkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvZHluYW1pYy1jb21wb25lbnQuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL2VsZW1lbnRzL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0RWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvdGV4dC1lbGVtZW50L3RleHQtZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9lbGVtZW50cy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9lbGVtZW50cy9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNwYWNlckNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvc3BhY2VyL3NwYWNlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU29jaWFsQ29tcG9uZW50IH0gZnJvbSAnLi9lbGVtZW50cy9zb2NpYWwvc29jaWFsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEJ1aWxkZXJDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnVpbGRlci1jb250YWluZXIvYnVpbGRlci1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZvbnRTdHlsZXNDb21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy9mb250LXN0eWxlcyc7XG5pbXBvcnQgeyBQYWRkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvcGFkZGluZyc7XG5pbXBvcnQgeyBMaW5lSGVpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvbGluZS1oZWlnaHQnO1xuaW1wb3J0IHsgV2lkdGhIZWlnaHRDb21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy93aWR0aC1oZWlnaHQnO1xuaW1wb3J0IHsgQm9yZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvYm9yZGVyJztcbmltcG9ydCB7IENvbG9yQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvY29sb3InO1xuaW1wb3J0IHsgTGlua0NvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL2xpbmsnO1xuaW1wb3J0IHsgQWxpZ25Db21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy9hbGlnbic7XG5pbXBvcnQgeyBEaXJlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy9kaXJlY3Rpb24nO1xuaW1wb3J0IHsgQmFja1JlcGF0Q29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvYmFjay1yZXBlYXQnO1xuaW1wb3J0IHsgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFByZXZpZXdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYkVtYWlsQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3BiLWVtYWlsLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCbG9ja0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ibG9jay9ibG9jay5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy91cGxvYWQtaW1hZ2UnO1xuaW1wb3J0IHsgQmxvY2tTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ibG9jay1zZXR0aW5ncy9ibG9jay1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RydWN0dXJlU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RydWN0dXJlLXNldHRpbmdzL3N0cnVjdHVyZS1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VuZXJhbFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyYWwtc2V0dGluZ3MvZ2VuZXJhbC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWFyZ2luQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvbWFyZ2luJztcbmltcG9ydCB7IFRlbXBsYXRlTGlzdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90ZW1wbGF0ZS1saXN0LWRpYWxvZy90ZW1wbGF0ZS1saXN0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2Fwc0NvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL2dhcHMnO1xuXG5pbXBvcnQgeyBTbHVnaWZ5UGlwZSB9IGZyb20gJy4vcGlwZXMvc2x1Z2lmeS5waXBlJztcblxuaW1wb3J0IHsgRnJlZVVzZXJzTWlkZGxld2FyZSwgUGFpZFVzZXJzTWlkZGxld2FyZSB9IGZyb20gJy4vc2VydmljZXMvdXNlci1taWRkbGV3YXJlLXNlcnZpY2UnO1xuaW1wb3J0IHsgRnJlZVVzZXJzSW1hZ2VVcGxvYWRlciwgUGFpZFVzZXJzSW1hZ2VVcGxvYWRlciB9IGZyb20gJy4vc2VydmljZXMvdXNlci1pbWFnZS11cGxvYWRlci1zZXJ2aWNlJztcblxuaW1wb3J0IHsgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBiVXNlckltYWdlVXBsb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLWltYWdlLXVwbG9hZGVyLXNlcnZpY2UvdXNlci1pbWFnZS11cGxvYWRlci5zZXJ2aWNlJztcblxuaW1wb3J0IHsgSXBJbnRlcmNlcHRvckludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmNlcHRvcnMvcGItaW50ZXJjZXB0b3IuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgSW1wb3J0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ltcG9ydC1kaWFsb2cvaW1wb3J0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkSW1hZ2VHYWxsZXJ5Q29tcG9uZW50IH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLWltYWdlLXVwbG9hZGVyLXNlcnZpY2UvdXBsb2FkLWltYWdlLWdhbGxlcnkvdXBsb2FkLWltYWdlLWdhbGxlcnkuY29tcG9uZW50JztcblxuaW1wb3J0IHsgTElCUkFSWV9JU19QUk8gfSBmcm9tICcuL3Rva2Vucy9wcml2YXRlLXRva2Vucyc7XG5pbXBvcnQgeyBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9pbnRlcm5hbHMvdXNlci1pbnRlcmZhY2VzL3VzZXItaW50ZXJmYWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBGcmVlVXNlcnNSZXN0QXBpIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLXJlc3QtYXBpLXNlcnZpY2UnO1xuaW1wb3J0IHsgRnJlZVVzZXJzUGJTdG9yYWdlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wYi1zdG9yYWdlJztcbmltcG9ydCB7IFBiU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BiLXN0b3JhZ2UvcGItc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBiVXNlclJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgJ0Bhbmd1bGFyL2xvY2FsaXplL2luaXQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGh0dHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVJlc3RBcGlTZXJ2aWNlKGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgcmV0dXJuIG5ldyBGcmVlVXNlcnNSZXN0QXBpKGh0dHApO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGxpYnJhcnlJc1Byb0VudlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlck1pZGRsZXdhcmVTZXJ2aWNlKGxpYnJhcnlJc1Byb0VudjogYm9vbGVhbikge1xuICBpZiAoIWxpYnJhcnlJc1Byb0Vudikge1xuICAgIHJldHVybiBuZXcgRnJlZVVzZXJzTWlkZGxld2FyZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgUGFpZFVzZXJzTWlkZGxld2FyZSgpO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0gdGVtcGxhdGVTdG9yYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2Vyc0lwU3RvcmFnZSh0ZW1wbGF0ZVN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgcmV0dXJuIG5ldyBGcmVlVXNlcnNQYlN0b3JhZ2UodGVtcGxhdGVTdG9yYWdlKTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBsaWJyYXJ5SXNQcm9FbnZcbiAqIEBwYXJhbSBtYXRCb3R0b21TaGVldFxuICogQHBhcmFtIG1hdERpYWxvZ1xuICogQHBhcmFtIHVzZXJNaWRkbGV3YXJlXG4gKiBAcGFyYW0gdXNlclJlc3RBcGlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVzZXJVcGxvYWRlclNlcnZpY2UoXG4gIGxpYnJhcnlJc1Byb0VudjogYm9vbGVhbixcbiAgbWF0Qm90dG9tU2hlZXQ6IE1hdEJvdHRvbVNoZWV0LFxuICBtYXREaWFsb2c6IE1hdERpYWxvZyxcbiAgdXNlck1pZGRsZXdhcmU6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcbiAgdXNlclJlc3RBcGk6IFBiVXNlclJlc3RBcGlTZXJ2aWNlXG4pIHtcbiAgaWYgKCFsaWJyYXJ5SXNQcm9FbnYpIHtcbiAgICByZXR1cm4gbmV3IEZyZWVVc2Vyc0ltYWdlVXBsb2FkZXIobWF0Qm90dG9tU2hlZXQsIHVzZXJNaWRkbGV3YXJlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFBhaWRVc2Vyc0ltYWdlVXBsb2FkZXIobWF0RGlhbG9nLCB1c2VyTWlkZGxld2FyZSwgdXNlclJlc3RBcGkpO1xuICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICBRdWlsbE1vZHVsZSxcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbG9yQ2hyb21lTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcblxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgTWF0U2xpZGVyTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICBNYXRTbmFja0Jhck1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXG4gICAgTWF0VG9vbGJhck1vZHVsZSxcbiAgICBNYXRMaXN0TW9kdWxlLFxuICAgIE1hdEJvdHRvbVNoZWV0TW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgIFJlc2l6YWJsZU1vZHVsZSxcbiAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgUG9ydGFsTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFBiRW1haWxCdWlsZGVyQ29tcG9uZW50LFxuICAgIFN0cnVjdHVyZUNvbXBvbmVudCxcbiAgICBCbG9ja0NvbXBvbmVudCxcbiAgICBEeW5hbWljQ29tcG9uZW50RGlyZWN0aXZlLFxuICAgIFByZXZpZXdUZW1wbGF0ZUNvbXBvbmVudCxcblxuICAgIFRleHRFbGVtZW50Q29tcG9uZW50LFxuICAgIEltYWdlQ29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaXZpZGVyQ29tcG9uZW50LFxuICAgIFNwYWNlckNvbXBvbmVudCxcbiAgICBTb2NpYWxDb21wb25lbnQsXG5cbiAgICBCdWlsZGVyQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIEZvbnRTdHlsZXNDb21wb25lbnQsXG4gICAgUGFkZGluZ0NvbXBvbmVudCxcbiAgICBNYXJnaW5Db21wb25lbnQsXG4gICAgR2Fwc0NvbXBvbmVudCxcbiAgICBMaW5lSGVpZ2h0Q29tcG9uZW50LFxuICAgIFdpZHRoSGVpZ2h0Q29tcG9uZW50LFxuICAgIEJvcmRlckNvbXBvbmVudCxcbiAgICBDb2xvckNvbXBvbmVudCxcbiAgICBMaW5rQ29tcG9uZW50LFxuICAgIEFsaWduQ29tcG9uZW50LFxuICAgIERpcmVjdGlvbkNvbXBvbmVudCxcbiAgICBCYWNrUmVwYXRDb21wb25lbnQsXG4gICAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcbiAgICBJbWFnZVVwbG9hZENvbXBvbmVudCxcbiAgICBCbG9ja1NldHRpbmdzQ29tcG9uZW50LFxuICAgIFN0cnVjdHVyZVNldHRpbmdzQ29tcG9uZW50LFxuICAgIEdlbmVyYWxTZXR0aW5nc0NvbXBvbmVudCxcbiAgICBVcGxvYWRCb3R0b21TaGVldERpYWxvZ0NvbXBvbmVudCxcbiAgICBVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQsXG4gICAgVGVtcGxhdGVMaXN0RGlhbG9nQ29tcG9uZW50LFxuICAgIFNsdWdpZnlQaXBlLFxuICAgIEltcG9ydERpYWxvZ0NvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbUGJFbWFpbEJ1aWxkZXJDb21wb25lbnQsIFByZXZpZXdUZW1wbGF0ZUNvbXBvbmVudCwgU2x1Z2lmeVBpcGVdLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBUZXh0RWxlbWVudENvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgRGl2aWRlckNvbXBvbmVudCxcbiAgICBTcGFjZXJDb21wb25lbnQsXG4gICAgU29jaWFsQ29tcG9uZW50LFxuICAgIENvbmZpcm1EaWFsb2dDb21wb25lbnQsXG4gICAgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQsXG4gICAgVXBsb2FkSW1hZ2VHYWxsZXJ5Q29tcG9uZW50LFxuICAgIFRlbXBsYXRlTGlzdERpYWxvZ0NvbXBvbmVudCxcbiAgICBJbXBvcnREaWFsb2dDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUVVJTExfQ09ORklHX1RPS0VOLFxuICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgYm91bmRzOiAncGItYnVpbGRlci1jb250YWluZXInLFxuICAgICAgICB0aGVtZTogJ2J1YmJsZScsXG4gICAgICAgIGZvcm1hdDogJ2h0bWwnLFxuICAgICAgICB0cmFja0NoYW5nZXM6ICdhbGwnLFxuICAgICAgICBzdXBwcmVzc0dsb2JhbFJlZ2lzdGVyV2FybmluZzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IElwSW50ZXJjZXB0b3JJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUgfSxcbiAgICAvLyB7IHByb3ZpZGU6IFBCX0JMT0NLX0VMRU1FTlQsIHVzZUNsYXNzOiBUZXh0QmxvY2ssIG11bHRpOiB0cnVlIH0sXG4gICAgUGJFbWFpbEJ1aWxkZXJTZXJ2aWNlLFxuICAgIFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UsXG4gICAgUGJVc2VySW50ZXJmYWNlU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBiRW1haWxCdWlsZGVyTW9kdWxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcGJNaWRkbGV3YXJlc1NlcnZpY2U6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcbiAgICB1c2VySW1hZ2VVcGxvYWRlcjogUGJVc2VySW1hZ2VVcGxvYWRlclNlcnZpY2UsXG4gICAgQEluamVjdChMSUJSQVJZX0lTX1BSTykgbGlicmFyeUlzUHJvOiBib29sZWFuXG4gICkge1xuICAgIGlmICghbGlicmFyeUlzUHJvICYmICEocGJNaWRkbGV3YXJlc1NlcnZpY2UgaW5zdGFuY2VvZiBGcmVlVXNlcnNNaWRkbGV3YXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGdyYWRlIHRvIGFuIEV4dGVuZGVkIG9yIENvbW1lcmNpYWwgTGljZW5zZSB0byB1c2UgQ3VzdG9tIE1pZGRsZXdhcmVzLicpO1xuICAgIH1cbiAgICBpZiAoIWxpYnJhcnlJc1BybyAmJiAhKHVzZXJJbWFnZVVwbG9hZGVyIGluc3RhbmNlb2YgRnJlZVVzZXJzSW1hZ2VVcGxvYWRlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXBncmFkZSB0byBhbiBFeHRlbmRlZCBvciBDb21tZXJjaWFsIExpY2Vuc2UgdG8gdXNlIEN1c3RvbSBJbWFnZSBVcGxvYWRlci4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIFBiRW1haWxCdWlsZGVyTW9kdWxlLndpdGhDb25maWcodXNlckNvbmZpZykgaW5zdGVhZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0YXRpYyBmb3JSb290KHVzZXJDb25maWc6IElGb3JSb290Q29uZiA9IHt9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxQYkVtYWlsQnVpbGRlck1vZHVsZT4ge1xuICAgIHJldHVybiBQYkVtYWlsQnVpbGRlck1vZHVsZS53aXRoQ29uZmlnKHVzZXJDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBtb2R1bGUgd2l0aCBjb25maWd1cmF0aW9uc1xuICAgKiBAcGFyYW0gdXNlckNvbmZpZyBDb25maWd1cmF0aW9uc1xuICAgKi9cbiAgc3RhdGljIHdpdGhDb25maWcodXNlckNvbmZpZzogSUZvclJvb3RDb25mID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBiRW1haWxCdWlsZGVyTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBQYkVtYWlsQnVpbGRlck1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBQYkVtYWlsQnVpbGRlclNlcnZpY2UsXG4gICAgICAgIFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UsXG4gICAgICAgIFBiVXNlckludGVyZmFjZVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogUEJfQ09ORklHLCB1c2VWYWx1ZTogdXNlckNvbmZpZyB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZVVzZXJNaWRkbGV3YXJlU2VydmljZSxcbiAgICAgICAgICBkZXBzOiBbTElCUkFSWV9JU19QUk9dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQYlN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZVVzZXJzSXBTdG9yYWdlLFxuICAgICAgICAgIGRlcHM6IFtQQl9URU1QTEFURVNfVEVNUE9SQVJZX1NUT1JBR0VdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBjcmVhdGVVc2VyVXBsb2FkZXJTZXJ2aWNlLFxuICAgICAgICAgIGRlcHM6IFtMSUJSQVJZX0lTX1BSTywgTWF0Qm90dG9tU2hlZXQsIE1hdERpYWxvZywgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlLCBQYlVzZXJSZXN0QXBpU2VydmljZV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFBiVXNlclJlc3RBcGlTZXJ2aWNlLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZUN1c3RvbVJlc3RBcGlTZXJ2aWNlLFxuICAgICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50XVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
1
+ /*
2
+ * Copyright (c) 2024 Pobuca.
3
+ * All rights reserved.
4
+ */
5
+ import { Inject, NgModule } from '@angular/core';
6
+ import { DragDropModule } from '@angular/cdk/drag-drop';
7
+ import { FlexLayoutModule } from '@angular/flex-layout';
8
+ import { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
11
+ import { MatDialog, MatDialogModule } from '@angular/material/dialog';
12
+ import { MatDividerModule } from '@angular/material/divider';
13
+ import { MatExpansionModule } from '@angular/material/expansion';
14
+ import { MatFormFieldModule } from '@angular/material/form-field';
15
+ import { MatIconModule } from '@angular/material/icon';
16
+ import { MatInputModule } from '@angular/material/input';
17
+ import { MatListModule } from '@angular/material/list';
18
+ import { MatMenuModule } from '@angular/material/menu';
19
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
20
+ import { MatSelectModule } from '@angular/material/select';
21
+ import { MatSidenavModule } from '@angular/material/sidenav';
22
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
23
+ import { MatSliderModule } from '@angular/material/slider';
24
+ import { MatSnackBarModule } from '@angular/material/snack-bar';
25
+ import { MatTabsModule } from '@angular/material/tabs';
26
+ import { MatToolbarModule } from '@angular/material/toolbar';
27
+ import { MatTooltipModule } from '@angular/material/tooltip';
28
+ import { ResizableModule } from 'angular-resizable-element';
29
+ import { FormsModule } from '@angular/forms';
30
+ import { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';
31
+ import { CommonModule } from '@angular/common';
32
+ import { ScrollingModule } from '@angular/cdk/scrolling';
33
+ import 'quill';
34
+ import { QUILL_CONFIG_TOKEN, QuillModule } from 'ngx-quill';
35
+ import { ColorChromeModule } from 'ngx-color/chrome';
36
+ import { PB_CONFIG, PB_TEMPLATES_TEMPORARY_STORAGE } from './tokens/tokens';
37
+ import { StructureComponent } from './components/structure/structure.component';
38
+ import { PbEmailBuilderComponent } from './pb-email-builder.component';
39
+ import { DynamicComponentDirective } from './directives/dynamic-component.directive';
40
+ import { ImageComponent } from './elements/image/image.component';
41
+ import { TextElementComponent } from './elements/text-element/text-element.component';
42
+ import { ButtonComponent } from './elements/button/button.component';
43
+ import { DividerComponent } from './elements/divider/divider.component';
44
+ import { SpacerComponent } from './elements/spacer/spacer.component';
45
+ import { SocialComponent } from './elements/social/social.component';
46
+ import { BuilderContainerComponent } from './components/builder-container/builder-container.component';
47
+ import { FontStylesComponent } from './groups/font-styles';
48
+ import { PaddingComponent } from './groups/padding';
49
+ import { LineHeightComponent } from './groups/line-height';
50
+ import { WidthHeightComponent } from './groups/width-height';
51
+ import { BorderComponent } from './groups/border';
52
+ import { ColorComponent } from './groups/color';
53
+ import { LinkComponent } from './groups/link';
54
+ import { AlignComponent } from './groups/align';
55
+ import { DirectionComponent } from './groups/direction';
56
+ import { BackRepatComponent } from './groups/back-repeat';
57
+ import { ConfirmDialogComponent } from './components/dialog.component';
58
+ import { PreviewTemplateComponent } from './components/preview.component';
59
+ import { PbEmailBuilderService } from './pb-email-builder.service';
60
+ import { BlockComponent } from './components/block/block.component';
61
+ import { ImageUploadComponent } from './groups/upload-image';
62
+ import { BlockSettingsComponent } from './components/block-settings/block-settings.component';
63
+ import { StructureSettingsComponent } from './components/structure-settings/structure-settings.component';
64
+ import { GeneralSettingsComponent } from './components/general-settings/general-settings.component';
65
+ import { MarginComponent } from './groups/margin';
66
+ import { TemplateListDialogComponent } from './components/template-list-dialog/template-list-dialog.component';
67
+ import { GapsComponent } from './groups/gaps';
68
+ import { SlugifyPipe } from './pipes/slugify.pipe';
69
+ import { FreeUsersMiddleware, PaidUsersMiddleware } from './services/user-middleware-service';
70
+ import { FreeUsersImageUploader, PaidUsersImageUploader } from './services/user-image-uploader-service';
71
+ import { PbUserMiddlewaresService } from './services/user-middleware-service/pb-middlewares.service';
72
+ import { PbUserImageUploaderService } from './services/user-image-uploader-service/user-image-uploader.service';
73
+ import { IpInterceptorInterceptor } from './interceptors/pb-interceptor.interceptor';
74
+ import { ImportDialogComponent } from './components/import-dialog/import-dialog.component';
75
+ import { UploadBottomSheetDialogComponent } from './services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component';
76
+ import { UploadImageGalleryComponent } from './services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component';
77
+ import { LIBRARY_IS_PRO } from './tokens/private-tokens';
78
+ import { PbUserInterfaceService } from './services/internals/user-interfaces/user-interface.service';
79
+ import { PbEmailObjectStoreService } from './services/internals/pb-email-object-store/pb-email-object-store.service';
80
+ import { FreeUsersRestApi } from './services/user-rest-api-service';
81
+ import { FreeUsersPbStorage } from './services/pb-storage';
82
+ import { PbStorageService } from './services/pb-storage/pb-storage.service';
83
+ import { PbUserRestApiService } from './services/user-rest-api-service/user-rest-api.service';
84
+ import { PortalModule } from '@angular/cdk/portal';
85
+ import '@angular/localize/init';
86
+ /**
87
+ * @internal
88
+ * @param http
89
+ */
90
+ export function createCustomRestApiService(http) {
91
+ return new FreeUsersRestApi(http);
92
+ }
93
+ /**
94
+ * @internal
95
+ * @param libraryIsProEnv
96
+ */
97
+ export function createUserMiddlewareService(libraryIsProEnv) {
98
+ if (!libraryIsProEnv) {
99
+ return new FreeUsersMiddleware();
100
+ }
101
+ else {
102
+ return new PaidUsersMiddleware();
103
+ }
104
+ }
105
+ /**
106
+ * @internal
107
+ * @param templateStorage
108
+ */
109
+ export function createUsersIpStorage(templateStorage) {
110
+ return new FreeUsersPbStorage(templateStorage);
111
+ }
112
+ /**
113
+ * @internal
114
+ * @param libraryIsProEnv
115
+ * @param matBottomSheet
116
+ * @param matDialog
117
+ * @param userMiddleware
118
+ * @param userRestApi
119
+ */
120
+ export function createUserUploaderService(libraryIsProEnv, matBottomSheet, matDialog, userMiddleware, userRestApi) {
121
+ if (!libraryIsProEnv) {
122
+ return new FreeUsersImageUploader(matBottomSheet, userMiddleware);
123
+ }
124
+ else {
125
+ return new PaidUsersImageUploader(matDialog, userMiddleware, userRestApi);
126
+ }
127
+ }
128
+ const ɵ0 = {
129
+ bounds: 'pb-builder-container',
130
+ theme: 'bubble',
131
+ format: 'html',
132
+ trackChanges: 'all',
133
+ suppressGlobalRegisterWarning: true
134
+ };
135
+ export class PbEmailBuilderModule {
136
+ constructor(pbMiddlewaresService, userImageUploader, libraryIsPro) {
137
+ if (!libraryIsPro && !(pbMiddlewaresService instanceof FreeUsersMiddleware)) {
138
+ throw new Error('Upgrade to an Extended or Commercial License to use Custom Middlewares.');
139
+ }
140
+ if (!libraryIsPro && !(userImageUploader instanceof FreeUsersImageUploader)) {
141
+ throw new Error('Upgrade to an Extended or Commercial License to use Custom Image Uploader.');
142
+ }
143
+ }
144
+ /**
145
+ * @deprecated use PbEmailBuilderModule.withConfig(userConfig) instead
146
+ * @internal
147
+ */
148
+ static forRoot(userConfig = {}) {
149
+ return PbEmailBuilderModule.withConfig(userConfig);
150
+ }
151
+ /**
152
+ * Import module with configurations
153
+ * @param userConfig Configurations
154
+ */
155
+ static withConfig(userConfig = {}) {
156
+ return {
157
+ ngModule: PbEmailBuilderModule,
158
+ providers: [
159
+ PbEmailBuilderService,
160
+ PbEmailObjectStoreService,
161
+ PbUserInterfaceService,
162
+ { provide: PB_CONFIG, useValue: userConfig },
163
+ {
164
+ provide: PbUserMiddlewaresService,
165
+ useFactory: createUserMiddlewareService,
166
+ deps: [LIBRARY_IS_PRO]
167
+ },
168
+ {
169
+ provide: PbStorageService,
170
+ useFactory: createUsersIpStorage,
171
+ deps: [PB_TEMPLATES_TEMPORARY_STORAGE]
172
+ },
173
+ {
174
+ provide: PbUserImageUploaderService,
175
+ useFactory: createUserUploaderService,
176
+ deps: [LIBRARY_IS_PRO, MatBottomSheet, MatDialog, PbUserMiddlewaresService, PbUserRestApiService]
177
+ },
178
+ {
179
+ provide: PbUserRestApiService,
180
+ useFactory: createCustomRestApiService,
181
+ deps: [HttpClient]
182
+ }
183
+ ]
184
+ };
185
+ }
186
+ }
187
+ PbEmailBuilderModule.decorators = [
188
+ { type: NgModule, args: [{
189
+ imports: [
190
+ CommonModule,
191
+ HttpClientModule,
192
+ QuillModule,
193
+ FlexLayoutModule,
194
+ DragDropModule,
195
+ FormsModule,
196
+ ColorChromeModule,
197
+ MatButtonModule,
198
+ MatIconModule,
199
+ MatFormFieldModule,
200
+ MatInputModule,
201
+ MatTabsModule,
202
+ MatSliderModule,
203
+ MatSelectModule,
204
+ MatSlideToggleModule,
205
+ MatButtonToggleModule,
206
+ MatDividerModule,
207
+ MatTooltipModule,
208
+ MatDialogModule,
209
+ MatSnackBarModule,
210
+ MatProgressBarModule,
211
+ MatMenuModule,
212
+ MatSidenavModule,
213
+ MatToolbarModule,
214
+ MatListModule,
215
+ MatBottomSheetModule,
216
+ MatDividerModule,
217
+ MatExpansionModule,
218
+ ResizableModule,
219
+ ScrollingModule,
220
+ PortalModule
221
+ ],
222
+ declarations: [
223
+ PbEmailBuilderComponent,
224
+ StructureComponent,
225
+ BlockComponent,
226
+ DynamicComponentDirective,
227
+ PreviewTemplateComponent,
228
+ TextElementComponent,
229
+ ImageComponent,
230
+ ButtonComponent,
231
+ DividerComponent,
232
+ SpacerComponent,
233
+ SocialComponent,
234
+ BuilderContainerComponent,
235
+ FontStylesComponent,
236
+ PaddingComponent,
237
+ MarginComponent,
238
+ GapsComponent,
239
+ LineHeightComponent,
240
+ WidthHeightComponent,
241
+ BorderComponent,
242
+ ColorComponent,
243
+ LinkComponent,
244
+ AlignComponent,
245
+ DirectionComponent,
246
+ BackRepatComponent,
247
+ ConfirmDialogComponent,
248
+ ImageUploadComponent,
249
+ BlockSettingsComponent,
250
+ StructureSettingsComponent,
251
+ GeneralSettingsComponent,
252
+ UploadBottomSheetDialogComponent,
253
+ UploadImageGalleryComponent,
254
+ TemplateListDialogComponent,
255
+ SlugifyPipe,
256
+ ImportDialogComponent
257
+ ],
258
+ exports: [PbEmailBuilderComponent, PreviewTemplateComponent, SlugifyPipe],
259
+ entryComponents: [
260
+ TextElementComponent,
261
+ ImageComponent,
262
+ ButtonComponent,
263
+ DividerComponent,
264
+ SpacerComponent,
265
+ SocialComponent,
266
+ ConfirmDialogComponent,
267
+ UploadBottomSheetDialogComponent,
268
+ UploadImageGalleryComponent,
269
+ TemplateListDialogComponent,
270
+ ImportDialogComponent
271
+ ],
272
+ providers: [
273
+ {
274
+ provide: QUILL_CONFIG_TOKEN,
275
+ useValue: ɵ0
276
+ },
277
+ { provide: HTTP_INTERCEPTORS, useClass: IpInterceptorInterceptor, multi: true },
278
+ // { provide: PB_BLOCK_ELEMENT, useClass: TextBlock, multi: true },
279
+ PbEmailBuilderService,
280
+ PbEmailObjectStoreService,
281
+ PbUserInterfaceService
282
+ ]
283
+ },] }
284
+ ];
285
+ PbEmailBuilderModule.ctorParameters = () => [
286
+ { type: PbUserMiddlewaresService },
287
+ { type: PbUserImageUploaderService },
288
+ { type: Boolean, decorators: [{ type: Inject, args: [LIBRARY_IS_PRO,] }] }
289
+ ];
290
+ export { ɵ0 };
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGItZW1haWwtYnVpbGRlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvcGItZW1haWwtYnVpbGRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUs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LGFBQWE7b0JBQ2IsY0FBYztvQkFDZCxrQkFBa0I7b0JBQ2xCLGtCQUFrQjtvQkFDbEIsc0JBQXNCO29CQUN0QixvQkFBb0I7b0JBQ3BCLHNCQUFzQjtvQkFDdEIsMEJBQTBCO29CQUMxQix3QkFBd0I7b0JBQ3hCLGdDQUFnQztvQkFDaEMsMkJBQTJCO29CQUMzQiwyQkFBMkI7b0JBQzNCLFdBQVc7b0JBQ1gscUJBQXFCO2lCQUN0QjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxXQUFXLENBQUM7Z0JBQ3pFLGVBQWUsRUFBRTtvQkFDZixvQkFBb0I7b0JBQ3BCLGNBQWM7b0JBQ2QsZUFBZTtvQkFDZixnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2YsZUFBZTtvQkFDZixzQkFBc0I7b0JBQ3RCLGdDQUFnQztvQkFDaEMsMkJBQTJCO29CQUMzQiwyQkFBMkI7b0JBQzNCLHFCQUFxQjtpQkFDdEI7Z0JBQ0QsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxrQkFBa0I7d0JBQzNCLFFBQVEsSUFNUDtxQkFDRjtvQkFDRCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDL0UsbUVBQW1FO29CQUNuRSxxQkFBcUI7b0JBQ3JCLHlCQUF5QjtvQkFDekIsc0JBQXNCO2lCQUN2QjthQUNGOzs7WUE3S1Esd0JBQXdCO1lBQ3hCLDBCQUEwQjswQ0FpTDlCLE1BQU0sU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3QsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XHJcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0LCBNYXRCb3R0b21TaGVldE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xyXG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTWF0VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXInO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFJlc2l6YWJsZU1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMsIEh0dHBDbGllbnQsIEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5cclxuaW1wb3J0ICdxdWlsbCc7XHJcbmltcG9ydCB7IFFVSUxMX0NPTkZJR19UT0tFTiwgUXVpbGxNb2R1bGUgfSBmcm9tICduZ3gtcXVpbGwnO1xyXG5pbXBvcnQgeyBDb2xvckNocm9tZU1vZHVsZSB9IGZyb20gJ25neC1jb2xvci9jaHJvbWUnO1xyXG5cclxuaW1wb3J0IHsgSUZvclJvb3RDb25mIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBQQl9DT05GSUcsIFBCX1RFTVBMQVRFU19URU1QT1JBUllfU1RPUkFHRSB9IGZyb20gJy4vdG9rZW5zL3Rva2Vucyc7XHJcbmltcG9ydCB7IFN0cnVjdHVyZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zdHJ1Y3R1cmUvc3RydWN0dXJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBiRW1haWxCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9wYi1lbWFpbC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvZHluYW1pYy1jb21wb25lbnQuZGlyZWN0aXZlJztcclxuXHJcbmltcG9ydCB7IEltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9lbGVtZW50cy9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZXh0RWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvdGV4dC1lbGVtZW50L3RleHQtZWxlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2VsZW1lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvZGl2aWRlci9kaXZpZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNwYWNlckNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvc3BhY2VyL3NwYWNlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTb2NpYWxDb21wb25lbnQgfSBmcm9tICcuL2VsZW1lbnRzL3NvY2lhbC9zb2NpYWwuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEJ1aWxkZXJDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYnVpbGRlci1jb250YWluZXIvYnVpbGRlci1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9udFN0eWxlc0NvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL2ZvbnQtc3R5bGVzJztcclxuaW1wb3J0IHsgUGFkZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL3BhZGRpbmcnO1xyXG5pbXBvcnQgeyBMaW5lSGVpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvbGluZS1oZWlnaHQnO1xyXG5pbXBvcnQgeyBXaWR0aEhlaWdodENvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL3dpZHRoLWhlaWdodCc7XHJcbmltcG9ydCB7IEJvcmRlckNvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL2JvcmRlcic7XHJcbmltcG9ydCB7IENvbG9yQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvY29sb3InO1xyXG5pbXBvcnQgeyBMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvbGluayc7XHJcbmltcG9ydCB7IEFsaWduQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cHMvYWxpZ24nO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy9kaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBCYWNrUmVwYXRDb21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy9iYWNrLXJlcGVhdCc7XHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZXZpZXdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmV2aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBiRW1haWxCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vcGItZW1haWwtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmxvY2tDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYmxvY2svYmxvY2suY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW1hZ2VVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy91cGxvYWQtaW1hZ2UnO1xyXG5pbXBvcnQgeyBCbG9ja1NldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Jsb2NrLXNldHRpbmdzL2Jsb2NrLXNldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0cnVjdHVyZVNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3N0cnVjdHVyZS1zZXR0aW5ncy9zdHJ1Y3R1cmUtc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR2VuZXJhbFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyYWwtc2V0dGluZ3MvZ2VuZXJhbC1zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXJnaW5Db21wb25lbnQgfSBmcm9tICcuL2dyb3Vwcy9tYXJnaW4nO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZUxpc3REaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGVtcGxhdGUtbGlzdC1kaWFsb2cvdGVtcGxhdGUtbGlzdC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR2Fwc0NvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXBzL2dhcHMnO1xyXG5cclxuaW1wb3J0IHsgU2x1Z2lmeVBpcGUgfSBmcm9tICcuL3BpcGVzL3NsdWdpZnkucGlwZSc7XHJcblxyXG5pbXBvcnQgeyBGcmVlVXNlcnNNaWRkbGV3YXJlLCBQYWlkVXNlcnNNaWRkbGV3YXJlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZSc7XHJcbmltcG9ydCB7IEZyZWVVc2Vyc0ltYWdlVXBsb2FkZXIsIFBhaWRVc2Vyc0ltYWdlVXBsb2FkZXIgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlci1pbWFnZS11cGxvYWRlci1zZXJ2aWNlL3VzZXItaW1hZ2UtdXBsb2FkZXIuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBJcEludGVyY2VwdG9ySW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyY2VwdG9ycy9wYi1pbnRlcmNlcHRvci5pbnRlcmNlcHRvcic7XHJcbmltcG9ydCB7IEltcG9ydERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbXBvcnQtZGlhbG9nL2ltcG9ydC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgTElCUkFSWV9JU19QUk8gfSBmcm9tICcuL3Rva2Vucy9wcml2YXRlLXRva2Vucyc7XHJcbmltcG9ydCB7IFBiVXNlckludGVyZmFjZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ludGVybmFscy91c2VyLWludGVyZmFjZXMvdXNlci1pbnRlcmZhY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ludGVybmFscy9wYi1lbWFpbC1vYmplY3Qtc3RvcmUvcGItZW1haWwtb2JqZWN0LXN0b3JlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVlVXNlcnNSZXN0QXBpIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLXJlc3QtYXBpLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVlVXNlcnNQYlN0b3JhZ2UgfSBmcm9tICcuL3NlcnZpY2VzL3BiLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBQYlN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wYi1zdG9yYWdlL3BiLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFBiVXNlclJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgJ0Bhbmd1bGFyL2xvY2FsaXplL2luaXQnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBAcGFyYW0gaHR0cFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVJlc3RBcGlTZXJ2aWNlKGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICByZXR1cm4gbmV3IEZyZWVVc2Vyc1Jlc3RBcGkoaHR0cCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICogQHBhcmFtIGxpYnJhcnlJc1Byb0VudlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVzZXJNaWRkbGV3YXJlU2VydmljZShsaWJyYXJ5SXNQcm9FbnY6IGJvb2xlYW4pIHtcclxuICBpZiAoIWxpYnJhcnlJc1Byb0Vudikge1xyXG4gICAgcmV0dXJuIG5ldyBGcmVlVXNlcnNNaWRkbGV3YXJlKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuZXcgUGFpZFVzZXJzTWlkZGxld2FyZSgpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBAcGFyYW0gdGVtcGxhdGVTdG9yYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlcnNJcFN0b3JhZ2UodGVtcGxhdGVTdG9yYWdlOiBTdG9yYWdlKSB7XHJcbiAgcmV0dXJuIG5ldyBGcmVlVXNlcnNQYlN0b3JhZ2UodGVtcGxhdGVTdG9yYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBAcGFyYW0gbGlicmFyeUlzUHJvRW52XHJcbiAqIEBwYXJhbSBtYXRCb3R0b21TaGVldFxyXG4gKiBAcGFyYW0gbWF0RGlhbG9nXHJcbiAqIEBwYXJhbSB1c2VyTWlkZGxld2FyZVxyXG4gKiBAcGFyYW0gdXNlclJlc3RBcGlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyVXBsb2FkZXJTZXJ2aWNlKFxyXG4gIGxpYnJhcnlJc1Byb0VudjogYm9vbGVhbixcclxuICBtYXRCb3R0b21TaGVldDogTWF0Qm90dG9tU2hlZXQsXHJcbiAgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgdXNlck1pZGRsZXdhcmU6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcclxuICB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2VcclxuKSB7XHJcbiAgaWYgKCFsaWJyYXJ5SXNQcm9FbnYpIHtcclxuICAgIHJldHVybiBuZXcgRnJlZVVzZXJzSW1hZ2VVcGxvYWRlcihtYXRCb3R0b21TaGVldCwgdXNlck1pZGRsZXdhcmUpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbmV3IFBhaWRVc2Vyc0ltYWdlVXBsb2FkZXIobWF0RGlhbG9nLCB1c2VyTWlkZGxld2FyZSwgdXNlclJlc3RBcGkpO1xyXG4gIH1cclxufVxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgUXVpbGxNb2R1bGUsXHJcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvbG9yQ2hyb21lTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG5cclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdFRhYnNNb2R1bGUsXHJcbiAgICBNYXRTbGlkZXJNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcclxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0U25hY2tCYXJNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRTaWRlbmF2TW9kdWxlLFxyXG4gICAgTWF0VG9vbGJhck1vZHVsZSxcclxuICAgIE1hdExpc3RNb2R1bGUsXHJcbiAgICBNYXRCb3R0b21TaGVldE1vZHVsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBSZXNpemFibGVNb2R1bGUsXHJcbiAgICBTY3JvbGxpbmdNb2R1bGUsXHJcbiAgICBQb3J0YWxNb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUGJFbWFpbEJ1aWxkZXJDb21wb25lbnQsXHJcbiAgICBTdHJ1Y3R1cmVDb21wb25lbnQsXHJcbiAgICBCbG9ja0NvbXBvbmVudCxcclxuICAgIER5bmFtaWNDb21wb25lbnREaXJlY3RpdmUsXHJcbiAgICBQcmV2aWV3VGVtcGxhdGVDb21wb25lbnQsXHJcblxyXG4gICAgVGV4dEVsZW1lbnRDb21wb25lbnQsXHJcbiAgICBJbWFnZUNvbXBvbmVudCxcclxuICAgIEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIERpdmlkZXJDb21wb25lbnQsXHJcbiAgICBTcGFjZXJDb21wb25lbnQsXHJcbiAgICBTb2NpYWxDb21wb25lbnQsXHJcblxyXG4gICAgQnVpbGRlckNvbnRhaW5lckNvbXBvbmVudCxcclxuICAgIEZvbnRTdHlsZXNDb21wb25lbnQsXHJcbiAgICBQYWRkaW5nQ29tcG9uZW50LFxyXG4gICAgTWFyZ2luQ29tcG9uZW50LFxyXG4gICAgR2Fwc0NvbXBvbmVudCxcclxuICAgIExpbmVIZWlnaHRDb21wb25lbnQsXHJcbiAgICBXaWR0aEhlaWdodENvbXBvbmVudCxcclxuICAgIEJvcmRlckNvbXBvbmVudCxcclxuICAgIENvbG9yQ29tcG9uZW50LFxyXG4gICAgTGlua0NvbXBvbmVudCxcclxuICAgIEFsaWduQ29tcG9uZW50LFxyXG4gICAgRGlyZWN0aW9uQ29tcG9uZW50LFxyXG4gICAgQmFja1JlcGF0Q29tcG9uZW50LFxyXG4gICAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcclxuICAgIEltYWdlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgQmxvY2tTZXR0aW5nc0NvbXBvbmVudCxcclxuICAgIFN0cnVjdHVyZVNldHRpbmdzQ29tcG9uZW50LFxyXG4gICAgR2VuZXJhbFNldHRpbmdzQ29tcG9uZW50LFxyXG4gICAgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQsXHJcbiAgICBVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQsXHJcbiAgICBUZW1wbGF0ZUxpc3REaWFsb2dDb21wb25lbnQsXHJcbiAgICBTbHVnaWZ5UGlwZSxcclxuICAgIEltcG9ydERpYWxvZ0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1BiRW1haWxCdWlsZGVyQ29tcG9uZW50LCBQcmV2aWV3VGVtcGxhdGVDb21wb25lbnQsIFNsdWdpZnlQaXBlXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIFRleHRFbGVtZW50Q29tcG9uZW50LFxyXG4gICAgSW1hZ2VDb21wb25lbnQsXHJcbiAgICBCdXR0b25Db21wb25lbnQsXHJcbiAgICBEaXZpZGVyQ29tcG9uZW50LFxyXG4gICAgU3BhY2VyQ29tcG9uZW50LFxyXG4gICAgU29jaWFsQ29tcG9uZW50LFxyXG4gICAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcclxuICAgIFVwbG9hZEJvdHRvbVNoZWV0RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgVXBsb2FkSW1hZ2VHYWxsZXJ5Q29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVMaXN0RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgSW1wb3J0RGlhbG9nQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogUVVJTExfQ09ORklHX1RPS0VOLFxyXG4gICAgICB1c2VWYWx1ZToge1xyXG4gICAgICAgIGJvdW5kczogJ3BiLWJ1aWxkZXItY29udGFpbmVyJyxcclxuICAgICAgICB0aGVtZTogJ2J1YmJsZScsXHJcbiAgICAgICAgZm9ybWF0OiAnaHRtbCcsXHJcbiAgICAgICAgdHJhY2tDaGFuZ2VzOiAnYWxsJyxcclxuICAgICAgICBzdXBwcmVzc0dsb2JhbFJlZ2lzdGVyV2FybmluZzogdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IElwSW50ZXJjZXB0b3JJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUgfSxcclxuICAgIC8vIHsgcHJvdmlkZTogUEJfQkxPQ0tfRUxFTUVOVCwgdXNlQ2xhc3M6IFRleHRCbG9jaywgbXVsdGk6IHRydWUgfSxcclxuICAgIFBiRW1haWxCdWlsZGVyU2VydmljZSxcclxuICAgIFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UsXHJcbiAgICBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGJFbWFpbEJ1aWxkZXJNb2R1bGUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcGJNaWRkbGV3YXJlc1NlcnZpY2U6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcclxuICAgIHVzZXJJbWFnZVVwbG9hZGVyOiBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSxcclxuICAgIEBJbmplY3QoTElCUkFSWV9JU19QUk8pIGxpYnJhcnlJc1BybzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgaWYgKCFsaWJyYXJ5SXNQcm8gJiYgIShwYk1pZGRsZXdhcmVzU2VydmljZSBpbnN0YW5jZW9mIEZyZWVVc2Vyc01pZGRsZXdhcmUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVXBncmFkZSB0byBhbiBFeHRlbmRlZCBvciBDb21tZXJjaWFsIExpY2Vuc2UgdG8gdXNlIEN1c3RvbSBNaWRkbGV3YXJlcy4nKTtcclxuICAgIH1cclxuICAgIGlmICghbGlicmFyeUlzUHJvICYmICEodXNlckltYWdlVXBsb2FkZXIgaW5zdGFuY2VvZiBGcmVlVXNlcnNJbWFnZVVwbG9hZGVyKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwZ3JhZGUgdG8gYW4gRXh0ZW5kZWQgb3IgQ29tbWVyY2lhbCBMaWNlbnNlIHRvIHVzZSBDdXN0b20gSW1hZ2UgVXBsb2FkZXIuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB1c2UgUGJFbWFpbEJ1aWxkZXJNb2R1bGUud2l0aENvbmZpZyh1c2VyQ29uZmlnKSBpbnN0ZWFkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgc3RhdGljIGZvclJvb3QodXNlckNvbmZpZzogSUZvclJvb3RDb25mID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBiRW1haWxCdWlsZGVyTW9kdWxlPiB7XHJcbiAgICByZXR1cm4gUGJFbWFpbEJ1aWxkZXJNb2R1bGUud2l0aENvbmZpZyh1c2VyQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydCBtb2R1bGUgd2l0aCBjb25maWd1cmF0aW9uc1xyXG4gICAqIEBwYXJhbSB1c2VyQ29uZmlnIENvbmZpZ3VyYXRpb25zXHJcbiAgICovXHJcbiAgc3RhdGljIHdpdGhDb25maWcodXNlckNvbmZpZzogSUZvclJvb3RDb25mID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBiRW1haWxCdWlsZGVyTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogUGJFbWFpbEJ1aWxkZXJNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIFBiRW1haWxCdWlsZGVyU2VydmljZSxcclxuICAgICAgICBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlLFxyXG4gICAgICAgIFBiVXNlckludGVyZmFjZVNlcnZpY2UsXHJcbiAgICAgICAgeyBwcm92aWRlOiBQQl9DT05GSUcsIHVzZVZhbHVlOiB1c2VyQ29uZmlnIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvdmlkZTogUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogY3JlYXRlVXNlck1pZGRsZXdhcmVTZXJ2aWNlLFxyXG4gICAgICAgICAgZGVwczogW0xJQlJBUllfSVNfUFJPXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvdmlkZTogUGJTdG9yYWdlU2VydmljZSxcclxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNyZWF0ZVVzZXJzSXBTdG9yYWdlLFxyXG4gICAgICAgICAgZGVwczogW1BCX1RFTVBMQVRFU19URU1QT1JBUllfU1RPUkFHRV1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IFBiVXNlckltYWdlVXBsb2FkZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogY3JlYXRlVXNlclVwbG9hZGVyU2VydmljZSxcclxuICAgICAgICAgIGRlcHM6IFtMSUJSQVJZX0lTX1BSTywgTWF0Qm90dG9tU2hlZXQsIE1hdERpYWxvZywgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlLCBQYlVzZXJSZXN0QXBpU2VydmljZV1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IFBiVXNlclJlc3RBcGlTZXJ2aWNlLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogY3JlYXRlQ3VzdG9tUmVzdEFwaVNlcnZpY2UsXHJcbiAgICAgICAgICBkZXBzOiBbSHR0cENsaWVudF1cclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==