@genesislcap/foundation-layout 14.394.0 → 14.396.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 (32) hide show
  1. package/POPOUT_TODO.md +46 -0
  2. package/dist/custom-elements.json +351 -24
  3. package/dist/dts/index.d.ts +1 -1
  4. package/dist/dts/index.d.ts.map +1 -1
  5. package/dist/dts/main/layout-main.d.ts +9 -4
  6. package/dist/dts/main/layout-main.d.ts.map +1 -1
  7. package/dist/dts/main/layout-popout-controller.d.ts +49 -0
  8. package/dist/dts/main/layout-popout-controller.d.ts.map +1 -0
  9. package/dist/dts/utils/constants.d.ts +7 -1
  10. package/dist/dts/utils/constants.d.ts.map +1 -1
  11. package/dist/dts/utils/index.d.ts +1 -0
  12. package/dist/dts/utils/index.d.ts.map +1 -1
  13. package/dist/dts/utils/popout-events.d.ts +43 -0
  14. package/dist/dts/utils/popout-events.d.ts.map +1 -0
  15. package/dist/dts/utils/types.d.ts +39 -0
  16. package/dist/dts/utils/types.d.ts.map +1 -1
  17. package/dist/esm/index.js +1 -1
  18. package/dist/esm/main/layout-main.js +48 -21
  19. package/dist/esm/main/layout-popout-controller.js +289 -0
  20. package/dist/esm/utils/constants.js +7 -1
  21. package/dist/esm/utils/index.js +1 -0
  22. package/dist/esm/utils/popout-events.js +5 -0
  23. package/dist/foundation-layout.api.json +72 -5
  24. package/dist/foundation-layout.d.ts +103 -3
  25. package/docs/api/foundation-layout.foundationlayout.md +2 -2
  26. package/docs/api/foundation-layout.foundationlayout.popoutconfig.md +2 -2
  27. package/docs/api/foundation-layout.layout_popout_control_key.md +16 -0
  28. package/docs/api/foundation-layout.layoutpopoutconfig.md +22 -0
  29. package/docs/api/foundation-layout.md +22 -0
  30. package/docs/api/foundation-layout.serialisedlayout.md +3 -0
  31. package/docs/api-report.md.api.md +28 -1
  32. package/package.json +15 -13
@@ -845,15 +845,20 @@
845
845
  {
846
846
  "kind": "Property",
847
847
  "canonicalReference": "@genesislcap/foundation-layout!FoundationLayout#popoutConfig:member",
848
- "docComment": "/**\n * Controls whether popout functionality is enabled on the layout. Defaults to disabled. Set this attribute to any string to enable popout functionality. If this string is of format `number;number` then this will be interpreted as the width and height of the popout window.\n *\n * @beta\n */\n",
848
+ "docComment": "/**\n * Controls whether popout functionality is enabled on the layout. Defaults to disabled. Pass an empty object `{}` to use default configurations, or a {@link LayoutPopoutConfig} object to further customise.\n *\n * @beta\n */\n",
849
849
  "excerptTokens": [
850
850
  {
851
851
  "kind": "Content",
852
852
  "text": "popoutConfig: "
853
853
  },
854
+ {
855
+ "kind": "Reference",
856
+ "text": "LayoutPopoutConfig",
857
+ "canonicalReference": "@genesislcap/foundation-layout!LayoutPopoutConfig:type"
858
+ },
854
859
  {
855
860
  "kind": "Content",
856
- "text": "string | undefined"
861
+ "text": " | undefined"
857
862
  },
858
863
  {
859
864
  "kind": "Content",
@@ -866,7 +871,7 @@
866
871
  "name": "popoutConfig",
867
872
  "propertyTypeTokenRange": {
868
873
  "startIndex": 1,
869
- "endIndex": 2
874
+ "endIndex": 3
870
875
  },
871
876
  "isStatic": false,
872
877
  "isProtected": false,
@@ -1721,6 +1726,33 @@
1721
1726
  "endIndex": 0
1722
1727
  }
1723
1728
  },
1729
+ {
1730
+ "kind": "Variable",
1731
+ "canonicalReference": "@genesislcap/foundation-layout!LAYOUT_POPOUT_CONTROL_KEY:var",
1732
+ "docComment": "/**\n * Key to be used for controlling popout behaviour\n *\n * @beta\n */\n",
1733
+ "excerptTokens": [
1734
+ {
1735
+ "kind": "Content",
1736
+ "text": "LAYOUT_POPOUT_CONTROL_KEY = "
1737
+ },
1738
+ {
1739
+ "kind": "Content",
1740
+ "text": "\"f-layout-key\""
1741
+ }
1742
+ ],
1743
+ "fileUrlPath": "src/utils/constants.ts",
1744
+ "initializerTokenRange": {
1745
+ "startIndex": 1,
1746
+ "endIndex": 2
1747
+ },
1748
+ "isReadonly": true,
1749
+ "releaseTag": "Beta",
1750
+ "name": "LAYOUT_POPOUT_CONTROL_KEY",
1751
+ "variableTypeTokenRange": {
1752
+ "startIndex": 0,
1753
+ "endIndex": 0
1754
+ }
1755
+ },
1724
1756
  {
1725
1757
  "kind": "Interface",
1726
1758
  "canonicalReference": "@genesislcap/foundation-layout!LayoutComponentWithState:interface",
@@ -1848,6 +1880,32 @@
1848
1880
  "endIndex": 2
1849
1881
  }
1850
1882
  },
