@taimos/projen 0.1.72 → 0.1.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -380,6 +380,44 @@
380
380
  }
381
381
  }
382
382
  },
383
+ {
384
+ "abstract": true,
385
+ "docs": {
386
+ "default": "- `pnpm install --frozen-lockfile --node-linker hoisted --filter \"<installFilter>\"`",
387
+ "remarks": "When set, `installFilter` is ignored and this string is emitted verbatim.\nUse this as an escape hatch when the default scoped install is insufficient.",
388
+ "stability": "stable",
389
+ "summary": "Full override of the install command in the preBuild phase."
390
+ },
391
+ "immutable": true,
392
+ "locationInModule": {
393
+ "filename": "src/projects/monorepo.ts",
394
+ "line": 97
395
+ },
396
+ "name": "installCommand",
397
+ "optional": true,
398
+ "type": {
399
+ "primitive": "string"
400
+ }
401
+ },
402
+ {
403
+ "abstract": true,
404
+ "docs": {
405
+ "default": "`${buildFilter}...`",
406
+ "remarks": "The trailing `...` syntax pulls in the app's transitive workspace\ndependencies (e.g. a shared API package) but excludes unrelated packages,\navoiding concurrent `projen/node_modules` rename races under the hoisted\nlinker.",
407
+ "stability": "stable",
408
+ "summary": "pnpm `--filter` expression for the scoped install in the preBuild phase."
409
+ },
410
+ "immutable": true,
411
+ "locationInModule": {
412
+ "filename": "src/projects/monorepo.ts",
413
+ "line": 87
414
+ },
415
+ "name": "installFilter",
416
+ "optional": true,
417
+ "type": {
418
+ "primitive": "string"
419
+ }
420
+ },
383
421
  {
384
422
  "abstract": true,
385
423
  "docs": {
@@ -450,7 +488,7 @@
450
488
  "kind": "interface",
451
489
  "locationInModule": {
452
490
  "filename": "src/projects/monorepo.ts",
453
- "line": 126
491
+ "line": 148
454
492
  },
455
493
  "name": "MonorepoApproverMapping",
456
494
  "properties": [
@@ -463,7 +501,7 @@
463
501
  "immutable": true,
464
502
  "locationInModule": {
465
503
  "filename": "src/projects/monorepo.ts",
466
- "line": 135
504
+ "line": 157
467
505
  },
468
506
  "name": "approvers",
469
507
  "type": {
@@ -484,7 +522,7 @@
484
522
  "immutable": true,
485
523
  "locationInModule": {
486
524
  "filename": "src/projects/monorepo.ts",
487
- "line": 130
525
+ "line": 152
488
526
  },
489
527
  "name": "author",
490
528
  "type": {
@@ -512,7 +550,7 @@
512
550
  },
513
551
  "locationInModule": {
514
552
  "filename": "src/projects/monorepo.ts",
515
- "line": 253
553
+ "line": 275
516
554
  },
517
555
  "parameters": [
518
556
  {
@@ -526,7 +564,7 @@
526
564
  "kind": "class",
527
565
  "locationInModule": {
528
566
  "filename": "src/projects/monorepo.ts",
529
- "line": 233
567
+ "line": 255
530
568
  },
531
569
  "name": "MonorepoProject",
532
570
  "properties": [
@@ -538,7 +576,7 @@
538
576
  "immutable": true,
539
577
  "locationInModule": {
540
578
  "filename": "src/projects/monorepo.ts",
541
- "line": 251
579
+ "line": 273
542
580
  },
543
581
  "name": "defaultReleaseBranch",
544
582
  "type": {
@@ -553,7 +591,7 @@
553
591
  "immutable": true,
554
592
  "locationInModule": {
555
593
  "filename": "src/projects/monorepo.ts",
556
- "line": 239
594
+ "line": 261
557
595
  },
558
596
  "name": "prBuildWorkflow",
559
597
  "type": {
@@ -568,7 +606,7 @@
568
606
  "immutable": true,
569
607
  "locationInModule": {
570
608
  "filename": "src/projects/monorepo.ts",
571
- "line": 236
609
+ "line": 258
572
610
  },
573
611
  "name": "workspaceFile",
574
612
  "type": {
@@ -583,7 +621,7 @@
583
621
  "immutable": true,
584
622
  "locationInModule": {
585
623
  "filename": "src/projects/monorepo.ts",
586
- "line": 242
624
+ "line": 264
587
625
  },
588
626
  "name": "amplifyFile",
589
627
  "optional": true,
@@ -599,7 +637,7 @@
599
637
  "immutable": true,
600
638
  "locationInModule": {
601
639
  "filename": "src/projects/monorepo.ts",
602
- "line": 245
640
+ "line": 267
603
641
  },
604
642
  "name": "assignApprover",
605
643
  "optional": true,
@@ -615,7 +653,7 @@
615
653
  "immutable": true,
616
654
  "locationInModule": {
617
655
  "filename": "src/projects/monorepo.ts",
618
- "line": 248
656
+ "line": 270
619
657
  },
620
658
  "name": "productionRelease",
621
659
  "optional": true,
@@ -639,7 +677,7 @@
639
677
  "kind": "interface",
640
678
  "locationInModule": {
641
679
  "filename": "src/projects/monorepo.ts",
642
- "line": 138
680
+ "line": 160
643
681
  },
644
682
  "name": "MonorepoProjectOptions",
645
683
  "properties": [
@@ -654,7 +692,7 @@
654
692
  "immutable": true,
655
693
  "locationInModule": {
656
694
  "filename": "src/projects/monorepo.ts",
657
- "line": 201
695
+ "line": 223
658
696
  },
659
697
  "name": "amplifyApps",
660
698
  "optional": true,
@@ -678,7 +716,7 @@
678
716
  "immutable": true,
679
717
  "locationInModule": {
680
718
  "filename": "src/projects/monorepo.ts",
681
- "line": 178
719
+ "line": 200
682
720
  },
683
721
  "name": "approverMapping",
684
722
  "optional": true,
@@ -701,7 +739,7 @@
701
739
  "immutable": true,
702
740
  "locationInModule": {
703
741
  "filename": "src/projects/monorepo.ts",
704
- "line": 170
742
+ "line": 192
705
743
  },
706
744
  "name": "assignApprover",
707
745
  "optional": true,
@@ -719,7 +757,7 @@
719
757
  "immutable": true,
720
758
  "locationInModule": {
721
759
  "filename": "src/projects/monorepo.ts",
722
- "line": 163
760
+ "line": 185
723
761
  },
724
762
  "name": "cdkServerless",
725
763
  "optional": true,
@@ -738,7 +776,7 @@
738
776
  "immutable": true,
739
777
  "locationInModule": {
740
778
  "filename": "src/projects/monorepo.ts",
741
- "line": 186
779
+ "line": 208
742
780
  },
743
781
  "name": "defaultApprovers",
744
782
  "optional": true,
@@ -761,7 +799,7 @@
761
799
  "immutable": true,
762
800
  "locationInModule": {
763
801
  "filename": "src/projects/monorepo.ts",
764
- "line": 151
802
+ "line": 173
765
803
  },
766
804
  "name": "nodeVersion",
767
805
  "optional": true,
@@ -779,7 +817,7 @@
779
817
  "immutable": true,
780
818
  "locationInModule": {
781
819
  "filename": "src/projects/monorepo.ts",
782
- "line": 144
820
+ "line": 166
783
821
  },
784
822
  "name": "pnpmWorkspaceVersion",
785
823
  "optional": true,
@@ -797,7 +835,7 @@
797
835
  "immutable": true,
798
836
  "locationInModule": {
799
837
  "filename": "src/projects/monorepo.ts",
800
- "line": 209
838
+ "line": 231
801
839
  },
802
840
  "name": "productionRelease",
803
841
  "optional": true,
@@ -816,7 +854,7 @@
816
854
  "immutable": true,
817
855
  "locationInModule": {
818
856
  "filename": "src/projects/monorepo.ts",
819
- "line": 217
857
+ "line": 239
820
858
  },
821
859
  "name": "productionReleaseOptions",
822
860
  "optional": true,
@@ -834,7 +872,7 @@
834
872
  "immutable": true,
835
873
  "locationInModule": {
836
874
  "filename": "src/projects/monorepo.ts",
837
- "line": 193
875
+ "line": 215
838
876
  },
839
877
  "name": "runTestsInBuild",
840
878
  "optional": true,
@@ -851,7 +889,7 @@
851
889
  "immutable": true,
852
890
  "locationInModule": {
853
891
  "filename": "src/projects/monorepo.ts",
854
- "line": 156
892
+ "line": 178
855
893
  },
856
894
  "name": "workspaceOptions",
857
895
  "optional": true,
@@ -873,7 +911,7 @@
873
911
  "kind": "interface",
874
912
  "locationInModule": {
875
913
  "filename": "src/projects/monorepo.ts",
876
- "line": 81
914
+ "line": 103
877
915
  },
878
916
  "name": "MonorepoWorkspaceOptions",
879
917
  "properties": [
@@ -888,7 +926,7 @@
888
926
  "immutable": true,
889
927
  "locationInModule": {
890
928
  "filename": "src/projects/monorepo.ts",
891
- "line": 104
929
+ "line": 126
892
930
  },
893
931
  "name": "allowedBuilds",
894
932
  "optional": true,
@@ -911,7 +949,7 @@
911
949
  "immutable": true,
912
950
  "locationInModule": {
913
951
  "filename": "src/projects/monorepo.ts",
914
- "line": 112
952
+ "line": 134
915
953
  },
916
954
  "name": "minimumReleaseAge",
917
955
  "optional": true,
@@ -929,7 +967,7 @@
929
967
  "immutable": true,
930
968
  "locationInModule": {
931
969
  "filename": "src/projects/monorepo.ts",
932
- "line": 120
970
+ "line": 142
933
971
  },
934
972
  "name": "minimumReleaseAgeExclude",
935
973
  "optional": true,
@@ -953,7 +991,7 @@
953
991
  "immutable": true,
954
992
  "locationInModule": {
955
993
  "filename": "src/projects/monorepo.ts",
956
- "line": 95
994
+ "line": 117
957
995
  },
958
996
  "name": "overrides",
959
997
  "optional": true,
@@ -976,7 +1014,7 @@
976
1014
  "immutable": true,
977
1015
  "locationInModule": {
978
1016
  "filename": "src/projects/monorepo.ts",
979
- "line": 87
1017
+ "line": 109
980
1018
  },
981
1019
  "name": "packages",
982
1020
  "optional": true,
@@ -1583,6 +1621,6 @@
1583
1621
  "symbolId": "src/projects/ts-lib:TaimosTypescriptLibraryOptions"
1584
1622
  }
1585
1623
  },
1586
- "version": "0.1.72",
1587
- "fingerprint": "MFbHMC6s0fgzBzWTMUE4Yhjn2MOLWntyCKe40QzOTSI="
1624
+ "version": "0.1.74",
1625
+ "fingerprint": "rQQVoohP7W5PUtZhyzVzIqo1Mu/9Zifb8cgUVikgpBc="
1588
1626
  }
package/API.md CHANGED
@@ -10248,6 +10248,8 @@ const monorepoAmplifyApp: MonorepoAmplifyApp = { ... }
10248
10248
  | <code><a href="#@taimos/projen.MonorepoAmplifyApp.property.artifactBaseDirectory">artifactBaseDirectory</a></code> | <code>string</code> | Override the artifact base directory. |
10249
10249
  | <code><a href="#@taimos/projen.MonorepoAmplifyApp.property.buildCommand">buildCommand</a></code> | <code>string</code> | Override the build command run in the Amplify `build` phase. |
10250
10250
  | <code><a href="#@taimos/projen.MonorepoAmplifyApp.property.cachePaths">cachePaths</a></code> | <code>string[]</code> | Override the Amplify build cache paths. |
10251
+ | <code><a href="#@taimos/projen.MonorepoAmplifyApp.property.installCommand">installCommand</a></code> | <code>string</code> | Full override of the install command in the preBuild phase. |
10252
+ | <code><a href="#@taimos/projen.MonorepoAmplifyApp.property.installFilter">installFilter</a></code> | <code>string</code> | pnpm `--filter` expression for the scoped install in the preBuild phase. |
10251
10253
  | <code><a href="#@taimos/projen.MonorepoAmplifyApp.property.preBuildFilters">preBuildFilters</a></code> | <code>string[]</code> | Workspace packages to build before the app, as `--filter` targets. |
10252
10254
 
10253
10255
  ---
@@ -10327,6 +10329,40 @@ Override the Amplify build cache paths.
10327
10329
 
10328
10330
  ---
10329
10331
 
10332
+ ##### `installCommand`<sup>Optional</sup> <a name="installCommand" id="@taimos/projen.MonorepoAmplifyApp.property.installCommand"></a>
10333
+
10334
+ ```typescript
10335
+ public readonly installCommand: string;
10336
+ ```
10337
+
10338
+ - *Type:* string
10339
+ - *Default:* `pnpm install --frozen-lockfile --node-linker hoisted --filter "<installFilter>"`
10340
+
10341
+ Full override of the install command in the preBuild phase.
10342
+
10343
+ When set, `installFilter` is ignored and this string is emitted verbatim.
10344
+ Use this as an escape hatch when the default scoped install is insufficient.
10345
+
10346
+ ---
10347
+
10348
+ ##### `installFilter`<sup>Optional</sup> <a name="installFilter" id="@taimos/projen.MonorepoAmplifyApp.property.installFilter"></a>
10349
+
10350
+ ```typescript
10351
+ public readonly installFilter: string;
10352
+ ```
10353
+
10354
+ - *Type:* string
10355
+ - *Default:* `${buildFilter}...`
10356
+
10357
+ pnpm `--filter` expression for the scoped install in the preBuild phase.
10358
+
10359
+ The trailing `...` syntax pulls in the app's transitive workspace
10360
+ dependencies (e.g. a shared API package) but excludes unrelated packages,
10361
+ avoiding concurrent `projen/node_modules` rename races under the hoisted
10362
+ linker.
10363
+
10364
+ ---
10365
+
10330
10366
  ##### `preBuildFilters`<sup>Optional</sup> <a name="preBuildFilters" id="@taimos/projen.MonorepoAmplifyApp.property.preBuildFilters"></a>
10331
10367
 
10332
10368
  ```typescript
@@ -15,7 +15,7 @@ const projen_1 = require("projen");
15
15
  * dispatch time.
16
16
  */
17
17
  class GitHubProductionRelease extends projen_1.Component {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.72" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.74" };
19
19
  /**
20
20
  * Resolves the branch that is promoted — the project's default release branch.
21
21
  *
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
9
9
  * @pjid taimos-cdk-app
10
10
  */
11
11
  class TaimosCdkApp extends projen_1.awscdk.AwsCdkTypeScriptApp {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.72" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.74" };
13
13
  constructor(options) {
14
14
  super({
15
15
  authorEmail: 'info@taimos.de',
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
9
9
  * @pjid taimos-awscdk-construct
10
10
  */
11
11
  class TaimosCdkConstructLibrary extends projen_1.awscdk.AwsCdkConstructLibrary {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.72" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.74" };
13
13
  constructor(options) {
14
14
  super({
15
15
  authorOrganization: true,
@@ -65,6 +65,26 @@ export interface MonorepoAmplifyApp {
65
65
  * (`<appRoot>/.next/cache/**` or `<appRoot>/.angular/cache/**`).
66
66
  */
67
67
  readonly cachePaths?: string[];
68
+ /**
69
+ * pnpm `--filter` expression for the scoped install in the preBuild phase.
70
+ *
71
+ * The trailing `...` syntax pulls in the app's transitive workspace
72
+ * dependencies (e.g. a shared API package) but excludes unrelated packages,
73
+ * avoiding concurrent `projen/node_modules` rename races under the hoisted
74
+ * linker.
75
+ *
76
+ * @default `${buildFilter}...`
77
+ */
78
+ readonly installFilter?: string;
79
+ /**
80
+ * Full override of the install command in the preBuild phase.
81
+ *
82
+ * When set, `installFilter` is ignored and this string is emitted verbatim.
83
+ * Use this as an escape hatch when the default scoped install is insufficient.
84
+ *
85
+ * @default - `pnpm install --frozen-lockfile --node-linker hoisted --filter "<installFilter>"`
86
+ */
87
+ readonly installCommand?: string;
68
88
  }
69
89
  /**
70
90
  * PNPM workspace tuning for the generated `pnpm-workspace.yaml`.
@@ -32,7 +32,7 @@ var MonorepoAmplifyFramework;
32
32
  * @pjid taimos-monorepo
33
33
  */
34
34
  class MonorepoProject extends projen_1.typescript.TypeScriptProject {
35
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.MonorepoProject", version: "0.1.72" };
35
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.MonorepoProject", version: "0.1.74" };
36
36
  /** The generated `pnpm-workspace.yaml`. */
37
37
  workspaceFile;
38
38
  /** The unified PR build workflow. */
@@ -203,11 +203,14 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
203
203
  }
204
204
  renderAmplifyApp(app) {
205
205
  const angular = app.framework === MonorepoAmplifyFramework.ANGULAR;
206
+ // Scope the install to the app's dependency closure to avoid concurrent
207
+ // projen/node_modules rename races under the hoisted linker (see #372).
208
+ const filter = app.installFilter ?? `${app.buildFilter}...`;
209
+ const installCommand = app.installCommand
210
+ ?? `pnpm install --frozen-lockfile --node-linker hoisted --filter "${filter}"`;
206
211
  const preBuild = [
207
212
  'corepack enable',
208
- // Force pnpm's hoisted linker for the Amplify build only — Amplify's
209
- // managed compute traces runtime deps from a flat node_modules.
210
- 'pnpm install --frozen-lockfile --node-linker hoisted',
213
+ installCommand,
211
214
  ...(app.preBuildFilters ?? []).map((f) => `pnpm --filter ${f} run build`),
212
215
  ];
213
216
  // BUILD_ENV (dev|prod) is provided as an Amplify environment variable.
@@ -238,4 +241,4 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
238
241
  }
239
242
  }
240
243
  exports.MonorepoProject = MonorepoProject;
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvbW9ub3JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFrRTtBQUNsRSx1REFBd0Q7QUFDeEQsOENBQXdGO0FBRXhGOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLDZFQUE2RTtJQUM3RSw2Q0FBaUIsQ0FBQTtJQUNqQiwyR0FBMkc7SUFDM0csK0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBS25DO0FBNE1EOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFFL0QsMkNBQTJDO0lBQzNCLGFBQWEsQ0FBVztJQUV4QyxxQ0FBcUM7SUFDckIsZUFBZSxDQUF3QjtJQUV2RCx3RUFBd0U7SUFDeEQsV0FBVyxDQUFZO0lBRXZDLDhDQUE4QztJQUM5QixjQUFjLENBQXdCO0lBRXRELG1EQUFtRDtJQUNuQyxpQkFBaUIsQ0FBMkI7SUFFNUQsZ0ZBQWdGO0lBQ2hFLG9CQUFvQixDQUFTO0lBRTdDLFlBQVksT0FBK0I7UUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLFNBQVMsQ0FBQztRQUU5RCxLQUFLLENBQUM7WUFDSixRQUFRLEVBQUUsS0FBSztZQUNmLE9BQU8sRUFBRSxLQUFLO1lBQ2QsV0FBVyxFQUFFLEtBQUs7WUFDbEIscUVBQXFFO1lBQ3JFLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsS0FBSztZQUNqQiwwRUFBMEU7WUFDMUUsYUFBYSxFQUFFLEtBQUs7WUFDcEIsR0FBRyxPQUFPO1lBQ1Ysb0RBQW9EO1lBQ3BELGNBQWMsRUFBRSxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDbEQsV0FBVztZQUNYLFVB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RSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7YUFDN0I7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUE5TkgsMENBK05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViLCBqYXZhc2NyaXB0LCB0eXBlc2NyaXB0LCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRIdWJBc3NpZ25BcHByb3ZlciB9IGZyb20gJ3Byb2plbi1waXBlbGluZXMnO1xuaW1wb3J0IHsgR2l0SHViUHJvZHVjdGlvblJlbGVhc2UsIEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucyB9IGZyb20gJy4uL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIFRoZSBmcm9udGVuZCBmcmFtZXdvcmsgYW4gQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9uIGlzIGJ1aWx0IHdpdGguXG4gKlxuICogU2VsZWN0cyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgdGhlIGJ1aWxkIGNvbW1hbmQsIGFydGlmYWN0IGRpcmVjdG9yeSBhbmRcbiAqIGNhY2hlIHBhdGhzIGluIHRoZSBnZW5lcmF0ZWQgYGFtcGxpZnkueW1sYC5cbiAqL1xuZXhwb3J0IGVudW0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrIHtcbiAgLyoqIEEgTmV4dC5qcyBhcHAg4oCUIGFydGlmYWN0cyBpbiBgPGFwcFJvb3Q+Ly5uZXh0YCwgYnVpbHQgdmlhIGBydW4gYnVpbGRgLiAqL1xuICBORVhUSlMgPSAnbmV4dGpzJyxcbiAgLyoqIEFuIEFuZ3VsYXIgYXBwIOKAlCBhcnRpZmFjdHMgaW4gYDxhcHBSb290Pi9kaXN0LzxmaWx0ZXI+L2Jyb3dzZXJgLCBidWlsdCB2aWEgYHJ1biBidWlsZDoke0JVSUxEX0VOVn1gLiAqL1xuICBBTkdVTEFSID0gJ2FuZ3VsYXInLFxufVxuXG4vKipcbiAqIE9uZSBBV1MgQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9uIHNlcnZlZCBmcm9tIGEgd29ya3NwYWNlIHBhY2thZ2UuXG4gKlxuICogUmVuZGVycyBhIHNpbmdsZSBlbnRyeSB1bmRlciBgYXBwbGljYXRpb25zOmAgaW4gdGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLlxuICogQW1wbGlmeSBkb2VzIG5vdCBhdXRvLWRldGVjdCBQTlBNIHdvcmtzcGFjZXMsIHNvIHRoZSBnZW5lcmF0ZWQgYnVpbGQgc3BlY1xuICogcnVucyBgY29yZXBhY2sgZW5hYmxlYCArIGEgcm9vdCBgcG5wbSBpbnN0YWxsYCBhbmQgcHJlLWJ1aWxkcyBhbnkgc2hhcmVkXG4gKiBwYWNrYWdlcyBiZWZvcmUgYnVpbGRpbmcgdGhlIGFwcCBmcm9tIGl0cyBgYXBwUm9vdGAgKHNlZSBBRFItMDAwMikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9BbXBsaWZ5QXBwIHtcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIHBhdGggdGhhdCBpcyB0aGUgQW1wbGlmeSBhcHAgcm9vdCwgZS5nLiBgcGFja2FnZXMvZnJvbnRlbmRgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwUm9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJvbnRlbmQgZnJhbWV3b3JrLCB1c2VkIHRvIHBpY2sgYnVpbGQvYXJ0aWZhY3QvY2FjaGUgZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXdvcms6IE1vbm9yZXBvQW1wbGlmeUZyYW1ld29yaztcblxuICAvKipcbiAgICogVGhlIHBucG0gcGFja2FnZSBuYW1lIHRvIGJ1aWxkLCB1c2VkIGFzIHRoZSBgLS1maWx0ZXJgIHRhcmdldCxcbiAgICogZS5nLiBgZGVwbG95bW9uLWZyb250ZW5kYCBvciBgcmFkYmFsbC1kaWdpdGFsLXBvcnRhbGAuXG4gICAqL1xuICByZWFkb25seSBidWlsZEZpbHRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgcGFja2FnZXMgdG8gYnVpbGQgYmVmb3JlIHRoZSBhcHAsIGFzIGAtLWZpbHRlcmAgdGFyZ2V0cy5cbiAgICpcbiAgICogVHlwaWNhbGx5IHRoZSBzaGFyZWQgQVBJIHBhY2thZ2UgdGhlIGFwcCBjb25zdW1lcyB2aWEgYHdvcmtzcGFjZToqYCxcbiAgICogZS5nLiBgWydAdGFpbW9zL2RlcGxveW1vbi1hcGknXWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZEZpbHRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGJ1aWxkIGNvbW1hbmQgcnVuIGluIHRoZSBBbXBsaWZ5IGBidWlsZGAgcGhhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHBucG0gLS1maWx0ZXIgPGJ1aWxkRmlsdGVyPiBydW4gYnVpbGRgIGZvciBOZXh0LmpzLCBvclxuICAgKiBgcG5wbSAtLWZpbHRlciA8YnVpbGRGaWx0ZXI+IHJ1biBidWlsZDoke0JVSUxEX0VOVn1gIGZvciBBbmd1bGFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgYXJ0aWZhY3QgYmFzZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYDxhcHBSb290Pi8ubmV4dGAgZm9yIE5leHQuanMsIG9yXG4gICAqIGA8YXBwUm9vdD4vZGlzdC88YnVpbGRGaWx0ZXI+L2Jyb3dzZXJgIGZvciBBbmd1bGFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RCYXNlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgQW1wbGlmeSBidWlsZCBjYWNoZSBwYXRocy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgbm9kZV9tb2R1bGVzLyoqYCBwbHVzIHRoZSBmcmFtZXdvcmsgYnVpbGQgY2FjaGVcbiAgICogKGA8YXBwUm9vdD4vLm5leHQvY2FjaGUvKipgIG9yIGA8YXBwUm9vdD4vLmFuZ3VsYXIvY2FjaGUvKipgKS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlUGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQTlBNIHdvcmtzcGFjZSB0dW5pbmcgZm9yIHRoZSBnZW5lcmF0ZWQgYHBucG0td29ya3NwYWNlLnlhbWxgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIHBhY2thZ2UgZ2xvYnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsncGFja2FnZXMvKiddXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG92ZXJyaWRlcyBmb3JjZWQgYWNyb3NzIHRoZSB3aG9sZSB3b3Jrc3BhY2VcbiAgICogKHRoZSBgb3ZlcnJpZGVzOmAgZmllbGQpLiBPbWl0dGVkIGZyb20gdGhlIGZpbGUgd2hlbiBlbXB0eS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZXBlbmRlbmNpZXMgYWxsb3dlZCB0byBydW4gaW5zdGFsbC9idWlsZCBzY3JpcHRzLiBwbnBtID49IDEwIGJsb2NrcyB0aGVzZVxuICAgKiBieSBkZWZhdWx0LiBUaGUgbGlzdCBwb3B1bGF0ZXMgYm90aCBgYWxsb3dCdWlsZHNgIGFuZFxuICAgKiBgb25seUJ1aWx0RGVwZW5kZW5jaWVzYCBzbyBwbnBtIGRvZXMgbm90IHRyZWF0IGBub2RlX21vZHVsZXNgIGFzIHN0YWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ0Bhd3MtYW1wbGlmeS9jbGknLCAnZXNidWlsZCcsICdzaGFycCcsICd1bnJzLXJlc29sdmVyJ11cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRCdWlsZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWluaW11bSBhZ2UgaW4gbWludXRlcyBhIHB1Ymxpc2hlZCB2ZXJzaW9uIG11c3QgaGF2ZSBiZWZvcmUgaXQgbWF5IGJlXG4gICAqIGluc3RhbGxlZCAoYG1pbmltdW1SZWxlYXNlQWdlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDI4ODAgLy8gMiBkYXlzXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogUGFja2FnZXMgZXhlbXB0IGZyb20gYG1pbmltdW1SZWxlYXNlQWdlYCBzbyBvdXIgb3duIHRvb2xpbmcgY2FuIHVwZGF0ZVxuICAgKiB3aXRob3V0IHRoZSBjb29sZG93bi5cbiAgICpcbiAgICogQGRlZmF1bHQgWydwcm9qZW4tcGlwZWxpbmVzJywgJ2Nkay1zZXJ2ZXJsZXNzJywgJ0B0YWltb3MvcHJvamVuJ11cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBhdXRob3ItdG8tYXBwcm92ZXJzIHJvdXRpbmcgcnVsZSBmb3IgdGhlIFBSIGFwcHJvdmVyIGFzc2lnbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9BcHByb3Zlck1hcHBpbmcge1xuICAvKipcbiAgICogVGhlIEdpdEh1YiB1c2VybmFtZSBvcGVuaW5nIHRoZSBQUi5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHVzZXJuYW1lcyBhc3NpZ25lZCB0byByZXZpZXcgd2hlbiBgYXV0aG9yYCBvcGVucyBhIFBSLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZXJzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb1Byb2plY3RPcHRpb25zIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBucG0gdmVyc2lvbiBwaW5uZWQgZm9yIHRoZSB3b3Jrc3BhY2UgYW5kIENJLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMTAuMzMuMCdcbiAgICovXG4gIHJlYWRvbmx5IHBucG1Xb3Jrc3BhY2VWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZS5qcyB2ZXJzaW9uIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBidWlsZCB3b3JrZmxvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgJzIyJ1xuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBOUE0gd29ya3NwYWNlIHR1bmluZyBmb3IgdGhlIGdlbmVyYXRlZCBgcG5wbS13b3Jrc3BhY2UueWFtbGAuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VPcHRpb25zPzogTW9ub3JlcG9Xb3Jrc3BhY2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBgY2RrLXNlcnZlcmxlc3NgIGFzIGEgd29ya3NwYWNlIGRldiBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU2VydmVybGVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXNzaWduIFBSIGFwcHJvdmVycyB2aWEgYEdpdEh1YkFzc2lnbkFwcHJvdmVyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduQXBwcm92ZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRob3ItdG8tYXBwcm92ZXJzIHJvdXRpbmcgZm9yIHRoZSBQUiBhcHByb3ZlciBhc3NpZ25tZW50LlxuICAgKiBPbmx5IHVzZWQgd2hlbiBgYXNzaWduQXBwcm92ZXJgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaG9lZ2VydG4gYW5kIGhvZWdlcm1hIHJldmlldyBlYWNoIG90aGVyXG4gICAqL1xuICByZWFkb25seSBhcHByb3Zlck1hcHBpbmc/OiBNb25vcmVwb0FwcHJvdmVyTWFwcGluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcHByb3ZlcnMgYXNzaWduZWQgd2hlbiBubyBhdXRob3Itc3BlY2lmaWMgbWFwcGluZyBtYXRjaGVzLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBgYXNzaWduQXBwcm92ZXJgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnaG9lZ2VydG4nLCAnaG9lZ2VybWEnXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFwcHJvdmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1bmlmaWVkIGJ1aWxkIHdvcmtmbG93IGFsc28gcnVucyBgcG5wbSAtciBydW4gdGVzdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJ1blRlc3RzSW5CdWlsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYXBwbGljYXRpb25zLiBXaGVuIHNldCwgYW4gYGFtcGxpZnkueW1sYCBpcyBnZW5lcmF0ZWRcbiAgICogd2l0aCBvbmUgZW50cnkgcGVyIGFwcC4gV2hlbiBvbWl0dGVkLCBubyBgYW1wbGlmeS55bWxgIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBhbXBsaWZ5QXBwcz86IE1vbm9yZXBvQW1wbGlmeUFwcFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIG1hbnVhbCBcIlByb2R1Y3Rpb24gUmVsZWFzZVwiIHdvcmtmbG93IHRoYXQgcHJvbW90ZXMgYSBicmFuY2hcbiAgICogdG8gdGhlIHByb2R1Y3Rpb24gYnJhbmNoIChzZWUgYEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0aW9uUmVsZWFzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3cuIE9ubHkgdXNlZCB3aGVuXG4gICAqIGBwcm9kdWN0aW9uUmVsZWFzZWAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm9tb3RlIGBtYWluYCB0byBhIGBwcm9kdWN0aW9uYCBicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucz86IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQcml2YXRlIFBOUE0td29ya3NwYWNlIG1vbm9yZXBvIHJvb3QsIGZvbGxvd2luZyBUYWltb3MgQURSLTAwMDIuXG4gKlxuICogVGhlIHJvb3Qgb25seSBvcmNoZXN0cmF0ZXMgdGhlIHdvcmtzcGFjZSDigJQgYnVpbGRpbmcsIHRlc3RpbmcgYW5kIGxpbnRpbmcgYXJlXG4gKiBkZWxlZ2F0ZWQgdG8gdGhlIHdvcmtzcGFjZSBwYWNrYWdlcyB2aWEgYHBucG0gLXJgLiBUaGlzIHByb2plY3QgZ2VuZXJhdGVzIHRoZVxuICogYHBucG0td29ya3NwYWNlLnlhbWxgLCB0aGUgcm9vdCBjb252ZW5pZW5jZSBzY3JpcHRzLCBhIHVuaWZpZWQgUFIgYnVpbGRcbiAqIHdvcmtmbG93IGFuZCAob3B0aW9uYWxseSkgYW4gQW1wbGlmeSBIb3N0aW5nIGJ1aWxkIHNwZWMuIFRoZSBwcm9qZW4tbWFuYWdlZFxuICogc3ViLXByb2plY3RzIChhcGksIGJhY2tlbmQsIGluZnJhKSBhcmUgYWRkZWQgd2l0aCB0aGUgYHBhcmVudGAvYG91dGRpcmBcbiAqIHBhdHRlcm4gaW4gdGhlIGNvbnN1bWluZyBgLnByb2plbnJjLnRzYDsgcGxhaW4gd29ya3NwYWNlIHBhY2thZ2VzIChlLmcuXG4gKiBOZXh0LmpzIGFwcHMpIGFyZSBwaWNrZWQgdXAgYnkgdGhlIGBwYWNrYWdlcy8qYCBnbG9iLlxuICpcbiAqIEBwamlkIHRhaW1vcy1tb25vcmVwb1xuICovXG5leHBvcnQgY2xhc3MgTW9ub3JlcG9Qcm9qZWN0IGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCB7XG5cbiAgLyoqIFRoZSBnZW5lcmF0ZWQgYHBucG0td29ya3NwYWNlLnlhbWxgLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlRmlsZTogWWFtbEZpbGU7XG5cbiAgLyoqIFRoZSB1bmlmaWVkIFBSIGJ1aWxkIHdvcmtmbG93LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJCdWlsZFdvcmtmbG93OiBnaXRodWIuR2l0aHViV29ya2Zsb3c7XG5cbiAgLyoqIFRoZSBnZW5lcmF0ZWQgYGFtcGxpZnkueW1sYCwgaWYgYW55IEFtcGxpZnkgYXBwcyB3ZXJlIGNvbmZpZ3VyZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBhbXBsaWZ5RmlsZT86IFlhbWxGaWxlO1xuXG4gIC8qKiBUaGUgUFIgYXBwcm92ZXIgYXNzaWdubWVudCwgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbkFwcHJvdmVyPzogR2l0SHViQXNzaWduQXBwcm92ZXI7XG5cbiAgLyoqIFRoZSBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3csIGlmIGVuYWJsZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9kdWN0aW9uUmVsZWFzZT86IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlO1xuXG4gIC8qKiBUaGUgZGVmYXVsdCByZWxlYXNlIGJyYW5jaCAocHJvbW90ZWQgYnkgdGhlIHByb2R1Y3Rpb24gcmVsZWFzZSB3b3JrZmxvdykuICovXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0UmVsZWFzZUJyYW5jaDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1vbm9yZXBvUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCBwbnBtVmVyc2lvbiA9IG9wdGlvbnMucG5wbVdvcmtzcGFjZVZlcnNpb24gPz8gJzEwLjMzLjAnO1xuXG4gICAgc3VwZXIoe1xuICAgICAgbGljZW5zZWQ6IGZhbHNlLFxuICAgICAgcmVsZWFzZTogZmFsc2UsXG4gICAgICBkZXBzVXBncmFkZTogZmFsc2UsXG4gICAgICAvLyBUaGUgcm9vdCBvbmx5IG9yY2hlc3RyYXRlcyB0aGUgd29ya3NwYWNlIOKAlCBubyBhcHAgY29kZSBsaXZlcyBoZXJlLlxuICAgICAgamVzdDogZmFsc2UsXG4gICAgICBlc2xpbnQ6IGZhbHNlLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgICAvLyBDSSBpcyB0aGUgc2luZ2xlIGhhbmQtcm9sbGVkIHdvcmtmbG93IGJlbG93IHRoYXQgZGVsZWdhdGVzIHRvIHBhY2thZ2VzLlxuICAgICAgYnVpbGRXb3JrZmxvdzogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gRm9yY2VkIOKAlCBkZWZpbmluZyB3aGF0IGEgVGFpbW9zIG1vbm9yZXBvIHJvb3QgaXMuXG4gICAgICBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuUE5QTSxcbiAgICAgIHBucG1WZXJzaW9uLFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGdpdGh1YjogdHJ1ZSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKCksXG4gICAgICAgIG1lcmdpZnk6IGZhbHNlLFxuICAgICAgICBtZXJnZVF1ZXVlOiB0cnVlLFxuICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnMsXG4gICAgICAgIG1lcmdlUXVldWVPcHRpb25zOiB7XG4gICAgICAgICAgYXV0b1F1ZXVlOiB0cnVlLFxuICAgICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucz8ubWVyZ2VRdWV1ZU9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHB1bGxSZXF1ZXN0TGludE9wdGlvbnM6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/LnB1bGxSZXF1ZXN0TGludE9wdGlvbnMsXG4gICAgICAgICAgc2VtYW50aWNUaXRsZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucz8ucHVsbFJlcXVlc3RMaW50T3B0aW9ucz8uc2VtYW50aWNUaXRsZU9wdGlvbnMsXG4gICAgICAgICAgICAvLyBGaXhlZCBhbGxvd2VkIFBSIHRpdGxlIHR5cGVzIGZvciBhIFRhaW1vcyBtb25vcmVwby5cbiAgICAgICAgICAgIHR5cGVzOiBbJ2ZlYXQnLCAnZml4JywgJ2Nob3JlJywgJ2RvY3MnLCAnc3BlYycsICdjaSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGV2RGVwczogW1xuICAgICAgICAnQHRhaW1vcy9wcm9qZW4nLFxuICAgICAgICAncHJvamVuLXBpcGVsaW5lcycsXG4gICAgICAgIC4uLihvcHRpb25zLmNka1NlcnZlcmxlc3MgPz8gZmFsc2UgPyBbJ2Nkay1zZXJ2ZXJsZXNzJ10gOiBbXSksXG4gICAgICAgIC4uLm9wdGlvbnMuZGV2RGVwcyA/PyBbXSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBQcml2YXRlIHdvcmtzcGFjZSByb290IOKAlCBuZXZlciBwdWJsaXNoZWQsIHJlc29sdmVzIHBhY2thZ2VzIGxvY2FsbHkuXG4gICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKCdwcml2YXRlJywgdHJ1ZSk7XG5cbiAgICB0aGlzLmRlZmF1bHRSZWxlYXNlQnJhbmNoID0gb3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaCA/PyAnbWFpbic7XG5cbiAgICAvLyBQUiBhcHByb3ZlciByb3V0aW5nLlxuICAgIGlmIChvcHRpb25zLmFzc2lnbkFwcHJvdmVyID8/IHRydWUpIHtcbiAgICAgIHRoaXMuYXNzaWduQXBwcm92ZXIgPSBuZXcgR2l0SHViQXNzaWduQXBwcm92ZXIodGhpcywge1xuICAgICAgICBhcHByb3Zlck1hcHBpbmc6IG9wdGlvbnMuYXBwcm92ZXJNYXBwaW5nID8/IFtcbiAgICAgICAgICB7IGF1dGhvcjogJ2hvZWdlcnRuJywgYXBwcm92ZXJzOiBbJ2hvZWdlcm1hJ10gfSxcbiAgICAgICAgICB7IGF1dGhvcjogJ2hvZWdlcm1hJywgYXBwcm92ZXJzOiBbJ2hvZWdlcnRuJ10gfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdEFwcHJvdmVyczogb3B0aW9ucy5kZWZhdWx0QXBwcm92ZXJzID8/IFsnaG9lZ2VydG4nLCAnaG9lZ2VybWEnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1hbnVhbCBwcm9kdWN0aW9uIHJlbGVhc2Ug4oCUIHByb21vdGVzIGEgYnJhbmNoIHRvIHRoZSBwcm9kdWN0aW9uIGJyYW5jaC5cbiAgICBpZiAob3B0aW9ucy5wcm9kdWN0aW9uUmVsZWFzZSA/PyBmYWxzZSkge1xuICAgICAgdGhpcy5wcm9kdWN0aW9uUmVsZWFzZSA9IG5ldyBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZSh0aGlzLCBvcHRpb25zLnByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHByb2plbnJjIGlzIHNwbGl0IGludG8gbW9kdWxlcyB1bmRlciAucHJvamVuLyDigJQgbWFrZSB0aGVtIHBhcnQgb2YgdGhlXG4gICAgLy8gZGV2IHRzY29uZmlnIHNvIHRoZSBJREUgYW5kIHRzLW5vZGUgdHlwZS1jaGVjayB0aGVtLlxuICAgIHRoaXMudHNjb25maWdEZXY/LmFkZEluY2x1ZGUoJy5wcm9qZW4vKi50cycpO1xuXG4gICAgLy8gcG5wbSB3b3Jrc3BhY2UgZGVmaW5pdGlvbi5cbiAgICBjb25zdCB3cyA9IG9wdGlvbnMud29ya3NwYWNlT3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBhbGxvd2VkQnVpbGRzID0gd3MuYWxsb3dlZEJ1aWxkcyA/PyBbJ0Bhd3MtYW1wbGlmeS9jbGknLCAnZXNidWlsZCcsICdzaGFycCcsICd1bnJzLXJlc29sdmVyJ107XG4gICAgY29uc3QgYWxsb3dCdWlsZHM6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZGVwIG9mIGFsbG93ZWRCdWlsZHMpIHtcbiAgICAgIGFsbG93QnVpbGRzW2RlcF0gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLndvcmtzcGFjZUZpbGUgPSBuZXcgWWFtbEZpbGUodGhpcywgJ3BucG0td29ya3NwYWNlLnlhbWwnLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgcGFja2FnZXM6IHdzLnBhY2thZ2VzID8/IFsncGFja2FnZXMvKiddLFxuICAgICAgICAvLyBBbGxvdyBuYXRpdmUvYnVpbGQtc3RlcCBwYWNrYWdlcyB0byBydW4gaW5zdGFsbCBzY3JpcHRzIChwbnBtID49IDEwXG4gICAgICAgIC8vIGJsb2NrcyB0aGVzZSBieSBkZWZhdWx0KSwgc28gcG5wbSBkb2VzIG5vdCB0cmVhdCBub2RlX21vZHVsZXMgYXMgc3RhbGUuXG4gICAgICAgIGFsbG93QnVpbGRzLFxuICAgICAgICBvbmx5QnVpbHREZXBlbmRlbmNpZXM6IGFsbG93ZWRCdWlsZHMsXG4gICAgICAgIC4uLih3cy5vdmVycmlkZXMgJiYgT2JqZWN0LmtleXMod3Mub3ZlcnJpZGVzKS5sZW5ndGggPiAwID8geyBvdmVycmlkZXM6IHdzLm92ZXJyaWRlcyB9IDoge30pLFxuICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZTogd3MubWluaW11bVJlbGVhc2VBZ2UgPz8gMjg4MCwgLy8gMiBkYXlzIGluIG1pbnV0ZXNcbiAgICAgICAgbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlOiB3cy5taW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGUgPz8gW1xuICAgICAgICAgICdwcm9qZW4tcGlwZWxpbmVzJyxcbiAgICAgICAgICAnY2RrLXNlcnZlcmxlc3MnLFxuICAgICAgICAgICdAdGFpbW9zL3Byb2plbicsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ29udmVuaWVuY2Ugcm9vdCBzY3JpcHRzIGRlbGVnYXRlIHRvIHRoZSB3b3Jrc3BhY2UuXG4gICAgY29uc3Qgcm9vdFBrZyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJ3BhY2thZ2UuanNvbicpITtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLmJ1aWxkJywgJ3BucG0gLXIgcnVuIGJ1aWxkJyk7XG4gICAgcm9vdFBrZy5hZGRPdmVycmlkZSgnc2NyaXB0cy50ZXN0JywgJ3BucG0gLXIgcnVuIHRlc3QnKTtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLmxpbnQnLCAncG5wbSAtciBydW4gZXNsaW50Jyk7XG5cbiAgICAvLyBVbmlmaWVkIFBSIGJ1aWxkIHdvcmtmbG93IOKAlCBidWlsZHMgKGFuZCBvcHRpb25hbGx5IHRlc3RzKSBldmVyeSB3b3Jrc3BhY2VcbiAgICAvLyBwYWNrYWdlIGluIGRlcGVuZGVuY3kgb3JkZXIuXG4gICAgY29uc3Qgbm9kZVZlcnNpb24gPSBvcHRpb25zLm5vZGVWZXJzaW9uID8/ICcyMic7XG4gICAgY29uc3QgYnVpbGRTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICB7IG5hbWU6ICdDaGVja291dCcsIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyB9LFxuICAgICAgeyBuYW1lOiAnU2V0dXAgcG5wbScsIHVzZXM6ICdwbnBtL2FjdGlvbi1zZXR1cEB2NCcsIHdpdGg6IHsgdmVyc2lvbjogcG5wbVZlcnNpb24gfSB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2V0dXAgTm9kZS5qcycsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL3NldHVwLW5vZGVAdjQnLFxuICAgICAgICB3aXRoOiB7ICdub2RlLXZlcnNpb24nOiBub2RlVmVyc2lvbiwgJ2NhY2hlJzogJ3BucG0nIH0sXG4gICAgICB9LFxuICAgICAgeyBuYW1lOiAnSW5zdGFsbCcsIHJ1bjogJ3BucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZScgfSxcbiAgICAgIHsgbmFtZTogJ0J1aWxkJywgcnVuOiAncG5wbSAtciBydW4gYnVpbGQnIH0sXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucy5ydW5UZXN0c0luQnVpbGQgPz8gdHJ1ZSkge1xuICAgICAgYnVpbGRTdGVwcy5wdXNoKHsgbmFtZTogJ1Rlc3QnLCBydW46ICdwbnBtIC1yIHJ1biB0ZXN0JyB9KTtcbiAgICB9XG4gICAgLy8gUGF0aCBmaWx0ZXI6IG9ubHkgdHJpZ2dlciBidWlsZHMgd2hlbiB3b3Jrc3BhY2UgcGFja2FnZSBmaWxlcyBvclxuICAgIC8vIGJ1aWxkLXJlbGV2YW50IHJvb3QgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBDaGFuZ2VzIHRvIHNwZWNzIG9yIGRvY3NcbiAgICAvLyBhbG9uZSBzaG91bGQgbm90IHRyaWdnZXIgYSBuZXcgYnVpbGQuXG4gICAgY29uc3Qgd29ya3NwYWNlUGFja2FnZXMgPSB3cy5wYWNrYWdlcyA/PyBbJ3BhY2thZ2VzLyonXTtcbiAgICBjb25zdCBidWlsZFBhdGhzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC8vIFdvcmtzcGFjZSBwYWNrYWdlIHNvdXJjZSBmaWxlcy5cbiAgICAgIC4uLndvcmtzcGFjZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBgJHtwa2d9LyoqYCksXG4gICAgICAvLyBEZXBlbmRlbmN5IGxvY2sgJiB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbi5cbiAgICAgICdwbnBtLWxvY2sueWFtbCcsXG4gICAgICAncG5wbS13b3Jrc3BhY2UueWFtbCcsXG4gICAgICAvLyBSb290IHBhY2thZ2UuanNvbiAoc2NyaXB0cywgZGV2RGVwcywgZW5naW5lcykuXG4gICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgIC8vIFByb2plbiBjb25maWd1cmF0aW9uIOKAlCByZWdlbmVyYXRlcyBwcm9qZWN0IGZpbGVzLlxuICAgICAgJy5wcm9qZW5yYy50cycsXG4gICAgICAnLnByb2plbnJjLmpzJyxcbiAgICAgICcucHJvamVuLyoqJyxcbiAgICAgIC8vIFNoYXJlZCBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24uXG4gICAgICAndHNjb25maWcuanNvbicsXG4gICAgICAndHNjb25maWcuKi5qc29uJyxcbiAgICAgIC8vIFRoZSBidWlsZCB3b3JrZmxvdyBpdHNlbGYuXG4gICAgICAnLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sJyxcbiAgICAgIC8vIFNoYXJlZCBsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAgICAnLmVzbGludHJjLionLFxuICAgICAgJ2VzbGludC5jb25maWcuKicsXG4gICAgXTtcblxuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93ID0gbmV3IGdpdGh1Yi5HaXRodWJXb3JrZmxvdyh0aGlzLmdpdGh1YiEsICdidWlsZCcpO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0OiB7IHBhdGhzOiBidWlsZFBhdGhzIH0sXG4gICAgICBwdXNoOiB7IGJyYW5jaGVzOiBbJ21haW4nXSwgcGF0aHM6IGJ1aWxkUGF0aHMgfSxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgIH0pO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93LmFkZEpvYignYnVpbGQnLCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBzdGVwczogYnVpbGRTdGVwcyxcbiAgICB9KTtcblxuICAgIC8vIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gUE5QTSB3b3Jrc3BhY2VzIGFyZSBub3QgYXV0by1kZXRlY3RlZCBieVxuICAgIC8vIEFtcGxpZnksIHNvIGVhY2ggYXBwIGluc3RhbGxzIGF0IHRoZSByZXBvIHJvb3QsIHByZS1idWlsZHMgaXRzIHNoYXJlZFxuICAgIC8vIHBhY2thZ2VzLCB0aGVuIGJ1aWxkcyBmcm9tIGl0cyBhcHBSb290IChzZWUgQURSLTAwMDIpLlxuICAgIGlmIChvcHRpb25zLmFtcGxpZnlBcHBzICYmIG9wdGlvbnMuYW1wbGlmeUFwcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbXBsaWZ5RmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLCAnYW1wbGlmeS55bWwnLCB7XG4gICAgICAgIG9iajoge1xuICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgYXBwbGljYXRpb25zOiBvcHRpb25zLmFtcGxpZnlBcHBzLm1hcCgoYXBwKSA9PiB0aGlzLnJlbmRlckFtcGxpZnlBcHAoYXBwKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckFtcGxpZnlBcHAoYXBwOiBNb25vcmVwb0FtcGxpZnlBcHApIHtcbiAgICBjb25zdCBhbmd1bGFyID0gYXBwLmZyYW1ld29yayA9PT0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrLkFOR1VMQVI7XG4gICAgY29uc3QgcHJlQnVpbGQgPSBbXG4gICAgICAnY29yZXBhY2sgZW5hYmxlJyxcbiAgICAgIC8vIEZvcmNlIHBucG0ncyBob2lzdGVkIGxpbmtlciBmb3IgdGhlIEFtcGxpZnkgYnVpbGQgb25seSDigJQgQW1wbGlmeSdzXG4gICAgICAvLyBtYW5hZ2VkIGNvbXB1dGUgdHJhY2VzIHJ1bnRpbWUgZGVwcyBmcm9tIGEgZmxhdCBub2RlX21vZHVsZXMuXG4gICAgICAncG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0tbm9kZS1saW5rZXIgaG9pc3RlZCcsXG4gICAgICAuLi4oYXBwLnByZUJ1aWxkRmlsdGVycyA/PyBbXSkubWFwKChmKSA9PiBgcG5wbSAtLWZpbHRlciAke2Z9IHJ1biBidWlsZGApLFxuICAgIF07XG4gICAgLy8gQlVJTERfRU5WIChkZXZ8cHJvZCkgaXMgcHJvdmlkZWQgYXMgYW4gQW1wbGlmeSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICBjb25zdCBidWlsZENvbW1hbmQgPSBhcHAuYnVpbGRDb21tYW5kID8/IChhbmd1bGFyXG4gICAgICA/IGBwbnBtIC0tZmlsdGVyICR7YXBwLmJ1aWxkRmlsdGVyfSBydW4gYnVpbGQ6XFwke0JVSUxEX0VOVn1gXG4gICAgICA6IGBwbnBtIC0tZmlsdGVyICR7YXBwLmJ1aWxkRmlsdGVyfSBydW4gYnVpbGRgKTtcbiAgICBjb25zdCBiYXNlRGlyZWN0b3J5ID0gYXBwLmFydGlmYWN0QmFzZURpcmVjdG9yeSA/PyAoYW5ndWxhclxuICAgICAgPyBgJHthcHAuYXBwUm9vdH0vZGlzdC8ke2FwcC5idWlsZEZpbHRlcn0vYnJvd3NlcmBcbiAgICAgIDogYCR7YXBwLmFwcFJvb3R9Ly5uZXh0YCk7XG4gICAgY29uc3QgY2FjaGVQYXRocyA9IGFwcC5jYWNoZVBhdGhzID8/IFtcbiAgICAgICdub2RlX21vZHVsZXMvKiovKicsXG4gICAgICBhbmd1bGFyID8gYCR7YXBwLmFwcFJvb3R9Ly5hbmd1bGFyL2NhY2hlLyoqLypgIDogYCR7YXBwLmFwcFJvb3R9Ly5uZXh0L2NhY2hlLyoqLypgLFxuICAgIF07XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFJvb3Q6IGFwcC5hcHBSb290LFxuICAgICAgZnJvbnRlbmQ6IHtcbiAgICAgICAgLy8gSW5zdGFsbC9idWlsZCBmcm9tIHRoZSBtb25vcmVwbyByb290IHNvIHRoZSB3b3Jrc3BhY2Ugcm9vdFxuICAgICAgICAvLyBwYWNrYWdlLmpzb24gYW5kIHBucG0tbG9jay55YW1sIGFyZSBhdmFpbGFibGUuXG4gICAgICAgIGJ1aWxkUGF0aDogJy8nLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBwcmVCdWlsZDogeyBjb21tYW5kczogcHJlQnVpbGQgfSxcbiAgICAgICAgICBidWlsZDogeyBjb21tYW5kczogW2J1aWxkQ29tbWFuZF0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJ0aWZhY3RzOiB7IGJhc2VEaXJlY3RvcnksIGZpbGVzOiBbJyoqLyonXSB9LFxuICAgICAgICBjYWNoZTogeyBwYXRoczogY2FjaGVQYXRocyB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvbW9ub3JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFrRTtBQUNsRSx1REFBd0Q7QUFDeEQsOENBQXdGO0FBRXhGOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLDZFQUE2RTtJQUM3RSw2Q0FBaUIsQ0FBQTtJQUNqQiwyR0FBMkc7SUFDM0csK0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBS25DO0FBa09EOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFFL0QsMkNBQTJDO0lBQzNCLGFBQWEsQ0FBVztJQUV4QyxxQ0FBcUM7SUFDckIsZUFBZSxDQUF3QjtJQUV2RCx3RUFBd0U7SUFDeEQsV0FBVyxDQUFZO0lBRXZDLDhDQUE4QztJQUM5QixjQUFjLENBQXdCO0lBRXRELG1EQUFtRDtJQUNuQyxpQkFBaUIsQ0FBMkI7SUFFNUQsZ0ZBQWdGO0lBQ2hFLG9CQUFvQixDQUFTO0lBRTdDLFlBQVksT0FBK0I7UUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLFNBQVMsQ0FBQztRQUU5RCxLQUFLLENBQUM7WUFDSixRQUFRLEVBQUUsS0FBSztZQUNmLE9BQU8sRUFBRSxLQUFLO1lBQ2QsV0FBVyxFQUFFLEtBQUs7WUFDbEIscUVBQXFFO1lBQ3JFLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsS0FBSztZQUNqQiwwRUFBMEU7WUFDMUUsYUFBYSxFQUFFLEtBQUs7WUFDcEIsR0FBRyxPQUFPO1lBQ1Ysb0RBQW9EO1lBQ3BELGNBQWMsRUFBRSxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDbEQsV0FBVztZQUNYLFVB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Q2hDLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO2lCQUNwQztnQkFDRCxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzdDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7YUFDN0I7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFqT0gsMENBa09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViLCBqYXZhc2NyaXB0LCB0eXBlc2NyaXB0LCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRIdWJBc3NpZ25BcHByb3ZlciB9IGZyb20gJ3Byb2plbi1waXBlbGluZXMnO1xuaW1wb3J0IHsgR2l0SHViUHJvZHVjdGlvblJlbGVhc2UsIEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucyB9IGZyb20gJy4uL2NvbXBvbmVudHMnO1xuXG4vKipcbiAqIFRoZSBmcm9udGVuZCBmcmFtZXdvcmsgYW4gQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9uIGlzIGJ1aWx0IHdpdGguXG4gKlxuICogU2VsZWN0cyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgdGhlIGJ1aWxkIGNvbW1hbmQsIGFydGlmYWN0IGRpcmVjdG9yeSBhbmRcbiAqIGNhY2hlIHBhdGhzIGluIHRoZSBnZW5lcmF0ZWQgYGFtcGxpZnkueW1sYC5cbiAqL1xuZXhwb3J0IGVudW0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrIHtcbiAgLyoqIEEgTmV4dC5qcyBhcHAg4oCUIGFydGlmYWN0cyBpbiBgPGFwcFJvb3Q+Ly5uZXh0YCwgYnVpbHQgdmlhIGBydW4gYnVpbGRgLiAqL1xuICBORVhUSlMgPSAnbmV4dGpzJyxcbiAgLyoqIEFuIEFuZ3VsYXIgYXBwIOKAlCBhcnRpZmFjdHMgaW4gYDxhcHBSb290Pi9kaXN0LzxmaWx0ZXI+L2Jyb3dzZXJgLCBidWlsdCB2aWEgYHJ1biBidWlsZDoke0JVSUxEX0VOVn1gLiAqL1xuICBBTkdVTEFSID0gJ2FuZ3VsYXInLFxufVxuXG4vKipcbiAqIE9uZSBBV1MgQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9uIHNlcnZlZCBmcm9tIGEgd29ya3NwYWNlIHBhY2thZ2UuXG4gKlxuICogUmVuZGVycyBhIHNpbmdsZSBlbnRyeSB1bmRlciBgYXBwbGljYXRpb25zOmAgaW4gdGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLlxuICogQW1wbGlmeSBkb2VzIG5vdCBhdXRvLWRldGVjdCBQTlBNIHdvcmtzcGFjZXMsIHNvIHRoZSBnZW5lcmF0ZWQgYnVpbGQgc3BlY1xuICogcnVucyBgY29yZXBhY2sgZW5hYmxlYCArIGEgcm9vdCBgcG5wbSBpbnN0YWxsYCBhbmQgcHJlLWJ1aWxkcyBhbnkgc2hhcmVkXG4gKiBwYWNrYWdlcyBiZWZvcmUgYnVpbGRpbmcgdGhlIGFwcCBmcm9tIGl0cyBgYXBwUm9vdGAgKHNlZSBBRFItMDAwMikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9BbXBsaWZ5QXBwIHtcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIHBhdGggdGhhdCBpcyB0aGUgQW1wbGlmeSBhcHAgcm9vdCwgZS5nLiBgcGFja2FnZXMvZnJvbnRlbmRgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwUm9vdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJvbnRlbmQgZnJhbWV3b3JrLCB1c2VkIHRvIHBpY2sgYnVpbGQvYXJ0aWZhY3QvY2FjaGUgZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXdvcms6IE1vbm9yZXBvQW1wbGlmeUZyYW1ld29yaztcblxuICAvKipcbiAgICogVGhlIHBucG0gcGFja2FnZSBuYW1lIHRvIGJ1aWxkLCB1c2VkIGFzIHRoZSBgLS1maWx0ZXJgIHRhcmdldCxcbiAgICogZS5nLiBgZGVwbG95bW9uLWZyb250ZW5kYCBvciBgcmFkYmFsbC1kaWdpdGFsLXBvcnRhbGAuXG4gICAqL1xuICByZWFkb25seSBidWlsZEZpbHRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgcGFja2FnZXMgdG8gYnVpbGQgYmVmb3JlIHRoZSBhcHAsIGFzIGAtLWZpbHRlcmAgdGFyZ2V0cy5cbiAgICpcbiAgICogVHlwaWNhbGx5IHRoZSBzaGFyZWQgQVBJIHBhY2thZ2UgdGhlIGFwcCBjb25zdW1lcyB2aWEgYHdvcmtzcGFjZToqYCxcbiAgICogZS5nLiBgWydAdGFpbW9zL2RlcGxveW1vbi1hcGknXWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZEZpbHRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGJ1aWxkIGNvbW1hbmQgcnVuIGluIHRoZSBBbXBsaWZ5IGBidWlsZGAgcGhhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHBucG0gLS1maWx0ZXIgPGJ1aWxkRmlsdGVyPiBydW4gYnVpbGRgIGZvciBOZXh0LmpzLCBvclxuICAgKiBgcG5wbSAtLWZpbHRlciA8YnVpbGRGaWx0ZXI+IHJ1biBidWlsZDoke0JVSUxEX0VOVn1gIGZvciBBbmd1bGFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgYXJ0aWZhY3QgYmFzZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYDxhcHBSb290Pi8ubmV4dGAgZm9yIE5leHQuanMsIG9yXG4gICAqIGA8YXBwUm9vdD4vZGlzdC88YnVpbGRGaWx0ZXI+L2Jyb3dzZXJgIGZvciBBbmd1bGFyLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RCYXNlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgQW1wbGlmeSBidWlsZCBjYWNoZSBwYXRocy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgbm9kZV9tb2R1bGVzLyoqYCBwbHVzIHRoZSBmcmFtZXdvcmsgYnVpbGQgY2FjaGVcbiAgICogKGA8YXBwUm9vdD4vLm5leHQvY2FjaGUvKipgIG9yIGA8YXBwUm9vdD4vLmFuZ3VsYXIvY2FjaGUvKipgKS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlUGF0aHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogcG5wbSBgLS1maWx0ZXJgIGV4cHJlc3Npb24gZm9yIHRoZSBzY29wZWQgaW5zdGFsbCBpbiB0aGUgcHJlQnVpbGQgcGhhc2UuXG4gICAqXG4gICAqIFRoZSB0cmFpbGluZyBgLi4uYCBzeW50YXggcHVsbHMgaW4gdGhlIGFwcCdzIHRyYW5zaXRpdmUgd29ya3NwYWNlXG4gICAqIGRlcGVuZGVuY2llcyAoZS5nLiBhIHNoYXJlZCBBUEkgcGFja2FnZSkgYnV0IGV4Y2x1ZGVzIHVucmVsYXRlZCBwYWNrYWdlcyxcbiAgICogYXZvaWRpbmcgY29uY3VycmVudCBgcHJvamVuL25vZGVfbW9kdWxlc2AgcmVuYW1lIHJhY2VzIHVuZGVyIHRoZSBob2lzdGVkXG4gICAqIGxpbmtlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYCR7YnVpbGRGaWx0ZXJ9Li4uYFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbEZpbHRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogRnVsbCBvdmVycmlkZSBvZiB0aGUgaW5zdGFsbCBjb21tYW5kIGluIHRoZSBwcmVCdWlsZCBwaGFzZS5cbiAgICpcbiAgICogV2hlbiBzZXQsIGBpbnN0YWxsRmlsdGVyYCBpcyBpZ25vcmVkIGFuZCB0aGlzIHN0cmluZyBpcyBlbWl0dGVkIHZlcmJhdGltLlxuICAgKiBVc2UgdGhpcyBhcyBhbiBlc2NhcGUgaGF0Y2ggd2hlbiB0aGUgZGVmYXVsdCBzY29wZWQgaW5zdGFsbCBpcyBpbnN1ZmZpY2llbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLW5vZGUtbGlua2VyIGhvaXN0ZWQgLS1maWx0ZXIgXCI8aW5zdGFsbEZpbHRlcj5cImBcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBOUE0gd29ya3NwYWNlIHR1bmluZyBmb3IgdGhlIGdlbmVyYXRlZCBgcG5wbS13b3Jrc3BhY2UueWFtbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9Xb3Jrc3BhY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgcGFja2FnZSBnbG9icy5cbiAgICpcbiAgICogQGRlZmF1bHQgWydwYWNrYWdlcy8qJ11cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb3ZlcnJpZGVzIGZvcmNlZCBhY3Jvc3MgdGhlIHdob2xlIHdvcmtzcGFjZVxuICAgKiAodGhlIGBvdmVycmlkZXM6YCBmaWVsZCkuIE9taXR0ZWQgZnJvbSB0aGUgZmlsZSB3aGVuIGVtcHR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY2llcyBhbGxvd2VkIHRvIHJ1biBpbnN0YWxsL2J1aWxkIHNjcmlwdHMuIHBucG0gPj0gMTAgYmxvY2tzIHRoZXNlXG4gICAqIGJ5IGRlZmF1bHQuIFRoZSBsaXN0IHBvcHVsYXRlcyBib3RoIGBhbGxvd0J1aWxkc2AgYW5kXG4gICAqIGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgIHNvIHBucG0gZG9lcyBub3QgdHJlYXQgYG5vZGVfbW9kdWxlc2AgYXMgc3RhbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnQGF3cy1hbXBsaWZ5L2NsaScsICdlc2J1aWxkJywgJ3NoYXJwJywgJ3VucnMtcmVzb2x2ZXInXVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZEJ1aWxkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGFnZSBpbiBtaW51dGVzIGEgcHVibGlzaGVkIHZlcnNpb24gbXVzdCBoYXZlIGJlZm9yZSBpdCBtYXkgYmVcbiAgICogaW5zdGFsbGVkIChgbWluaW11bVJlbGVhc2VBZ2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgMjg4MCAvLyAyIGRheXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlcyBleGVtcHQgZnJvbSBgbWluaW11bVJlbGVhc2VBZ2VgIHNvIG91ciBvd24gdG9vbGluZyBjYW4gdXBkYXRlXG4gICAqIHdpdGhvdXQgdGhlIGNvb2xkb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3Byb2plbi1waXBlbGluZXMnLCAnY2RrLXNlcnZlcmxlc3MnLCAnQHRhaW1vcy9wcm9qZW4nXVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogT25lIGF1dGhvci10by1hcHByb3ZlcnMgcm91dGluZyBydWxlIGZvciB0aGUgUFIgYXBwcm92ZXIgYXNzaWdubWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb0FwcHJvdmVyTWFwcGluZyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHVzZXJuYW1lIG9wZW5pbmcgdGhlIFBSLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgdXNlcm5hbWVzIGFzc2lnbmVkIHRvIHJldmlldyB3aGVuIGBhdXRob3JgIG9wZW5zIGEgUFIuXG4gICAqL1xuICByZWFkb25seSBhcHByb3ZlcnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcG5wbSB2ZXJzaW9uIHBpbm5lZCBmb3IgdGhlIHdvcmtzcGFjZSBhbmQgQ0kuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxMC4zMy4wJ1xuICAgKi9cbiAgcmVhZG9ubHkgcG5wbVdvcmtzcGFjZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlLmpzIHZlcnNpb24gdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGJ1aWxkIHdvcmtmbG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMjInXG4gICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUE5QTSB3b3Jrc3BhY2UgdHVuaW5nIGZvciB0aGUgZ2VuZXJhdGVkIGBwbnBtLXdvcmtzcGFjZS55YW1sYC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZU9wdGlvbnM/OiBNb25vcmVwb1dvcmtzcGFjZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGBjZGstc2VydmVybGVzc2AgYXMgYSB3b3Jrc3BhY2UgZGV2IGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjZGtTZXJ2ZXJsZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhc3NpZ24gUFIgYXBwcm92ZXJzIHZpYSBgR2l0SHViQXNzaWduQXBwcm92ZXJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhc3NpZ25BcHByb3Zlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dGhvci10by1hcHByb3ZlcnMgcm91dGluZyBmb3IgdGhlIFBSIGFwcHJvdmVyIGFzc2lnbm1lbnQuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGBhc3NpZ25BcHByb3ZlcmAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBob2VnZXJ0biBhbmQgaG9lZ2VybWEgcmV2aWV3IGVhY2ggb3RoZXJcbiAgICovXG4gIHJlYWRvbmx5IGFwcHJvdmVyTWFwcGluZz86IE1vbm9yZXBvQXBwcm92ZXJNYXBwaW5nW107XG5cbiAgLyoqXG4gICAqIEFwcHJvdmVycyBhc3NpZ25lZCB3aGVuIG5vIGF1dGhvci1zcGVjaWZpYyBtYXBwaW5nIG1hdGNoZXMuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGBhc3NpZ25BcHByb3ZlcmAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgWydob2VnZXJ0bicsICdob2VnZXJtYSddXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QXBwcm92ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHVuaWZpZWQgYnVpbGQgd29ya2Zsb3cgYWxzbyBydW5zIGBwbnBtIC1yIHJ1biB0ZXN0YC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVuVGVzdHNJbkJ1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQVdTIEFtcGxpZnkgSG9zdGluZyBhcHBsaWNhdGlvbnMuIFdoZW4gc2V0LCBhbiBgYW1wbGlmeS55bWxgIGlzIGdlbmVyYXRlZFxuICAgKiB3aXRoIG9uZSBlbnRyeSBwZXIgYXBwLiBXaGVuIG9taXR0ZWQsIG5vIGBhbXBsaWZ5LnltbGAgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGFtcGxpZnlBcHBzPzogTW9ub3JlcG9BbXBsaWZ5QXBwW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgbWFudWFsIFwiUHJvZHVjdGlvbiBSZWxlYXNlXCIgd29ya2Zsb3cgdGhhdCBwcm9tb3RlcyBhIGJyYW5jaFxuICAgKiB0byB0aGUgcHJvZHVjdGlvbiBicmFuY2ggKHNlZSBgR2l0SHViUHJvZHVjdGlvblJlbGVhc2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3Rpb25SZWxlYXNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIHByb2R1Y3Rpb24gcmVsZWFzZSB3b3JrZmxvdy4gT25seSB1c2VkIHdoZW5cbiAgICogYHByb2R1Y3Rpb25SZWxlYXNlYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb21vdGUgYG1haW5gIHRvIGEgYHByb2R1Y3Rpb25gIGJyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdGlvblJlbGVhc2VPcHRpb25zPzogR2l0SHViUHJvZHVjdGlvblJlbGVhc2VPcHRpb25zO1xufVxuXG4vKipcbiAqIFByaXZhdGUgUE5QTS13b3Jrc3BhY2UgbW9ub3JlcG8gcm9vdCwgZm9sbG93aW5nIFRhaW1vcyBBRFItMDAwMi5cbiAqXG4gKiBUaGUgcm9vdCBvbmx5IG9yY2hlc3RyYXRlcyB0aGUgd29ya3NwYWNlIOKAlCBidWlsZGluZywgdGVzdGluZyBhbmQgbGludGluZyBhcmVcbiAqIGRlbGVnYXRlZCB0byB0aGUgd29ya3NwYWNlIHBhY2thZ2VzIHZpYSBgcG5wbSAtcmAuIFRoaXMgcHJvamVjdCBnZW5lcmF0ZXMgdGhlXG4gKiBgcG5wbS13b3Jrc3BhY2UueWFtbGAsIHRoZSByb290IGNvbnZlbmllbmNlIHNjcmlwdHMsIGEgdW5pZmllZCBQUiBidWlsZFxuICogd29ya2Zsb3cgYW5kIChvcHRpb25hbGx5KSBhbiBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gVGhlIHByb2plbi1tYW5hZ2VkXG4gKiBzdWItcHJvamVjdHMgKGFwaSwgYmFja2VuZCwgaW5mcmEpIGFyZSBhZGRlZCB3aXRoIHRoZSBgcGFyZW50YC9gb3V0ZGlyYFxuICogcGF0dGVybiBpbiB0aGUgY29uc3VtaW5nIGAucHJvamVucmMudHNgOyBwbGFpbiB3b3Jrc3BhY2UgcGFja2FnZXMgKGUuZy5cbiAqIE5leHQuanMgYXBwcykgYXJlIHBpY2tlZCB1cCBieSB0aGUgYHBhY2thZ2VzLypgIGdsb2IuXG4gKlxuICogQHBqaWQgdGFpbW9zLW1vbm9yZXBvXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwb1Byb2plY3QgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IHtcblxuICAvKiogVGhlIGdlbmVyYXRlZCBgcG5wbS13b3Jrc3BhY2UueWFtbGAuICovXG4gIHB1YmxpYyByZWFkb25seSB3b3Jrc3BhY2VGaWxlOiBZYW1sRmlsZTtcblxuICAvKiogVGhlIHVuaWZpZWQgUFIgYnVpbGQgd29ya2Zsb3cuICovXG4gIHB1YmxpYyByZWFkb25seSBwckJ1aWxkV29ya2Zsb3c6IGdpdGh1Yi5HaXRodWJXb3JrZmxvdztcblxuICAvKiogVGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLCBpZiBhbnkgQW1wbGlmeSBhcHBzIHdlcmUgY29uZmlndXJlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGFtcGxpZnlGaWxlPzogWWFtbEZpbGU7XG5cbiAgLyoqIFRoZSBQUiBhcHByb3ZlciBhc3NpZ25tZW50LCBpZiBlbmFibGVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzaWduQXBwcm92ZXI/OiBHaXRIdWJBc3NpZ25BcHByb3ZlcjtcblxuICAvKiogVGhlIHByb2R1Y3Rpb24gcmVsZWFzZSB3b3JrZmxvdywgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2R1Y3Rpb25SZWxlYXNlPzogR2l0SHViUHJvZHVjdGlvblJlbGVhc2U7XG5cbiAgLyoqIFRoZSBkZWZhdWx0IHJlbGVhc2UgYnJhbmNoIChwcm9tb3RlZCBieSB0aGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93KS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTW9ub3JlcG9Qcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IHBucG1WZXJzaW9uID0gb3B0aW9ucy5wbnBtV29ya3NwYWNlVmVyc2lvbiA/PyAnMTAuMzMuMCc7XG5cbiAgICBzdXBlcih7XG4gICAgICBsaWNlbnNlZDogZmFsc2UsXG4gICAgICByZWxlYXNlOiBmYWxzZSxcbiAgICAgIGRlcHNVcGdyYWRlOiBmYWxzZSxcbiAgICAgIC8vIFRoZSByb290IG9ubHkgb3JjaGVzdHJhdGVzIHRoZSB3b3Jrc3BhY2Ug4oCUIG5vIGFwcCBjb2RlIGxpdmVzIGhlcmUuXG4gICAgICBqZXN0OiBmYWxzZSxcbiAgICAgIGVzbGludDogZmFsc2UsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIC8vIENJIGlzIHRoZSBzaW5nbGUgaGFuZC1yb2xsZWQgd29ya2Zsb3cgYmVsb3cgdGhhdCBkZWxlZ2F0ZXMgdG8gcGFja2FnZXMuXG4gICAgICBidWlsZFdvcmtmbG93OiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBGb3JjZWQg4oCUIGRlZmluaW5nIHdoYXQgYSBUYWltb3MgbW9ub3JlcG8gcm9vdCBpcy5cbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5QTlBNLFxuICAgICAgcG5wbVZlcnNpb24sXG4gICAgICBwcm9qZW5yY1RzOiB0cnVlLFxuICAgICAgZ2l0aHViOiB0cnVlLFxuICAgICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoKSxcbiAgICAgICAgbWVyZ2lmeTogZmFsc2UsXG4gICAgICAgIG1lcmdlUXVldWU6IHRydWUsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucyxcbiAgICAgICAgbWVyZ2VRdWV1ZU9wdGlvbnM6IHtcbiAgICAgICAgICBhdXRvUXVldWU6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5tZXJnZVF1ZXVlT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAgcHVsbFJlcXVlc3RMaW50T3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucz8ucHVsbFJlcXVlc3RMaW50T3B0aW9ucyxcbiAgICAgICAgICBzZW1hbnRpY1RpdGxlT3B0aW9uczoge1xuICAgICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5wdWxsUmVxdWVzdExpbnRPcHRpb25zPy5zZW1hbnRpY1RpdGxlT3B0aW9ucyxcbiAgICAgICAgICAgIC8vIEZpeGVkIGFsbG93ZWQgUFIgdGl0bGUgdHlwZXMgZm9yIGEgVGFpbW9zIG1vbm9yZXBvLlxuICAgICAgICAgICAgdHlwZXM6IFsnZmVhdCcsICdmaXgnLCAnY2hvcmUnLCAnZG9jcycsICdzcGVjJywgJ2NpJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZXZEZXBzOiBbXG4gICAgICAgICdAdGFpbW9zL3Byb2plbicsXG4gICAgICAgICdwcm9qZW4tcGlwZWxpbmVzJyxcbiAgICAgICAgLi4uKG9wdGlvbnMuY2RrU2VydmVybGVzcyA/PyBmYWxzZSA/IFsnY2RrLXNlcnZlcmxlc3MnXSA6IFtdKSxcbiAgICAgICAgLi4ub3B0aW9ucy5kZXZEZXBzID8/IFtdLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIFByaXZhdGUgd29ya3NwYWNlIHJvb3Qg4oCUIG5ldmVyIHB1Ymxpc2hlZCwgcmVzb2x2ZXMgcGFja2FnZXMgbG9jYWxseS5cbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ3ByaXZhdGUnLCB0cnVlKTtcblxuICAgIHRoaXMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggPSBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoID8/ICdtYWluJztcblxuICAgIC8vIFBSIGFwcHJvdmVyIHJvdXRpbmcuXG4gICAgaWYgKG9wdGlvbnMuYXNzaWduQXBwcm92ZXIgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5hc3NpZ25BcHByb3ZlciA9IG5ldyBHaXRIdWJBc3NpZ25BcHByb3Zlcih0aGlzLCB7XG4gICAgICAgIGFwcHJvdmVyTWFwcGluZzogb3B0aW9ucy5hcHByb3Zlck1hcHBpbmcgPz8gW1xuICAgICAgICAgIHsgYXV0aG9yOiAnaG9lZ2VydG4nLCBhcHByb3ZlcnM6IFsnaG9lZ2VybWEnXSB9LFxuICAgICAgICAgIHsgYXV0aG9yOiAnaG9lZ2VybWEnLCBhcHByb3ZlcnM6IFsnaG9lZ2VydG4nXSB9LFxuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0QXBwcm92ZXJzOiBvcHRpb25zLmRlZmF1bHRBcHByb3ZlcnMgPz8gWydob2VnZXJ0bicsICdob2VnZXJtYSddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTWFudWFsIHByb2R1Y3Rpb24gcmVsZWFzZSDigJQgcHJvbW90ZXMgYSBicmFuY2ggdG8gdGhlIHByb2R1Y3Rpb24gYnJhbmNoLlxuICAgIGlmIChvcHRpb25zLnByb2R1Y3Rpb25SZWxlYXNlID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLnByb2R1Y3Rpb25SZWxlYXNlID0gbmV3IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlKHRoaXMsIG9wdGlvbnMucHJvZHVjdGlvblJlbGVhc2VPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgcHJvamVucmMgaXMgc3BsaXQgaW50byBtb2R1bGVzIHVuZGVyIC5wcm9qZW4vIOKAlCBtYWtlIHRoZW0gcGFydCBvZiB0aGVcbiAgICAvLyBkZXYgdHNjb25maWcgc28gdGhlIElERSBhbmQgdHMtbm9kZSB0eXBlLWNoZWNrIHRoZW0uXG4gICAgdGhpcy50c2NvbmZpZ0Rldj8uYWRkSW5jbHVkZSgnLnByb2plbi8qLnRzJyk7XG5cbiAgICAvLyBwbnBtIHdvcmtzcGFjZSBkZWZpbml0aW9uLlxuICAgIGNvbnN0IHdzID0gb3B0aW9ucy53b3Jrc3BhY2VPcHRpb25zID8/IHt9O1xuICAgIGNvbnN0IGFsbG93ZWRCdWlsZHMgPSB3cy5hbGxvd2VkQnVpbGRzID8/IFsnQGF3cy1hbXBsaWZ5L2NsaScsICdlc2J1aWxkJywgJ3NoYXJwJywgJ3VucnMtcmVzb2x2ZXInXTtcbiAgICBjb25zdCBhbGxvd0J1aWxkczogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gICAgZm9yIChjb25zdCBkZXAgb2YgYWxsb3dlZEJ1aWxkcykge1xuICAgICAgYWxsb3dCdWlsZHNbZGVwXSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMud29ya3NwYWNlRmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLCAncG5wbS13b3Jrc3BhY2UueWFtbCcsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBwYWNrYWdlczogd3MucGFja2FnZXMgPz8gWydwYWNrYWdlcy8qJ10sXG4gICAgICAgIC8vIEFsbG93IG5hdGl2ZS9idWlsZC1zdGVwIHBhY2thZ2VzIHRvIHJ1biBpbnN0YWxsIHNjcmlwdHMgKHBucG0gPj0gMTBcbiAgICAgICAgLy8gYmxvY2tzIHRoZXNlIGJ5IGRlZmF1bHQpLCBzbyBwbnBtIGRvZXMgbm90IHRyZWF0IG5vZGVfbW9kdWxlcyBhcyBzdGFsZS5cbiAgICAgICAgYWxsb3dCdWlsZHMsXG4gICAgICAgIG9ubHlCdWlsdERlcGVuZGVuY2llczogYWxsb3dlZEJ1aWxkcyxcbiAgICAgICAgLi4uKHdzLm92ZXJyaWRlcyAmJiBPYmplY3Qua2V5cyh3cy5vdmVycmlkZXMpLmxlbmd0aCA+IDAgPyB7IG92ZXJyaWRlczogd3Mub3ZlcnJpZGVzIH0gOiB7fSksXG4gICAgICAgIG1pbmltdW1SZWxlYXNlQWdlOiB3cy5taW5pbXVtUmVsZWFzZUFnZSA/PyAyODgwLCAvLyAyIGRheXMgaW4gbWludXRlc1xuICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGU6IHdzLm1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZSA/PyBbXG4gICAgICAgICAgJ3Byb2plbi1waXBlbGluZXMnLFxuICAgICAgICAgICdjZGstc2VydmVybGVzcycsXG4gICAgICAgICAgJ0B0YWltb3MvcHJvamVuJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBDb252ZW5pZW5jZSByb290IHNjcmlwdHMgZGVsZWdhdGUgdG8gdGhlIHdvcmtzcGFjZS5cbiAgICBjb25zdCByb290UGtnID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgncGFja2FnZS5qc29uJykhO1xuICAgIHJvb3RQa2cuYWRkT3ZlcnJpZGUoJ3NjcmlwdHMuYnVpbGQnLCAncG5wbSAtciBydW4gYnVpbGQnKTtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLnRlc3QnLCAncG5wbSAtciBydW4gdGVzdCcpO1xuICAgIHJvb3RQa2cuYWRkT3ZlcnJpZGUoJ3NjcmlwdHMubGludCcsICdwbnBtIC1yIHJ1biBlc2xpbnQnKTtcblxuICAgIC8vIFVuaWZpZWQgUFIgYnVpbGQgd29ya2Zsb3cg4oCUIGJ1aWxkcyAoYW5kIG9wdGlvbmFsbHkgdGVzdHMpIGV2ZXJ5IHdvcmtzcGFjZVxuICAgIC8vIHBhY2thZ2UgaW4gZGVwZW5kZW5jeSBvcmRlci5cbiAgICBjb25zdCBub2RlVmVyc2lvbiA9IG9wdGlvbnMubm9kZVZlcnNpb24gPz8gJzIyJztcbiAgICBjb25zdCBidWlsZFN0ZXBzOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtcbiAgICAgIHsgbmFtZTogJ0NoZWNrb3V0JywgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjQnIH0sXG4gICAgICB7IG5hbWU6ICdTZXR1cCBwbnBtJywgdXNlczogJ3BucG0vYWN0aW9uLXNldHVwQHY0Jywgd2l0aDogeyB2ZXJzaW9uOiBwbnBtVmVyc2lvbiB9IH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvc2V0dXAtbm9kZUB2NCcsXG4gICAgICAgIHdpdGg6IHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uLCAnY2FjaGUnOiAncG5wbScgfSxcbiAgICAgIH0sXG4gICAgICB7IG5hbWU6ICdJbnN0YWxsJywgcnVuOiAncG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlJyB9LFxuICAgICAgeyBuYW1lOiAnQnVpbGQnLCBydW46ICdwbnBtIC1yIHJ1biBidWlsZCcgfSxcbiAgICBdO1xuICAgIGlmIChvcHRpb25zLnJ1blRlc3RzSW5CdWlsZCA/PyB0cnVlKSB7XG4gICAgICBidWlsZFN0ZXBzLnB1c2goeyBuYW1lOiAnVGVzdCcsIHJ1bjogJ3BucG0gLXIgcnVuIHRlc3QnIH0pO1xuICAgIH1cbiAgICAvLyBQYXRoIGZpbHRlcjogb25seSB0cmlnZ2VyIGJ1aWxkcyB3aGVuIHdvcmtzcGFjZSBwYWNrYWdlIGZpbGVzIG9yXG4gICAgLy8gYnVpbGQtcmVsZXZhbnQgcm9vdCBjb25maWd1cmF0aW9uIGNoYW5nZXMuIENoYW5nZXMgdG8gc3BlY3Mgb3IgZG9jc1xuICAgIC8vIGFsb25lIHNob3VsZCBub3QgdHJpZ2dlciBhIG5ldyBidWlsZC5cbiAgICBjb25zdCB3b3Jrc3BhY2VQYWNrYWdlcyA9IHdzLnBhY2thZ2VzID8/IFsncGFja2FnZXMvKiddO1xuICAgIGNvbnN0IGJ1aWxkUGF0aHM6IHN0cmluZ1tdID0gW1xuICAgICAgLy8gV29ya3NwYWNlIHBhY2thZ2Ugc291cmNlIGZpbGVzLlxuICAgICAgLi4ud29ya3NwYWNlUGFja2FnZXMubWFwKChwa2cpID0+IGAke3BrZ30vKipgKSxcbiAgICAgIC8vIERlcGVuZGVuY3kgbG9jayAmIHdvcmtzcGFjZSBjb25maWd1cmF0aW9uLlxuICAgICAgJ3BucG0tbG9jay55YW1sJyxcbiAgICAgICdwbnBtLXdvcmtzcGFjZS55YW1sJyxcbiAgICAgIC8vIFJvb3QgcGFja2FnZS5qc29uIChzY3JpcHRzLCBkZXZEZXBzLCBlbmdpbmVzKS5cbiAgICAgICdwYWNrYWdlLmpzb24nLFxuICAgICAgLy8gUHJvamVuIGNvbmZpZ3VyYXRpb24g4oCUIHJlZ2VuZXJhdGVzIHByb2plY3QgZmlsZXMuXG4gICAgICAnLnByb2plbnJjLnRzJyxcbiAgICAgICcucHJvamVucmMuanMnLFxuICAgICAgJy5wcm9qZW4vKionLFxuICAgICAgLy8gU2hhcmVkIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbi5cbiAgICAgICd0c2NvbmZpZy5qc29uJyxcbiAgICAgICd0c2NvbmZpZy4qLmpzb24nLFxuICAgICAgLy8gVGhlIGJ1aWxkIHdvcmtmbG93IGl0c2VsZi5cbiAgICAgICcuZ2l0aHViL3dvcmtmbG93cy9idWlsZC55bWwnLFxuICAgICAgLy8gU2hhcmVkIGxpbnQgY29uZmlndXJhdGlvbi5cbiAgICAgICcuZXNsaW50cmMuKicsXG4gICAgICAnZXNsaW50LmNvbmZpZy4qJyxcbiAgICBdO1xuXG4gICAgdGhpcy5wckJ1aWxkV29ya2Zsb3cgPSBuZXcgZ2l0aHViLkdpdGh1YldvcmtmbG93KHRoaXMuZ2l0aHViISwgJ2J1aWxkJyk7XG4gICAgdGhpcy5wckJ1aWxkV29ya2Zsb3cub24oe1xuICAgICAgcHVsbFJlcXVlc3Q6IHsgcGF0aHM6IGJ1aWxkUGF0aHMgfSxcbiAgICAgIHB1c2g6IHsgYnJhbmNoZXM6IFsnbWFpbiddLCBwYXRoczogYnVpbGRQYXRocyB9LFxuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgfSk7XG4gICAgdGhpcy5wckJ1aWxkV29ya2Zsb3cuYWRkSm9iKCdidWlsZCcsIHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHN0ZXBzOiBidWlsZFN0ZXBzLFxuICAgIH0pO1xuXG4gICAgLy8gQVdTIEFtcGxpZnkgSG9zdGluZyBidWlsZCBzcGVjLiBQTlBNIHdvcmtzcGFjZXMgYXJlIG5vdCBhdXRvLWRldGVjdGVkIGJ5XG4gICAgLy8gQW1wbGlmeSwgc28gZWFjaCBhcHAgaW5zdGFsbHMgYXQgdGhlIHJlcG8gcm9vdCwgcHJlLWJ1aWxkcyBpdHMgc2hhcmVkXG4gICAgLy8gcGFja2FnZXMsIHRoZW4gYnVpbGRzIGZyb20gaXRzIGFwcFJvb3QgKHNlZSBBRFItMDAwMikuXG4gICAgaWYgKG9wdGlvbnMuYW1wbGlmeUFwcHMgJiYgb3B0aW9ucy5hbXBsaWZ5QXBwcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFtcGxpZnlGaWxlID0gbmV3IFlhbWxGaWxlKHRoaXMsICdhbXBsaWZ5LnltbCcsIHtcbiAgICAgICAgb2JqOiB7XG4gICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICBhcHBsaWNhdGlvbnM6IG9wdGlvbnMuYW1wbGlmeUFwcHMubWFwKChhcHApID0+IHRoaXMucmVuZGVyQW1wbGlmeUFwcChhcHApKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQW1wbGlmeUFwcChhcHA6IE1vbm9yZXBvQW1wbGlmeUFwcCkge1xuICAgIGNvbnN0IGFuZ3VsYXIgPSBhcHAuZnJhbWV3b3JrID09PSBNb25vcmVwb0FtcGxpZnlGcmFtZXdvcmsuQU5HVUxBUjtcbiAgICAvLyBTY29wZSB0aGUgaW5zdGFsbCB0byB0aGUgYXBwJ3MgZGVwZW5kZW5jeSBjbG9zdXJlIHRvIGF2b2lkIGNvbmN1cnJlbnRcbiAgICAvLyBwcm9qZW4vbm9kZV9tb2R1bGVzIHJlbmFtZSByYWNlcyB1bmRlciB0aGUgaG9pc3RlZCBsaW5rZXIgKHNlZSAjMzcyKS5cbiAgICBjb25zdCBmaWx0ZXIgPSBhcHAuaW5zdGFsbEZpbHRlciA/PyBgJHthcHAuYnVpbGRGaWx0ZXJ9Li4uYDtcbiAgICBjb25zdCBpbnN0YWxsQ29tbWFuZCA9IGFwcC5pbnN0YWxsQ29tbWFuZFxuICAgICAgPz8gYHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLW5vZGUtbGlua2VyIGhvaXN0ZWQgLS1maWx0ZXIgXCIke2ZpbHRlcn1cImA7XG4gICAgY29uc3QgcHJlQnVpbGQgPSBbXG4gICAgICAnY29yZXBhY2sgZW5hYmxlJyxcbiAgICAgIGluc3RhbGxDb21tYW5kLFxuICAgICAgLi4uKGFwcC5wcmVCdWlsZEZpbHRlcnMgPz8gW10pLm1hcCgoZikgPT4gYHBucG0gLS1maWx0ZXIgJHtmfSBydW4gYnVpbGRgKSxcbiAgICBdO1xuICAgIC8vIEJVSUxEX0VOViAoZGV2fHByb2QpIGlzIHByb3ZpZGVkIGFzIGFuIEFtcGxpZnkgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAgY29uc3QgYnVpbGRDb21tYW5kID0gYXBwLmJ1aWxkQ29tbWFuZCA/PyAoYW5ndWxhclxuICAgICAgPyBgcG5wbSAtLWZpbHRlciAke2FwcC5idWlsZEZpbHRlcn0gcnVuIGJ1aWxkOlxcJHtCVUlMRF9FTlZ9YFxuICAgICAgOiBgcG5wbSAtLWZpbHRlciAke2FwcC5idWlsZEZpbHRlcn0gcnVuIGJ1aWxkYCk7XG4gICAgY29uc3QgYmFzZURpcmVjdG9yeSA9IGFwcC5hcnRpZmFjdEJhc2VEaXJlY3RvcnkgPz8gKGFuZ3VsYXJcbiAgICAgID8gYCR7YXBwLmFwcFJvb3R9L2Rpc3QvJHthcHAuYnVpbGRGaWx0ZXJ9L2Jyb3dzZXJgXG4gICAgICA6IGAke2FwcC5hcHBSb290fS8ubmV4dGApO1xuICAgIGNvbnN0IGNhY2hlUGF0aHMgPSBhcHAuY2FjaGVQYXRocyA/PyBbXG4gICAgICAnbm9kZV9tb2R1bGVzLyoqLyonLFxuICAgICAgYW5ndWxhciA/IGAke2FwcC5hcHBSb290fS8uYW5ndWxhci9jYWNoZS8qKi8qYCA6IGAke2FwcC5hcHBSb290fS8ubmV4dC9jYWNoZS8qKi8qYCxcbiAgICBdO1xuICAgIHJldHVybiB7XG4gICAgICBhcHBSb290OiBhcHAuYXBwUm9vdCxcbiAgICAgIGZyb250ZW5kOiB7XG4gICAgICAgIC8vIEluc3RhbGwvYnVpbGQgZnJvbSB0aGUgbW9ub3JlcG8gcm9vdCBzbyB0aGUgd29ya3NwYWNlIHJvb3RcbiAgICAgICAgLy8gcGFja2FnZS5qc29uIGFuZCBwbnBtLWxvY2sueWFtbCBhcmUgYXZhaWxhYmxlLlxuICAgICAgICBidWlsZFBhdGg6ICcvJyxcbiAgICAgICAgcGhhc2VzOiB7XG4gICAgICAgICAgcHJlQnVpbGQ6IHsgY29tbWFuZHM6IHByZUJ1aWxkIH0sXG4gICAgICAgICAgYnVpbGQ6IHsgY29tbWFuZHM6IFtidWlsZENvbW1hbmRdIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFydGlmYWN0czogeyBiYXNlRGlyZWN0b3J5LCBmaWxlczogWycqKi8qJ10gfSxcbiAgICAgICAgY2FjaGU6IHsgcGF0aHM6IGNhY2hlUGF0aHMgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -10,7 +10,7 @@ const cdk_app_1 = require("./cdk-app");
10
10
  * @pjid taimos-cdk-app-private
11
11
  */
12
12
  class PrivateTaimosCdkApp extends cdk_app_1.TaimosCdkApp {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.PrivateTaimosCdkApp", version: "0.1.72" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.PrivateTaimosCdkApp", version: "0.1.74" };
14
14
  constructor(options) {
15
15
  super({
16
16
  licensed: false,
@@ -10,7 +10,7 @@ const ts_lib_1 = require("./ts-lib");
10
10
  * @pjid taimos-ts-lib-private
11
11
  */
12
12
  class TaimosPrivateTypescriptLibrary extends ts_lib_1.TaimosTypescriptLibrary {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosPrivateTypescriptLibrary", version: "0.1.72" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosPrivateTypescriptLibrary", version: "0.1.74" };
14
14
  constructor(options) {
15
15
  super({
16
16
  licensed: false,
@@ -11,7 +11,7 @@ const cdk_app_1 = require("./cdk-app");
11
11
  * @pjid taimos-cdk-app-production
12
12
  */
13
13
  class ProductionTaimosCdkApp extends cdk_app_1.TaimosCdkApp {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.ProductionTaimosCdkApp", version: "0.1.72" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.ProductionTaimosCdkApp", version: "0.1.74" };
15
15
  /**
16
16
  * The SonarCloud properties file.
17
17
  */
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
9
9
  * @pjid taimos-ts-lib
10
10
  */
11
11
  class TaimosTypescriptLibrary extends projen_1.typescript.TypeScriptProject {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosTypescriptLibrary", version: "0.1.72" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosTypescriptLibrary", version: "0.1.74" };
13
13
  constructor(options) {
14
14
  super({
15
15
  authorName: 'Taimos GmbH',
package/package.json CHANGED
@@ -74,7 +74,7 @@
74
74
  "publishConfig": {
75
75
  "access": "public"
76
76
  },
77
- "version": "0.1.72",
77
+ "version": "0.1.74",
78
78
  "jest": {
79
79
  "coverageProvider": "v8",
80
80
  "testMatch": [