1883
+ {
1884
+ "kind": "TypeAlias",
1885
+ "canonicalReference": "@genesislcap/foundation-layout!LayoutPopoutConfig:type",
1886
+ "docComment": "/**\n * @beta\n */\n",
1887
+ "excerptTokens": [
1888
+ {
1889
+ "kind": "Content",
1890
+ "text": "export type LayoutPopoutConfig = "
1891
+ },
1892
+ {
1893
+ "kind": "Content",
1894
+ "text": "{\n channelName?: string;\n loadAutomatically?: boolean;\n popoutDimension?: {\n width: number;\n height: number;\n };\n}"
1895
+ },
1896
+ {
1897
+ "kind": "Content",
1898
+ "text": ";"
1899
+ }
1900
+ ],
1901
+ "fileUrlPath": "src/utils/types.ts",
1902
+ "releaseTag": "Beta",
1903
+ "name": "LayoutPopoutConfig",
1904
+ "typeTokenRange": {
1905
+ "startIndex": 1,
1906
+ "endIndex": 2
1907
+ }
1908
+ },
1851
1909
  {
1852
1910
  "kind": "Variable",
1853
1911
  "canonicalReference": "@genesislcap/foundation-layout!LayoutReceiveEvents:var",
@@ -2399,7 +2457,16 @@
2399
2457
  },
2400
2458
  {
2401
2459
  "kind": "Content",
2402
- "text": ";\n}"
2460
+ "text": ";\n popouts?: {\n [layoutKey: string]: "
2461
+ },
2462
+ {
2463
+ "kind": "Reference",
2464
+ "text": "PopoutState",
2465
+ "canonicalReference": "@genesislcap/foundation-layout!~PopoutState:type"
2466
+ },
2467
+ {
2468
+ "kind": "Content",
2469
+ "text": ";\n };\n}"
2403
2470
  },
2404
2471
  {
2405
2472
  "kind": "Content",
@@ -2411,7 +2478,7 @@
2411
2478
  "name": "SerialisedLayout",
2412
2479
  "typeTokenRange": {
2413
2480
  "startIndex": 1,
2414
- "endIndex": 4
2481
+ "endIndex": 6
2415
2482
  }
2416
2483
  },
2417
2484
  {
@@ -1,5 +1,6 @@
1
1
  import type { Container } from '@microsoft/fast-foundation';
2
2
  import { ElementStyles } from '@microsoft/fast-element';
3
+ import { FASTElement } from '@microsoft/fast-element';
3
4
  import { FoundationElement } from '@microsoft/fast-foundation';
4
5
  import { FoundationElementRegistry } from '@microsoft/fast-foundation';
5
6
  import { LayoutConfig } from '@genesis-community/golden-layout';
@@ -170,13 +171,16 @@ export declare class FoundationLayout extends FoundationElement implements Layou
170
171
  * has changed and know you potentially need to gate some of your lifecycle functionality.
171
172
  */
172
173
  lifecycleUpdateToken: string | undefined;
174
+ /** @internal */
175
+ popupMode: boolean;
176
+ /** @internal */
177
+ popoutController: FoundationLayoutPopoutController;
173
178
  /**
174
179
  * Controls whether popout functionality is enabled on the layout. Defaults to disabled.
175
- * Set this attribute to any string to enable popout functionality. If this string is of format `number;number` then this will be interpreted as the width and height of the popout window.
180
+ * Pass an empty object `{}` to use default configurations, or a {@link LayoutPopoutConfig} object to further customise.
176
181
  * @beta
177
182
  */
178
- popoutConfig: string | undefined;
179
- private popupMode;
183
+ popoutConfig: LayoutPopoutConfig | undefined;
180
184
  /** @internal */
181
185
  constructor();
182
186
  /** @internal */
@@ -247,6 +251,7 @@ export declare class FoundationLayout extends FoundationElement implements Layou
247
251
  * If you set the `LAYOUT_POPOUT_CONTAINER_CLASS` on an element which is a DOM parent of the layout,
248
252
  * then if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
249
253
  * It is likely you'll want to attach this class to your design system provider.
254
+ *
250
255
  * @beta
251
256
  */
252
257
  tryActivatePopoutMode(): boolean;
@@ -583,6 +588,53 @@ export declare class FoundationLayout extends FoundationElement implements Layou
583
588
  cacheElementsAndRegister(config: RegistrationConfig): string;
584
589
  }
585
590
 
591
+ declare class FoundationLayoutPopoutController extends FASTElement {
592
+ channelName: string;
593
+ /**
594
+ * Reference to the parent layout to retrieve component state
595
+ * @internal
596
+ */
597
+ parentLayout: LayoutComponent & {
598
+ getLayoutComponents(): any[][];
599
+ };
600
+ private layoutKey;
601
+ private channel;
602
+ private pollInterval;
603
+ private unloadHandler;
604
+ private lastUpdate;
605
+ private popoutRegistry;
606
+ connectedCallback(): void;
607
+ disconnectedCallback(): void;
608
+ private setupChannel;
609
+ private setupListener;
610
+ private applyStateToParent;
611
+ private setupUnloadListener;
612
+ private teardownUnloadListener;
613
+ private emitAutosave;
614
+ private startPolling;
615
+ private stopPolling;
616
+ private getGeometry;
617
+ private getComponentState;
618
+ private broadcastUpdate;
619
+ /**
620
+ * Opens a component in a popout window.
621
+ * @param registration - The registration ID of the component to pop out.
622
+ * @param popoutState - Optional state (geometry and component state) to use for the new window.
623
+ * @param uuid - UUID generator from parent layout
624
+ */
625
+ openPopout(registration: string, popoutState?: PopoutState, uuid?: any): Promise<Window>;
626
+ getRegistry(): {
627
+ [layoutKey: string]: PopoutState;
628
+ };
629
+ /**
630
+ * Restores popouts from a registry
631
+ */
632
+ restorePopouts(registry: {
633
+ [layoutKey: string]: PopoutState;
634
+ }, uuid: any): Promise<void>;
635
+ closeAllPopouts(): void;
636
+ }
637
+
586
638
  /**
587
639
  * @public
588
640
  * `FoundationLayoutRegion` is a custom element that represents a region in the layout.
@@ -674,6 +726,12 @@ export declare class FoundationLayout extends FoundationElement implements Layou
674
726
  */
675
727
  export declare const LAYOUT_POPOUT_CONTAINER_CLASS = "f-layout-popout";
676
728
 
729
+ /**
730
+ * Key to be used for controlling popout behaviour
731
+ * @beta
732
+ */
733
+ export declare const LAYOUT_POPOUT_CONTROL_KEY = "f-layout-key";
734
+
677
735
  /** @internal */
678
736
  declare interface LayoutComponent {
679
737
  [componentType]: ComponentTypes;
@@ -765,6 +823,20 @@ export declare class FoundationLayout extends FoundationElement implements Layou
765
823
  readonly itemResized: "item-resized";
766
824
  };
767
825
 
826
+ /** @beta */
827
+ export declare type LayoutPopoutConfig = {
828
+ /**
829
+ * The name of the broadcast channel to use for communication between the main window and popout windows.
830
+ * Defaults to 'f-layout-popout-channel'.
831
+ */
832
+ channelName?: string;
833
+ loadAutomatically?: boolean;
834
+ popoutDimension?: {
835
+ width: number;
836
+ height: number;
837
+ };
838
+ };
839
+
768
840
  /**
769
841
  * Defines events that the layout system listens for
770
842
  *
@@ -850,6 +922,27 @@ export declare class FoundationLayout extends FoundationElement implements Layou
850
922
  };
851
923
  };
852
924
 
925
+ /**
926
+ * Geometry details for a popout window
927
+ * @public
928
+ */
929
+ declare type PopoutGeometry = {
930
+ screenX: number;
931
+ screenY: number;
932
+ outerWidth: number;
933
+ outerHeight: number;
934
+ screenId?: string;
935
+ };
936
+
937
+ /**
938
+ * @beta
939
+ * State of a popped out window
940
+ */
941
+ declare type PopoutState = {
942
+ geometry: PopoutGeometry;
943
+ state?: unknown;
944
+ };
945
+
853
946
  /**
854
947
  * @public
855
948
  * The parameters that can be set on a new item when being added by the {@link FoundationLayout.addItem} API
@@ -923,6 +1016,13 @@ export declare class FoundationLayout extends FoundationElement implements Layou
923
1016
  export declare type SerialisedLayout = {
924
1017
  v: '1';
925
1018
  c: ResolvedLayoutConfig;
1019
+ /**
1020
+ * Optional registry of popped out components and their window geometry.
1021
+ * @beta
1022
+ */
1023
+ popouts?: {
1024
+ [layoutKey: string]: PopoutState;
1025
+ };
926
1026
  };
927
1027
 
928
1028
  /**
@@ -206,12 +206,12 @@ Function which is used to generate the placeholder text when a layout is loaded
206
206
 
207
207
  </td><td>
208
208
 
209
- string \| undefined
209
+ [LayoutPopoutConfig](./foundation-layout.layoutpopoutconfig.md) \| undefined
210
210
 
211
211
 
212
212
  </td><td>
213
213
 
214
- **_(BETA)_** Controls whether popout functionality is enabled on the layout. Defaults to disabled. Set this attribute to any string to enable popout functionality. If this string is of format `number;number` then this will be interpreted as the width and height of the popout window.
214
+ **_(BETA)_** Controls whether popout functionality is enabled on the layout. Defaults to disabled. Pass an empty object `{}` to use default configurations, or a [LayoutPopoutConfig](./foundation-layout.layoutpopoutconfig.md) object to further customise.
215
215
 
216
216
 
217
217
  </td></tr>
@@ -7,10 +7,10 @@
7
7
  > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
8
  >
9
9
 
10
- Controls whether popout functionality is enabled on the layout. Defaults to disabled. Set this attribute to any string to enable popout functionality. If this string is of format `number;number` then this will be interpreted as the width and height of the popout window.
10
+ Controls whether popout functionality is enabled on the layout. Defaults to disabled. Pass an empty object `{}` to use default configurations, or a [LayoutPopoutConfig](./foundation-layout.layoutpopoutconfig.md) object to further customise.
11
11
 
12
12
  **Signature:**
13
13
 
14
14
  ```typescript
15
- popoutConfig: string | undefined;
15
+ popoutConfig: LayoutPopoutConfig | undefined;
16
16
  ```
@@ -0,0 +1,16 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-layout](./foundation-layout.md) &gt; [LAYOUT\_POPOUT\_CONTROL\_KEY](./foundation-layout.layout_popout_control_key.md)
4
+
5
+ ## LAYOUT\_POPOUT\_CONTROL\_KEY variable
6
+
7
+ > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
+ >
9
+
10
+ Key to be used for controlling popout behaviour
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ LAYOUT_POPOUT_CONTROL_KEY = "f-layout-key"
16
+ ```
@@ -0,0 +1,22 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-layout](./foundation-layout.md) &gt; [LayoutPopoutConfig](./foundation-layout.layoutpopoutconfig.md)
4
+
5
+ ## LayoutPopoutConfig type
6
+
7
+ > This API is provided as a beta preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
8
+ >
9
+
10
+
11
+ **Signature:**
12
+
13
+ ```typescript
14
+ export type LayoutPopoutConfig = {
15
+ channelName?: string;
16
+ loadAutomatically?: boolean;
17
+ popoutDimension?: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ };
22
+ ```
@@ -215,6 +215,17 @@ A collection of SVG icons in base64 format.
215
215
  **_(BETA)_** Put this classname on an element which is a DOM parent of the layout, and if the layout goes into popout mode then it will place itself as the only child for the popout container you set.
216
216
 
217
217
 
218
+ </td></tr>
219
+ <tr><td>
220
+
221
+ [LAYOUT\_POPOUT\_CONTROL\_KEY](./foundation-layout.layout_popout_control_key.md)
222
+
223
+
224
+ </td><td>
225
+
226
+ **_(BETA)_** Key to be used for controlling popout behaviour
227
+
228
+
218
229
  </td></tr>
219
230
  <tr><td>
220
231
 
@@ -300,6 +311,17 @@ Factory function for creating component instances in the layout.
300
311
  Definition of a custom button which will be added to all layout items.
301
312
 
302
313
 
314
+ </td></tr>
315
+ <tr><td>
316
+
317
+ [LayoutPopoutConfig](./foundation-layout.layoutpopoutconfig.md)
318
+
319
+
320
+ </td><td>
321
+
322
+ **_(BETA)_**
323
+
324
+
303
325
  </td></tr>
304
326
  <tr><td>
305
327
 
@@ -12,6 +12,9 @@ Versioned layout config objects. `v` is the version and `c` contains the layout
12
12
  export type SerialisedLayout = {
13
13
  v: '1';
14
14
  c: ResolvedLayoutConfig;
15
+ popouts?: {
16
+ [layoutKey: string]: PopoutState;
17
+ };
15
18
  };
16
19
  ```
17
20
 
@@ -6,6 +6,7 @@
6
6
 
7
7
  import type { Container } from '@microsoft/fast-foundation';
8
8
  import { ElementStyles } from '@microsoft/fast-element';
9
+ import { FASTElement } from '@microsoft/fast-element';
9
10
  import { FoundationElement } from '@microsoft/fast-foundation';
10
11
  import { FoundationElementRegistry } from '@microsoft/fast-foundation';
11
12
  import { LayoutConfig } from '@genesis-community/golden-layout';
@@ -60,7 +61,13 @@ export class FoundationLayout extends FoundationElement implements LayoutCompone
60
61
  loadLayout(layout: SerialisedLayout, handleMissingItem?: 'placeholder' | 'error', disableCache?: boolean): void;
61
62
  missingItemPlaceholder: (missingItem: string) => string;
62
63
  // @beta
63
- popoutConfig: string | undefined;
64
+ popoutConfig: LayoutPopoutConfig | undefined;
65
+ // Warning: (ae-forgotten-export) The symbol "FoundationLayoutPopoutController" needs to be exported by the entry point index.d.ts
66
+ //
67
+ // @internal (undocumented)
68
+ popoutController: FoundationLayoutPopoutController;
69
+ // @internal (undocumented)
70
+ popupMode: boolean;
64
71
  registeredItems(): string[];
65
72
  registerItem(registration: string, elementsOrFactory: Element[] | ComponentFactory): string;
66
73
  reloadBuffer: number;
@@ -150,6 +157,9 @@ export const LAYOUT_ICONS: {
150
157
  // @beta
151
158
  export const LAYOUT_POPOUT_CONTAINER_CLASS = "f-layout-popout";
152
159
 
160
+ // @beta
161
+ export const LAYOUT_POPOUT_CONTROL_KEY = "f-layout-key";
162
+
153
163
  // @public
154
164
  export interface LayoutComponentWithState<T> {
155
165
  applyState(state: T | null): void;
@@ -164,6 +174,16 @@ export const LayoutEmitEvents: {
164
174
  readonly itemResized: "item-resized";
165
175
  };
166
176
 
177
+ // @beta (undocumented)
178
+ export type LayoutPopoutConfig = {
179
+ channelName?: string;
180
+ loadAutomatically?: boolean;
181
+ popoutDimension?: {
182
+ width: number;
183
+ height: number;
184
+ };
185
+ };
186
+
167
187
  // @public
168
188
  export const LayoutReceiveEvents: {
169
189
  readonly changeTitle: "change-title";
@@ -241,11 +261,18 @@ export type RegistrationConfig = {
241
261
  export type SerialisedLayout = {
242
262
  v: '1';
243
263
  c: ResolvedLayoutConfig;
264
+ popouts?: {
265
+ [layoutKey: string]: PopoutState;
266
+ };
244
267
  };
245
268
 
246
269
  // @public
247
270
  export function unregisterFactory(key: string): boolean;
248
271
 
272
+ // Warnings were encountered during analysis:
273
+ //
274
+ // src/utils/types.ts:56:5 - (ae-forgotten-export) The symbol "PopoutState" needs to be exported by the entry point index.d.ts
275
+
249
276
  // (No @packageDocumentation comment for this package)
250
277
 
251
278
  ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-layout",
3
3
  "description": "Genesis Foundation UI App Layout",
4
- "version": "14.394.0",
4
+ "version": "14.396.0",
5
5
  "license": "SEE LICENSE IN license.txt",
6
6
  "main": "dist/esm/index.js",
7
7
  "types": "dist/foundation-layout.d.ts",
@@ -38,20 +38,22 @@
38
38
  }
39
39
  },
40
40
  "devDependencies": {
41
- "@genesislcap/foundation-testing": "14.394.0",
42
- "@genesislcap/genx": "14.394.0",
43
- "@genesislcap/rollup-builder": "14.394.0",
44
- "@genesislcap/ts-builder": "14.394.0",
45
- "@genesislcap/uvu-playwright-builder": "14.394.0",
46
- "@genesislcap/vite-builder": "14.394.0",
47
- "@genesislcap/webpack-builder": "14.394.0"
41
+ "@genesislcap/foundation-testing": "14.396.0",
42
+ "@genesislcap/genx": "14.396.0",
43
+ "@genesislcap/rollup-builder": "14.396.0",
44
+ "@genesislcap/ts-builder": "14.396.0",
45
+ "@genesislcap/uvu-playwright-builder": "14.396.0",
46
+ "@genesislcap/vite-builder": "14.396.0",
47
+ "@genesislcap/webpack-builder": "14.396.0"
48
48
  },
49
49
  "dependencies": {
50
50
  "@genesis-community/golden-layout": "^2.11.0",
51
- "@genesislcap/foundation-comms": "14.394.0",
52
- "@genesislcap/foundation-logger": "14.394.0",
53
- "@genesislcap/foundation-ui": "14.394.0",
54
- "@genesislcap/foundation-utils": "14.394.0",
51
+ "@genesislcap/foundation-broadcast-channel": "14.396.0",
52
+ "@genesislcap/foundation-comms": "14.396.0",
53
+ "@genesislcap/foundation-events": "14.396.0",
54
+ "@genesislcap/foundation-logger": "14.396.0",
55
+ "@genesislcap/foundation-ui": "14.396.0",
56
+ "@genesislcap/foundation-utils": "14.396.0",
55
57
  "@microsoft/fast-components": "2.30.6",
56
58
  "@microsoft/fast-element": "1.14.0",
57
59
  "@microsoft/fast-foundation": "2.50.0"
@@ -65,5 +67,5 @@
65
67
  "access": "public"
66
68
  },
67
69
  "customElements": "dist/custom-elements.json",
68
- "gitHead": "cad53566d55381e553fcb586a23e121d38b8cd59"
70
+ "gitHead": "43e0fd00aa30590bdcad05ddb3d8aca0d493d020"
69
71
  }