@orcabus/platform-cdk-constructs 1.1.2 → 1.2.1

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
@@ -9030,7 +9030,7 @@
9030
9030
  "kind": "interface",
9031
9031
  "locationInModule": {
9032
9032
  "filename": "deployment-stack-pipeline/pipeline.ts",
9033
- "line": 267
9033
+ "line": 275
9034
9034
  },
9035
9035
  "name": "CacheOptions",
9036
9036
  "namespace": "deploymentPipeline",
@@ -9045,7 +9045,7 @@
9045
9045
  "immutable": true,
9046
9046
  "locationInModule": {
9047
9047
  "filename": "deployment-stack-pipeline/pipeline.ts",
9048
- "line": 272
9048
+ "line": 280
9049
9049
  },
9050
9050
  "name": "namespace",
9051
9051
  "type": {
@@ -9063,7 +9063,7 @@
9063
9063
  "immutable": true,
9064
9064
  "locationInModule": {
9065
9065
  "filename": "deployment-stack-pipeline/pipeline.ts",
9066
- "line": 284
9066
+ "line": 292
9067
9067
  },
9068
9068
  "name": "paths",
9069
9069
  "optional": true,
@@ -9086,7 +9086,7 @@
9086
9086
  "immutable": true,
9087
9087
  "locationInModule": {
9088
9088
  "filename": "deployment-stack-pipeline/pipeline.ts",
9089
- "line": 276
9089
+ "line": 284
9090
9090
  },
9091
9091
  "name": "prefix",
9092
9092
  "optional": true,
@@ -9176,6 +9176,28 @@
9176
9176
  "kind": "map"
9177
9177
  }
9178
9178
  }
9179
+ },
9180
+ {
9181
+ "abstract": true,
9182
+ "docs": {
9183
+ "stability": "experimental",
9184
+ "summary": "The additional policy statements to add to the CodeBuildStep role."
9185
+ },
9186
+ "immutable": true,
9187
+ "locationInModule": {
9188
+ "filename": "deployment-stack-pipeline/pipeline.ts",
9189
+ "line": 133
9190
+ },
9191
+ "name": "rolePolicyStatements",
9192
+ "optional": true,
9193
+ "type": {
9194
+ "collection": {
9195
+ "elementtype": {
9196
+ "fqn": "aws-cdk-lib.aws_iam.PolicyStatement"
9197
+ },
9198
+ "kind": "array"
9199
+ }
9200
+ }
9179
9201
  }
9180
9202
  ],
9181
9203
  "symbolId": "deployment-stack-pipeline/pipeline:CodeBuildStepProps"
@@ -9302,7 +9324,7 @@
9302
9324
  },
9303
9325
  "locationInModule": {
9304
9326
  "filename": "deployment-stack-pipeline/pipeline.ts",
9305
- "line": 299
9327
+ "line": 307
9306
9328
  },
9307
9329
  "parameters": [
9308
9330
  {
@@ -9328,7 +9350,7 @@
9328
9350
  "kind": "class",
9329
9351
  "locationInModule": {
9330
9352
  "filename": "deployment-stack-pipeline/pipeline.ts",
9331
- "line": 293
9353
+ "line": 301
9332
9354
  },
9333
9355
  "name": "DeploymentStackPipeline",
9334
9356
  "namespace": "deploymentPipeline",
@@ -9341,7 +9363,7 @@
9341
9363
  "immutable": true,
9342
9364
  "locationInModule": {
9343
9365
  "filename": "deployment-stack-pipeline/pipeline.ts",
9344
- "line": 297
9366
+ "line": 305
9345
9367
  },
9346
9368
  "name": "pipeline",
9347
9369
  "type": {
@@ -9361,7 +9383,7 @@
9361
9383
  "kind": "interface",
9362
9384
  "locationInModule": {
9363
9385
  "filename": "deployment-stack-pipeline/pipeline.ts",
9364
- "line": 132
9386
+ "line": 136
9365
9387
  },
9366
9388
  "name": "DeploymentStackPipelineProps",
9367
9389
  "namespace": "deploymentPipeline",
@@ -9376,7 +9398,7 @@
9376
9398
  "immutable": true,
9377
9399
  "locationInModule": {
9378
9400
  "filename": "deployment-stack-pipeline/pipeline.ts",
9379
- "line": 178
9401
+ "line": 182
9380
9402
  },
9381
9403
  "name": "cdkSynthCmd",
9382
9404
  "type": {
@@ -9401,7 +9423,7 @@
9401
9423
  "immutable": true,
9402
9424
  "locationInModule": {
9403
9425
  "filename": "deployment-stack-pipeline/pipeline.ts",
9404
- "line": 139
9426
+ "line": 143
9405
9427
  },
9406
9428
  "name": "githubBranch",
9407
9429
  "type": {
@@ -9418,7 +9440,7 @@
9418
9440
  "immutable": true,
9419
9441
  "locationInModule": {
9420
9442
  "filename": "deployment-stack-pipeline/pipeline.ts",
9421
- "line": 143
9443
+ "line": 147
9422
9444
  },
9423
9445
  "name": "githubRepo",
9424
9446
  "type": {
@@ -9434,7 +9456,7 @@
9434
9456
  "immutable": true,
9435
9457
  "locationInModule": {
9436
9458
  "filename": "deployment-stack-pipeline/pipeline.ts",
9437
- "line": 160
9459
+ "line": 164
9438
9460
  },
9439
9461
  "name": "pipelineName",
9440
9462
  "type": {
@@ -9450,7 +9472,7 @@
9450
9472
  "immutable": true,
9451
9473
  "locationInModule": {
9452
9474
  "filename": "deployment-stack-pipeline/pipeline.ts",
9453
- "line": 147
9475
+ "line": 151
9454
9476
  },
9455
9477
  "name": "stack",
9456
9478
  "type": {
@@ -9466,7 +9488,7 @@
9466
9488
  "immutable": true,
9467
9489
  "locationInModule": {
9468
9490
  "filename": "deployment-stack-pipeline/pipeline.ts",
9469
- "line": 156
9491
+ "line": 160
9470
9492
  },
9471
9493
  "name": "stackConfig",
9472
9494
  "type": {
@@ -9483,7 +9505,7 @@
9483
9505
  "immutable": true,
9484
9506
  "locationInModule": {
9485
9507
  "filename": "deployment-stack-pipeline/pipeline.ts",
9486
- "line": 152
9508
+ "line": 156
9487
9509
  },
9488
9510
  "name": "stackName",
9489
9511
  "type": {
@@ -9500,7 +9522,7 @@
9500
9522
  "immutable": true,
9501
9523
  "locationInModule": {
9502
9524
  "filename": "deployment-stack-pipeline/pipeline.ts",
9503
- "line": 205
9525
+ "line": 213
9504
9526
  },
9505
9527
  "name": "unitAppTestConfig",
9506
9528
  "type": {
@@ -9518,7 +9540,7 @@
9518
9540
  "immutable": true,
9519
9541
  "locationInModule": {
9520
9542
  "filename": "deployment-stack-pipeline/pipeline.ts",
9521
- "line": 259
9543
+ "line": 267
9522
9544
  },
9523
9545
  "name": "cacheOptions",
9524
9546
  "optional": true,
@@ -9536,7 +9558,7 @@
9536
9558
  "immutable": true,
9537
9559
  "locationInModule": {
9538
9560
  "filename": "deployment-stack-pipeline/pipeline.ts",
9539
- "line": 184
9561
+ "line": 192
9540
9562
  },
9541
9563
  "name": "cdkOut",
9542
9564
  "optional": true,
@@ -9554,7 +9576,7 @@
9554
9576
  "immutable": true,
9555
9577
  "locationInModule": {
9556
9578
  "filename": "deployment-stack-pipeline/pipeline.ts",
9557
- "line": 251
9579
+ "line": 259
9558
9580
  },
9559
9581
  "name": "driftCheckConfig",
9560
9582
  "optional": true,
@@ -9572,7 +9594,7 @@
9572
9594
  "immutable": true,
9573
9595
  "locationInModule": {
9574
9596
  "filename": "deployment-stack-pipeline/pipeline.ts",
9575
- "line": 222
9597
+ "line": 230
9576
9598
  },
9577
9599
  "name": "enableSlackNotification",
9578
9600
  "optional": true,
@@ -9590,7 +9612,7 @@
9590
9612
  "immutable": true,
9591
9613
  "locationInModule": {
9592
9614
  "filename": "deployment-stack-pipeline/pipeline.ts",
9593
- "line": 174
9615
+ "line": 178
9594
9616
  },
9595
9617
  "name": "excludedFilePaths",
9596
9618
  "optional": true,
@@ -9613,7 +9635,7 @@
9613
9635
  "immutable": true,
9614
9636
  "locationInModule": {
9615
9637
  "filename": "deployment-stack-pipeline/pipeline.ts",
9616
- "line": 167
9638
+ "line": 171
9617
9639
  },
9618
9640
  "name": "includedFilePaths",
9619
9641
  "optional": true,
@@ -9637,7 +9659,7 @@
9637
9659
  "immutable": true,
9638
9660
  "locationInModule": {
9639
9661
  "filename": "deployment-stack-pipeline/pipeline.ts",
9640
- "line": 230
9662
+ "line": 238
9641
9663
  },
9642
9664
  "name": "notificationEvents",
9643
9665
  "optional": true,
@@ -9661,7 +9683,7 @@
9661
9683
  "immutable": true,
9662
9684
  "locationInModule": {
9663
9685
  "filename": "deployment-stack-pipeline/pipeline.ts",
9664
- "line": 238
9686
+ "line": 246
9665
9687
  },
9666
9688
  "name": "reuseExistingArtifactBucket",
9667
9689
  "optional": true,
@@ -9678,7 +9700,7 @@
9678
9700
  "immutable": true,
9679
9701
  "locationInModule": {
9680
9702
  "filename": "deployment-stack-pipeline/pipeline.ts",
9681
- "line": 217
9703
+ "line": 225
9682
9704
  },
9683
9705
  "name": "stageEnv",
9684
9706
  "optional": true,
@@ -9697,7 +9719,7 @@
9697
9719
  "immutable": true,
9698
9720
  "locationInModule": {
9699
9721
  "filename": "deployment-stack-pipeline/pipeline.ts",
9700
- "line": 246
9722
+ "line": 254
9701
9723
  },
9702
9724
  "name": "stripAssemblyAssets",
9703
9725
  "optional": true,
@@ -9716,7 +9738,7 @@
9716
9738
  "immutable": true,
9717
9739
  "locationInModule": {
9718
9740
  "filename": "deployment-stack-pipeline/pipeline.ts",
9719
- "line": 191
9741
+ "line": 199
9720
9742
  },
9721
9743
  "name": "synthBuildSpec",
9722
9744
  "optional": true,
@@ -9739,7 +9761,7 @@
9739
9761
  "immutable": true,
9740
9762
  "locationInModule": {
9741
9763
  "filename": "deployment-stack-pipeline/pipeline.ts",
9742
- "line": 197
9764
+ "line": 205
9743
9765
  },
9744
9766
  "name": "synthInstallCommands",
9745
9767
  "optional": true,
@@ -9752,6 +9774,28 @@
9752
9774
  }
9753
9775
  }
9754
9776
  },
9777
+ {
9778
+ "abstract": true,
9779
+ "docs": {
9780
+ "stability": "experimental",
9781
+ "summary": "The additional policy statements to add to the CodeBuildStep role during the synth step."
9782
+ },
9783
+ "immutable": true,
9784
+ "locationInModule": {
9785
+ "filename": "deployment-stack-pipeline/pipeline.ts",
9786
+ "line": 186
9787
+ },
9788
+ "name": "synthRolePolicyStatements",
9789
+ "optional": true,
9790
+ "type": {
9791
+ "collection": {
9792
+ "elementtype": {
9793
+ "fqn": "aws-cdk-lib.aws_iam.PolicyStatement"
9794
+ },
9795
+ "kind": "array"
9796
+ }
9797
+ }
9798
+ },
9755
9799
  {
9756
9800
  "abstract": true,
9757
9801
  "docs": {
@@ -9762,7 +9806,7 @@
9762
9806
  "immutable": true,
9763
9807
  "locationInModule": {
9764
9808
  "filename": "deployment-stack-pipeline/pipeline.ts",
9765
- "line": 213
9809
+ "line": 221
9766
9810
  },
9767
9811
  "name": "unitIacTestConfig",
9768
9812
  "optional": true,
@@ -9837,7 +9881,7 @@
9837
9881
  "kind": "interface",
9838
9882
  "locationInModule": {
9839
9883
  "filename": "deployment-stack-pipeline/pipeline.ts",
9840
- "line": 718
9884
+ "line": 732
9841
9885
  },
9842
9886
  "name": "FailOnDriftBuildStepProps",
9843
9887
  "namespace": "deploymentPipeline",
@@ -9852,7 +9896,7 @@
9852
9896
  "immutable": true,
9853
9897
  "locationInModule": {
9854
9898
  "filename": "deployment-stack-pipeline/pipeline.ts",
9855
- "line": 723
9899
+ "line": 737
9856
9900
  },
9857
9901
  "name": "accountEnv",
9858
9902
  "type": {
@@ -9869,7 +9913,7 @@
9869
9913
  "immutable": true,
9870
9914
  "locationInModule": {
9871
9915
  "filename": "deployment-stack-pipeline/pipeline.ts",
9872
- "line": 737
9916
+ "line": 751
9873
9917
  },
9874
9918
  "name": "cdkCommand",
9875
9919
  "type": {
@@ -9886,7 +9930,7 @@
9886
9930
  "immutable": true,
9887
9931
  "locationInModule": {
9888
9932
  "filename": "deployment-stack-pipeline/pipeline.ts",
9889
- "line": 731
9933
+ "line": 745
9890
9934
  },
9891
9935
  "name": "stackId",
9892
9936
  "type": {
@@ -9904,7 +9948,7 @@
9904
9948
  "immutable": true,
9905
9949
  "locationInModule": {
9906
9950
  "filename": "deployment-stack-pipeline/pipeline.ts",
9907
- "line": 745
9951
+ "line": 759
9908
9952
  },
9909
9953
  "name": "installCommand",
9910
9954
  "optional": true,
@@ -11976,6 +12020,6 @@
11976
12020
  "symbolId": "shared-config/slack:SlackAlerts"
11977
12021
  }
11978
12022
  },
11979
- "version": "1.1.2",
11980
- "fingerprint": "bddQjH+Xmwooe8fNWWyMa/sT7YjCH08RPKfsTWfo26I="
12023
+ "version": "1.2.1",
12024
+ "fingerprint": "kqkkQiut6N90bShJit0OGT8f/zL7veOA3AD3NjB1hq0="
11981
12025
  }
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
15
15
  const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
16
16
  const config_1 = require("./config");
17
17
  class OrcaBusApiGateway extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.1.2" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "1.2.1" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
13
13
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
14
14
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
15
15
  class CrossDeploymentArtifactBucket extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.1.2" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "1.2.1" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -1,6 +1,7 @@
1
1
  import { Construct } from "constructs";
2
2
  import { Environment } from "aws-cdk-lib";
3
3
  import { Pipeline, PipelineNotificationEvents } from "aws-cdk-lib/aws-codepipeline";
4
+ import { PolicyStatement } from "aws-cdk-lib/aws-iam";
4
5
  /**
5
6
  * The default partial build spec for code build steps in the pipeline.
6
7
  */
@@ -78,6 +79,10 @@ export interface CodeBuildStepProps {
78
79
  * The install commands to run before the main command.
79
80
  */
80
81
  readonly installCommands?: string[];
82
+ /**
83
+ * The additional policy statements to add to the CodeBuildStep role.
84
+ */
85
+ readonly rolePolicyStatements?: PolicyStatement[];
81
86
  }
82
87
  export interface DeploymentStackPipelineProps {
83
88
  /**
@@ -126,6 +131,10 @@ export interface DeploymentStackPipelineProps {
126
131
  * The command to run to synth the cdk stack which also installing the cdk dependencies. e.g. ["pnpm install --frozen-lockfile", "pnpm cdk synth"]
127
132
  */
128
133
  readonly cdkSynthCmd: string[];
134
+ /**
135
+ * The additional policy statements to add to the CodeBuildStep role during the synth step.
136
+ */
137
+ readonly synthRolePolicyStatements?: PolicyStatement[];
129
138
  /**
130
139
  * The location where the cdk output will be stored.
131
140
  *
@@ -45,7 +45,7 @@ exports.DEFAULT_INSTALL_COMMANDS = [
45
45
  * before using this construct.
46
46
  */
47
47
  class DeploymentStackPipeline extends constructs_1.Construct {
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.1.2" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "1.2.1" };
49
49
  /**
50
50
  * The code pipeline construct that is created.
51
51
  */
@@ -116,7 +116,7 @@ class DeploymentStackPipeline extends constructs_1.Construct {
116
116
  }
117
117
  };
118
118
  // Add unit test for IaC at the root of the
119
- const { installCommands: unitIacTestInstall = exports.DEFAULT_INSTALL_COMMANDS, command: unitIacTestCommand = ["pnpm test"], partialBuildSpec: unitIacPartialBuildSpec = structuredClone(exports.DEFAULT_PARTIAL_BUILD_SPEC), } = props.unitIacTestConfig || {};
119
+ const { installCommands: unitIacTestInstall = exports.DEFAULT_INSTALL_COMMANDS, command: unitIacTestCommand = ["pnpm test"], partialBuildSpec: unitIacPartialBuildSpec = structuredClone(exports.DEFAULT_PARTIAL_BUILD_SPEC), rolePolicyStatements: unitIacRolePolicyStatements, } = props.unitIacTestConfig || {};
120
120
  setCachePaths(unitIacPartialBuildSpec);
121
121
  const unitIacTest = new pipelines_1.CodeBuildStep("UnitIacTest", {
122
122
  installCommands: unitIacTestInstall,
@@ -136,9 +136,10 @@ class DeploymentStackPipeline extends constructs_1.Construct {
136
136
  ? aws_codebuild_1.BuildSpec.fromObject(unitIacPartialBuildSpec)
137
137
  : undefined,
138
138
  cache: cacheBucket ? aws_codebuild_1.Cache.bucket(cacheBucket, cacheOptions) : undefined,
139
+ rolePolicyStatements: unitIacRolePolicyStatements,
139
140
  });
140
141
  // Adding unit test for the main app
141
- const { command: unitAppTestCommand, installCommands: unitAppTestInstall = exports.DEFAULT_INSTALL_COMMANDS, partialBuildSpec: unitAppPartialBuildSpec = structuredClone(exports.DEFAULT_PARTIAL_BUILD_SPEC), } = props.unitAppTestConfig;
142
+ const { command: unitAppTestCommand, installCommands: unitAppTestInstall = exports.DEFAULT_INSTALL_COMMANDS, partialBuildSpec: unitAppPartialBuildSpec = structuredClone(exports.DEFAULT_PARTIAL_BUILD_SPEC), rolePolicyStatements: unitAppRolePolicyStatements, } = props.unitAppTestConfig;
142
143
  setCachePaths(unitAppPartialBuildSpec);
143
144
  const unitAppTest = new pipelines_1.CodeBuildStep("UnitAppTest", {
144
145
  commands: unitAppTestCommand,
@@ -158,8 +159,9 @@ class DeploymentStackPipeline extends constructs_1.Construct {
158
159
  ? aws_codebuild_1.BuildSpec.fromObject(unitAppPartialBuildSpec)
159
160
  : undefined,
160
161
  cache: cacheBucket ? aws_codebuild_1.Cache.bucket(cacheBucket, cacheOptions) : undefined,
162
+ rolePolicyStatements: unitAppRolePolicyStatements,
161
163
  });
162
- const { synthInstallCommands = exports.DEFAULT_INSTALL_COMMANDS, synthBuildSpec = structuredClone(exports.DEFAULT_PARTIAL_BUILD_SPEC), } = props;
164
+ const { synthInstallCommands = exports.DEFAULT_INSTALL_COMMANDS, synthBuildSpec = structuredClone(exports.DEFAULT_PARTIAL_BUILD_SPEC), synthRolePolicyStatements, } = props;
163
165
  setCachePaths(synthBuildSpec);
164
166
  const synthStep = new pipelines_1.CodeBuildStep("CdkSynth", {
165
167
  installCommands: synthInstallCommands,
@@ -168,6 +170,7 @@ class DeploymentStackPipeline extends constructs_1.Construct {
168
170
  primaryOutputDirectory: props.cdkOut || "cdk.out",
169
171
  partialBuildSpec: aws_codebuild_1.BuildSpec.fromObject(synthBuildSpec),
170
172
  cache: cacheBucket ? aws_codebuild_1.Cache.bucket(cacheBucket, cacheOptions) : undefined,
173
+ rolePolicyStatements: synthRolePolicyStatements,
171
174
  });
172
175
  synthStep.addStepDependency(unitIacTest);
173
176
  synthStep.addStepDependency(unitAppTest);
@@ -364,4 +367,4 @@ class FailOnDriftBuildStep extends pipelines_1.CodeBuildStep {
364
367
  });
365
368
  }
366
369
  }
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFNbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFNc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUc4QztBQUM5QyxpREFBc0Q7QUFDdEQsaURBQXNEO0FBRXREOztHQUVHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRztJQUN4QyxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUU7WUFDUCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsS0FBSztDQUNmLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsc0NBQXNDO0lBQ3RDLGlCQUFpQjtJQUNqQixTQUFTO0lBQ1Qsb0JBQW9CO0lBQ3BCLGlEQUFpRDtDQUNsRCxDQUFDO0FBOE5GOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUzs7SUFDcEQ7O09BRUc7SUFDTSxRQUFRLENBQVc7SUFFNUIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUN6RCxJQUFJLEVBQ0oscUJBQXFCLENBQ3RCLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQzlDLFdBQVcsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUM3QixLQUFLLENBQUMsWUFBWSxFQUNsQjtZQUNFLGFBQWEsRUFBRSxXQUFXO1lB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QU07YUFDM0I7WUFDRCxHQUFHLGFBQWE7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBZ0NELE1BQU0sb0JBQXFCLFNBQVEseUJBQWE7SUFDOUMsWUFDRSxFQUFVLEVBQ1YsRUFDRSxVQUFVLEVBQ1YsT0FBTyxFQUNQLFVBQVUsRUFDVixjQUFjLEdBQ1k7UUFFNUIsTUFBTSxVQUFVLEdBQUcsY0FBYztZQUMvQixDQUFDLENBQUMsY0FBYztZQUNoQixDQUFDLENBQUMsZ0NBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFFVixpQ0FBaUMsVUFBVSxDQUFDLE9BQU8sbUNBQW1DLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRztnQkFDaEksNEJBQTRCO2dCQUM1QixtUUFBbVE7Z0JBQ25RLGtFQUFrRTtnQkFDbEUsOEJBQThCLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xELDZCQUE2QjtnQkFFN0IsTUFBTSxVQUFVLG1CQUFtQixPQUFPLHVCQUF1QixPQUFPLG1DQUFtQyxVQUFVLFdBQVcsT0FBTywrRUFBK0U7YUFDdk47WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsU0FBUyxFQUFFO3dCQUNULGdCQUFnQixVQUFVLENBQUMsT0FBTyxtQ0FBbUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO3FCQUMvRztpQkFDRixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRHVyYXRpb24sIEVudmlyb25tZW50LCBTdGFjaywgU3RhZ2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldENhY2hlT3B0aW9ucyxcbiAgQnVpbGRTcGVjLFxuICBDYWNoZSxcbiAgQ29tcHV0ZVR5cGUsXG4gIExpbnV4QXJtQnVpbGRJbWFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQge1xuICBDb2RlQnVpbGRTdGVwLFxuICBDb2RlUGlwZWxpbmUsXG4gIENvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlSZXN1bHQsXG4gIENvZGVQaXBlbGluZVNvdXJjZSxcbiAgSUNvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnksXG4gIFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICBTdGVwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvcGlwZWxpbmVzXCI7XG5pbXBvcnQge1xuICBQaXBlbGluZSxcbiAgQ2ZuUGlwZWxpbmUsXG4gIFBpcGVsaW5lVHlwZSxcbiAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsXG4gIElTdGFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmVcIjtcbmltcG9ydCB7XG4gIEJFVEFfRU5WSVJPTk1FTlQsXG4gIEdBTU1BX0VOVklST05NRU5ULFxuICBQUk9EX0VOVklST05NRU5ULFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IFNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNoYXRib3RcIjtcbmltcG9ydCB7IERldGFpbFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVzdGFybm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHsgQ3Jvc3NEZXBsb3ltZW50QXJ0aWZhY3RCdWNrZXQgfSBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbmltcG9ydCB7XG4gIE1hbnVhbEFwcHJvdmFsQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZUJ1aWxkQ2FjaGVCdWNrZXQgfSBmcm9tIFwiLi9jYWNoZS1idWNrZXRcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwYXJ0aWFsIGJ1aWxkIHNwZWMgZm9yIGNvZGUgYnVpbGQgc3RlcHMgaW4gdGhlIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQVJUSUFMX0JVSUxEX1NQRUMgPSB7XG4gIHBoYXNlczoge1xuICAgIGluc3RhbGw6IHtcbiAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgIG5vZGVqczogXCIyMi54XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIHZlcnNpb246IFwiMC4yXCIsXG59O1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGluc3RhbGwgY29tbWFuZHMgZm9yIENvZGVCdWlsZCBzdGVwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5TVEFMTF9DT01NQU5EUyA9IFtcbiAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgXCJjb3JlcGFjayBlbmFibGVcIixcbiAgXCJub2RlIC12XCIsXG4gIFwiY29yZXBhY2sgLS12ZXJzaW9uXCIsXG4gIFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIixcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VFbnZQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBiZXRhIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGdhbW1hIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBwcm9kIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBFbnZpcm9ubWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0NvbmZpZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYmV0YSAoZGV2KSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2FtbWEgKHN0Zykgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwcm9kIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHByZS1kZXBsb3ltZW50IGRyaWZ0IGRldGVjdGlvbiBjaGVja3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRDaGVja0NvbmZpZyB7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogRGVmYXVsdDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTdGVwUHJvcHMge1xuICAvKipcbiAgICogdGhlIG1haW4gY29tbWFuZCBmb3IgdGhlIGJ1aWxkIHN0ZXAgdG8gcnVuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBhcnRpYWwgYnVpbGRzcGVjIGZvciB0aGlzIENvZGVCdWlsZFN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpYWxCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGluc3RhbGwgY29tbWFuZHMgdG8gcnVuIGJlZm9yZSB0aGUgbWFpbiBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBJTkNMVURFRCBhcyBjcml0ZXJpYSB0aGF0IHN0YXJ0cyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwYXR0ZXJucyBvZiBHaXQgcmVwb3NpdG9yeSBmaWxlIHBhdGhzIHRoYXQsIHdoZW4gYSBjb21taXQgaXMgcHVzaGVkLCBhcmUgdG8gYmUgRVhDTFVERUQgZnJvbSBzdGFydGluZyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlXCIsIFwicG5wbSBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZVxuICAgKiBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9QQVJUSUFMX0JVSUxEX1NQRUNcbiAgICovXG4gIHJlYWRvbmx5IHN5bnRoQnVpbGRTcGVjPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsIGNvbW1hbmRzIGZvciB0aGUgc3ludGggc3RlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9JTlNUQUxMX0NPTU1BTkRTXG4gICAqL1xuICByZWFkb25seSBzeW50aEluc3RhbGxDb21tYW5kcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBjb2RlLlxuICAgKiBUaGlzIHN0ZXAgd2lsbCBleGVjdXRlIGluIHBhcmFsbGVsIHdpdGgge0BsaW5rIHVuaXRJYWNUZXN0Q29uZmlnfSBhcyBwYXJ0IG9mIHRoZSBzeW50aCBzdGFnZSBkZXBlbmRlbmNpZXMuXG4gICAqIEJvdGggbXVzdCBzdWNjZWVkIGJlZm9yZSB0aGUgc3ludGggc3RlcCBydW5zLlxuICAgKlxuICAgKiBlbnN1cmUgeW91ciBjb21tYW5kIGluY2x1ZGVzICdjZCcgdG8gdGhlIG1haW4gYXBwIGRpcmVjdG9yeSwgYXMgdGhlIGJ1aWxkIGNvbnRleHQgc3RhcnRzIGZyb20gdGhlIHJvb3QuXG4gICAqL1xuICByZWFkb25seSB1bml0QXBwVGVzdENvbmZpZzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciBJbmZyYXN0cnVjdHVyZS1hcy1Db2RlIChJYUMpIGF0IHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdEFwcFRlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGNvbW1hbmQgd2lsbCBiZSBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvOiBbXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIiwgXCJjb3JlcGFjayBlbmFibGVcIiwgXCJtYWtlIGluc3RhbGxcIiwgXCJtYWtlIHRlc3RcIl1cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRJYWNUZXN0Q29uZmlnPzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGxvb2sgdXAgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhc3NldHMgZnJvbSB0aGUgQ0RLIGFzc2VtYmx5IHByZS1kZXBsb3ltZW50IHRvIHByZXZlbnQgaGl0dGluZyBDb2RlUGlwZWxpbmUncyAyNTYgTUIgYXJ0aWZhY3Qgc2l6ZSBsaW1pdC5cbiAgICogVXNlZnVsIHdoZW4gQ0RLIGFzc2V0cyAoTGFtYmRhIGNvZGUsIERvY2tlciBpbWFnZXMsIGV0Yy4pIGFyZSBsYXJnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwQXNzZW1ibHlBc3NldHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZHJpZnQgZGV0ZWN0aW9uIGNoZWNrcyBiZWZvcmUgZGVwbG95bWVudC5cbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgcGlwZWxpbmUgd2lsbCBjaGVjayBmb3IgQ2xvdWRGb3JtYXRpb24gZHJpZnQgYW5kIGZhaWwgaWYgZGV0ZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBkcmlmdENoZWNrQ29uZmlnPzogRHJpZnRDaGVja0NvbmZpZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgYGNhY2hlYCBvcHRpb25zIGZvciBlYWNoIGBDb2RlQnVpbGRTdGVwYC4gVGhpcyB3aWxsIGFsbG93IENvZGVCdWlsZCB0byB1c2VcbiAgICogUzMgY2FjaGluZyB3aXRoIHRoZSBgQ09ERUJVSUxEX0NBQ0hFX0JVQ0tFVGAgYnVja2V0LlxuICAgKlxuICAgKiBUaGUgcGFydGlhbCBidWlsZHNwZWMgbXVzdCBzdGlsbCBjb250YWluIGRlZmluaXRpb25zIGZvciBjYWNoZSBwYXRocyBhbmQga2V5cyBpZiB1c2VkLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2RlYnVpbGQvbGF0ZXN0L3VzZXJndWlkZS9idWlsZC1zcGVjLXJlZi5odG1sI2J1aWxkLXNwZWMuY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlT3B0aW9ucz86IENhY2hlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBTMyBjYWNoZSB0byB1c2UgYWNyb3NzIGJ1aWxkIHN0ZXBzLiBJZiBzcGVjaWZpZWQsIHRoZSBidWNrZXQgdW5kZXJcbiAqIGBDT0RFQlVJTERfQ0FDSEVfQlVDS0VUYCB3aWxsIGJlIHVzZWQgZm9yIGNhY2hpbmcuIFRoaXMgYnVja2V0IGlzIG1hbmFnZWQgYnkgdGhlIHNoYXJlZC1yZXNvdXJjZXNcbiAqIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIG5hbWVzcGFjZSBmb3IgdGhlIGNhY2hlLiBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBjYWNoZSBidWNrZXQgaXMgc2hhcmVkIGFjcm9zc1xuICAgKiBhbGwgcHJvamVjdHMgc28gYSBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNhY2hlLiBVc2UgdGhlIHByb2plY3QgbmFtZSwgZS5nLiBgZmlsZW1hbmFnZXJgLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IGZvciB0aGUgY2FjaGUgY29udHJvbGxpbmcgdGhlIHByZWZpeCBvbiBTMy4gSWYgbGVmdCB1bnNwZWNpZmllZCwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRocyB0byBjYWNoZS4gVGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeSBpZiB1bnNwZWNpZmllZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHRoZSBjYWNoZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGJ1aWxkc3BlYywgdGhhdCBjb25maWcgd2lsbCB0YWtlIHByZWNlZGVuY2UuIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZFxuICAgKiBhcyBhIGNvbnZlbmllbmNlIHRvIHNwZWNpZnkgcGF0aHMsIGFuZCB3aWxsIG5vdCBvdmVycmlkZSB0aGUgYnVpbGRzcGVjIGNhY2hlIGNvbmZpZy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29kZWJ1aWxkL2xhdGVzdC91c2VyZ3VpZGUvYnVpbGQtc3BlYy1yZWYuaHRtbCNidWlsZC1zcGVjLmNhY2hlXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgICAgLy8gZW5hYmxlIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZVxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU3MDE3NzYvdXBkYXRlcGlwZWxpbmUtc3RhZ2UtaW4tY2RrLXBpcGVsaW5lLWlzLWNhbmNlbGxlZFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBsZXQgY2FjaGVCdWNrZXQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNhY2hlT3B0aW9uczogQnVja2V0Q2FjaGVPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5jYWNoZU9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVCdWNrZXQgPSBDb2RlQnVpbGRDYWNoZUJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmNhY2hlQnVja2V0O1xuICAgICAgY2FjaGVPcHRpb25zID0ge1xuICAgICAgICBjYWNoZU5hbWVzcGFjZTogcHJvcHMuY2FjaGVPcHRpb25zLm5hbWVzcGFjZSxcbiAgICAgICAgcHJlZml4OiBwcm9wcy5jYWNoZU9wdGlvbnMucHJlZml4ID8/IHByb3BzLmNhY2hlT3B0aW9ucy5uYW1lc3BhY2UsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBzZXRDYWNoZVBhdGhzID0gKGJ1aWxkU3BlYzogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgaWYgKGJ1aWxkU3BlYyAhPT0gdW5kZWZpbmVkICYmICEoXCJjYWNoZVwiIGluIGJ1aWxkU3BlYykpIHtcbiAgICAgICAgYnVpbGRTcGVjW1wiY2FjaGVcIl0gPSB7XG4gICAgICAgICAgcGF0aHM6IHByb3BzLmNhY2hlT3B0aW9ucz8ucGF0aHMgPz8gW1wibm9kZV9tb2R1bGVzLyoqLypcIl0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEFkZCB1bml0IHRlc3QgZm9yIElhQyBhdCB0aGUgcm9vdCBvZiB0aGVcbiAgICBjb25zdCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHVuaXRJYWNUZXN0SW5zdGFsbCA9IERFRkFVTFRfSU5TVEFMTF9DT01NQU5EUyxcbiAgICAgIGNvbW1hbmQ6IHVuaXRJYWNUZXN0Q29tbWFuZCA9IFtcInBucG0gdGVzdFwiXSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjID0gc3RydWN0dXJlZENsb25lKFxuICAgICAgICBERUZBVUxUX1BBUlRJQUxfQlVJTERfU1BFQyxcbiAgICAgICksXG4gICAgfSA9IHByb3BzLnVuaXRJYWNUZXN0Q29uZmlnIHx8IHt9O1xuICAgIHNldENhY2hlUGF0aHModW5pdElhY1BhcnRpYWxCdWlsZFNwZWMpO1xuXG4gICAgY29uc3QgdW5pdElhY1Rlc3QgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlVuaXRJYWNUZXN0XCIsIHtcbiAgICAgIGluc3RhbGxDb21tYW5kczogdW5pdElhY1Rlc3RJbnN0YWxsLFxuICAgICAgY29tbWFuZHM6IHVuaXRJYWNUZXN0Q29tbWFuZCxcbiAgICAgIGlucHV0OiBzb3VyY2VGaWxlLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBwcml2aWxlZ2VkOiB0cnVlLFxuICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFSR0UsXG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgTk9ERV9PUFRJT05TOiB7XG4gICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0SWFjUGFydGlhbEJ1aWxkU3BlY1xuICAgICAgICA/IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGNhY2hlOiBjYWNoZUJ1Y2tldCA/IENhY2hlLmJ1Y2tldChjYWNoZUJ1Y2tldCwgY2FjaGVPcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIEFkZGluZyB1bml0IHRlc3QgZm9yIHRoZSBtYWluIGFwcFxuICAgIGNvbnN0IHtcbiAgICAgIGNvbW1hbmQ6IHVuaXRBcHBUZXN0Q29tbWFuZCxcbiAgICAgIGluc3RhbGxDb21tYW5kczogdW5pdEFwcFRlc3RJbnN0YWxsID0gREVGQVVMVF9JTlNUQUxMX0NPTU1BTkRTLFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMgPSBzdHJ1Y3R1cmVkQ2xvbmUoXG4gICAgICAgIERFRkFVTFRfUEFSVElBTF9CVUlMRF9TUEVDLFxuICAgICAgKSxcbiAgICB9ID0gcHJvcHMudW5pdEFwcFRlc3RDb25maWc7XG4gICAgc2V0Q2FjaGVQYXRocyh1bml0QXBwUGFydGlhbEJ1aWxkU3BlYyk7XG5cbiAgICBjb25zdCB1bml0QXBwVGVzdCA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiVW5pdEFwcFRlc3RcIiwge1xuICAgICAgY29tbWFuZHM6IHVuaXRBcHBUZXN0Q29tbWFuZCxcbiAgICAgIGluc3RhbGxDb21tYW5kczogdW5pdEFwcFRlc3RJbnN0YWxsLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRBcHBQYXJ0aWFsQnVpbGRTcGVjXG4gICAgICAgID8gQnVpbGRTcGVjLmZyb21PYmplY3QodW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgY2FjaGU6IGNhY2hlQnVja2V0ID8gQ2FjaGUuYnVja2V0KGNhY2hlQnVja2V0LCBjYWNoZU9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgc3ludGhJbnN0YWxsQ29tbWFuZHMgPSBERUZBVUxUX0lOU1RBTExfQ09NTUFORFMsXG4gICAgICBzeW50aEJ1aWxkU3BlYyA9IHN0cnVjdHVyZWRDbG9uZShERUZBVUxUX1BBUlRJQUxfQlVJTERfU1BFQyksXG4gICAgfSA9IHByb3BzO1xuICAgIHNldENhY2hlUGF0aHMoc3ludGhCdWlsZFNwZWMpO1xuXG4gICAgY29uc3Qgc3ludGhTdGVwID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJDZGtTeW50aFwiLCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHN5bnRoSW5zdGFsbENvbW1hbmRzLFxuICAgICAgY29tbWFuZHM6IHByb3BzLmNka1N5bnRoQ21kLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwcm9wcy5jZGtPdXQgfHwgXCJjZGsub3V0XCIsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBCdWlsZFNwZWMuZnJvbU9iamVjdChzeW50aEJ1aWxkU3BlYyksXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRJYWNUZXN0KTtcbiAgICBzeW50aFN0ZXAuYWRkU3RlcERlcGVuZGVuY3kodW5pdEFwcFRlc3QpO1xuXG4gICAgY29uc3QgY2RrUGlwZWxpbmUgPSBuZXcgQ29kZVBpcGVsaW5lKHRoaXMsIFwiQ0RLQ29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIHN5bnRoOiBzeW50aFN0ZXAsXG4gICAgICBzZWxmTXV0YXRpb246IHRydWUsXG4gICAgICBjb2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QXJtQnVpbGRJbWFnZS5BTUFaT05fTElOVVhfMl9TVEFOREFSRF8zXzAsXG4gICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgICB2YWx1ZTogXCItLW1heC1vbGQtc3BhY2Utc2l6ZT04MTkyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFN0YWdlRW52OiBTdGFnZUVudlByb3BzID0ge1xuICAgICAgYmV0YTogQkVUQV9FTlZJUk9OTUVOVCxcbiAgICAgIGdhbW1hOiBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgICAgIHByb2Q6IFBST0RfRU5WSVJPTk1FTlQsXG4gICAgfTtcbiAgICBjb25zdCBzdGFnZUVudiA9IHByb3BzLnN0YWdlRW52IHx8IGRlZmF1bHRTdGFnZUVudjtcblxuICAgIC8vIEFmdGVyIGFzc2V0cyBhcmUgcHVibGlzaGVkLCB0aGV5IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGFzc2VtYmx5IGRpcmVjdG9yeVxuICAgIC8vIHRvIGhlbHAgcHJldmVudCBoaXR0aW5nIHRoZSBDb2RlUGlwZWxpbmUgYXJ0aWZhY3QgbGltaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgbGV0IHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5zdHJpcEFzc2VtYmx5QXNzZXRzKSB7XG4gICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiU3RyaXBBc3NldHNGcm9tQXNzZW1ibHlcIiwge1xuICAgICAgICBpbnB1dDogY2RrUGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgJ1MzX1BBVEg9JHtDT0RFQlVJTERfU09VUkNFX1ZFUlNJT04jXCJhcm46YXdzOnMzOjo6XCJ9JyxcbiAgICAgICAgICBcIlpJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpXCIsXG4gICAgICAgICAgXCJlY2hvICRTM19QQVRIXCIsXG4gICAgICAgICAgXCJlY2hvICRaSVBfQVJDSElWRVwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcInJtIC1yZnYgYXNzZXQuKlwiLFxuICAgICAgICAgIFwiemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqXCIsXG4gICAgICAgICAgXCJsc1wiLFxuICAgICAgICAgIFwiYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIXCIsXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY2RrUGlwZWxpbmUuYWRkV2F2ZShcIkJlZm9yZVN0YWdlRGVwbG95bWVudFwiLCB7XG4gICAgICAgIHByZTogW3N0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBmdW5jdGlvbiB0byBnZXQgU3RhY2tJZCBmb3IgZHJpZnQgY2hlY2tcbiAgICBjb25zdCByb290U3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbnN0cnVjdElkID0gdGhpcy5ub2RlLmlkO1xuICAgIGNvbnN0IGdldFN0YWNrSWQgPSAoZW52TmFtZTogc3RyaW5nKSA9PlxuICAgICAgYCR7cm9vdFN0YWNrTmFtZX0vJHtjb25zdHJ1Y3RJZH0vJHtlbnZOYW1lfS8ke3Byb3BzLnN0YWNrTmFtZX1gO1xuXG4gICAgLy8gRHJpZnQgY2hlY2sgY29uZmlnXG4gICAgY29uc3QgaXNEcmlmdENoZWNrU3RlcCA9ICEhcHJvcHMuZHJpZnRDaGVja0NvbmZpZztcbiAgICBjb25zdCBjZGtJbnN0YWxsQ21kID0gcHJvcHMuZHJpZnRDaGVja0NvbmZpZz8uaW5zdGFsbENvbW1hbmQ7XG4gICAgY29uc3QgY2RrUnVuQ21kID0gcHJvcHMuZHJpZnRDaGVja0NvbmZpZz8uY2RrQ29tbWFuZCA/PyBgYDtcblxuICAgIGNvbnN0IGJldGFFbnZOYW1lID0gXCJPcmNhQnVzQmV0YVwiO1xuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYmV0YUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmJldGEsXG4gICAgICAgIHByb3BzLnN0YWNrTmFtZSxcbiAgICAgICAgcHJvcHMuc3RhY2ssXG4gICAgICAgIHByb3BzLnN0YWNrQ29uZmlnLmJldGEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEJldGFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuYmV0YSxcbiAgICAgICAgICAgICAgICBzdGFja0lkOiBnZXRTdGFja0lkKGJldGFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogR0FNTUFcbiAgICAgKi9cbiAgICBjb25zdCBnYW1tYUVudk5hbWUgPSBcIk9yY2FCdXNHYW1tYVwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBnYW1tYUVudk5hbWUsXG4gICAgICAgIHN0YWdlRW52LmdhbW1hLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5nYW1tYSxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsR2FtbWFDaGVja1wiLCB7XG4gICAgICAgICAgICAgICAgYWNjb3VudEVudjogc3RhZ2VFbnYuZ2FtbWEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChnYW1tYUVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Q6IFtcbiAgICAgICAgICBuZXcgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwKFwiUHJvbW90ZVRvUHJvZFwiLCB7XG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBcIlByb21vdGVUb1Byb2RcIixcbiAgICAgICAgICAgIC8vIEN1c3RvbSBzdGVwcyBieXBhc3Mgc3RhZ2UgcHJlL3Bvc3Qgb3JkZXJpbmcsIHNvIHJ1bk9yZGVyIG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgICAgICAvLyBTZXQgdG8gNSB0byBlbnN1cmUgdGhpcyBydW5zIGFmdGVyIGFsbCBPcmNhQnVzR2FtbWEgc3RhZ2Ugc3RlcHMgY29tcGxldGUuXG4gICAgICAgICAgICAvLyAoR2FtbWEgZGVwbG95bWVudCB0eXBpY2FsbHkgdXNlcyAyIHN0ZXBzLCBzbyA1IHByb3ZpZGVzIGFkZXF1YXRlIGJ1ZmZlcilcbiAgICAgICAgICAgIHJ1bk9yZGVyOiA1LFxuICAgICAgICAgICAgLy8gNjAtbWludXRlIHRpbWVvdXQgYWxsb3dzIHF1ZXVlZCBwaXBlbGluZSBleGVjdXRpb25zIHRvIHByb2NlZWQgaWYgYXBwcm92YWwgZXhwaXJlc1xuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg2MCksXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBQUk9EXG4gICAgICovXG4gICAgY29uc3QgcHJvZEVudk5hbWUgPSBcIk9yY2FCdXNQcm9kXCI7XG5cbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb2RFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5wcm9kLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5wcm9kLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxQcm9kQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LnByb2QsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChwcm9kRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNka1BpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIGlmIChzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseSkge1xuICAgICAgY2RrUGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoXG4gICAgICAgIHN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5LnByb2plY3QsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmFibGVTbGFja05vdGlmaWNhdGlvbiA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBhbGVydHNCdWlsZFNsYWNrQ29uZmlnQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi9jaGF0Ym90X2Fybi9zbGFjay9hbGVydHMtYnVpbGRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uLmZyb21TbGFja0NoYW5uZWxDb25maWd1cmF0aW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybixcbiAgICAgICk7XG5cbiAgICAgIHRoaXMucGlwZWxpbmUubm90aWZ5T24oXCJQaXBlbGluZVNsYWNrTm90aWZpY2F0aW9uXCIsIHRhcmdldCwge1xuICAgICAgICBldmVudHM6IHByb3BzLm5vdGlmaWNhdGlvbkV2ZW50cyB8fCBbXG4gICAgICAgICAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgICAgICAgXSxcbiAgICAgICAgZGV0YWlsVHlwZTogRGV0YWlsVHlwZS5GVUxMLFxuICAgICAgICBub3RpZmljYXRpb25SdWxlTmFtZTogYE9yY2FCdXMtJHtwcm9wcy5waXBlbGluZU5hbWV9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcCB3aXRoIHJlcXVpcmVkIHJ1bk9yZGVyLlxuICovXG5pbnRlcmZhY2UgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMgZXh0ZW5kcyBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBydW4gb3JkZXIgZm9yIHRoaXMgYWN0aW9uIGluIHRoZSBwaXBlbGluZSBzdGFnZS4gVGhlIHN0YWdlIFByZS9Qb3N0IG9yZGVyIGRvZXMgbm90IGFwcGx5IHRvIHRoaXMgY3VzdG9tXG4gICAqIHN0ZXAvYWN0aW9uLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgcnVuT3JkZXIuXG4gICAqL1xuICBydW5PcmRlcjogbnVtYmVyO1xufVxuLyoqXG4gKiBDdXN0b20gbWFudWFsIGFwcHJvdmFsIHN0ZXAgZm9yIENESyBDb2RlUGlwZWxpbmUuXG4gKlxuICogVGhpcyBjbGFzcyBicmlkZ2VzIHRoZSBnYXAgdG8gZW5hYmxlIHVzaW5nIE1hbnVhbEFwcHJvdmFsQWN0aW9uIHdpdGhpbiBhIFN0ZXAgY2xhc3MsXG4gKiBtYWtpbmcgaXQgY29tcGF0aWJsZSB3aXRoIGNkay5waXBlbGluZXMgY29uc3RydWN0cy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzdGVwLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG1hbnVhbCBhcHByb3ZhbCBhY3Rpb24sIGluY2x1ZGluZ1xuICovXG5jbGFzcyBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBcbiAgZXh0ZW5kcyBTdGVwXG4gIGltcGxlbWVudHMgSUNvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlcbntcbiAgcHJpdmF0ZSByZWFkb25seSBtYW51YWxBcHByb3ZhbEFjdGlvblByb3BzOiBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXBQcm9wcztcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHMpIHtcbiAgICBzdXBlcihpZCk7XG4gICAgdGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzID0gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBwcm9kdWNlQWN0aW9uKFxuICAgIHN0YWdlOiBJU3RhZ2UsXG4gICAgb3B0aW9uczogUHJvZHVjZUFjdGlvbk9wdGlvbnMsXG4gICk6IENvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlSZXN1bHQge1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgTWFudWFsQXBwcm92YWxBY3Rpb24odGhpcy5tYW51YWxBcHByb3ZhbEFjdGlvblByb3BzKSk7XG5cbiAgICByZXR1cm4geyBydW5PcmRlcnNDb25zdW1lZDogMSB9O1xuICB9XG59XG5cbmNsYXNzIERlcGxveW1lbnRTdGFnZSBleHRlbmRzIFN0YWdlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBlbnZpcm9ubWVudE5hbWU6IHN0cmluZyxcbiAgICBlbnY6IEVudmlyb25tZW50LFxuICAgIHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHN0YWNrQ2xhc3M6IG5ldyAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkgPT4gU3RhY2ssXG4gICAgYXBwU3RhY2tQcm9wczogYW55LFxuICAgIGdpdGh1YlJlcG86IHN0cmluZyxcbiAgICBnaXRodWJCcmFuY2g/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBlbnZpcm9ubWVudE5hbWUsIHsgZW52OiBlbnYgfSk7XG5cbiAgICBsZXQgc291cmNlID0gYGh0dHBzOi8vZ2l0aHViLmNvbS9PcmNhQnVzLyR7Z2l0aHViUmVwb31gO1xuICAgIGlmIChnaXRodWJCcmFuY2ggIT09IHVuZGVmaW5lZCAmJiBnaXRodWJCcmFuY2ggIT09IFwibWFpblwiKSB7XG4gICAgICBzb3VyY2UgPSBgJHtzb3VyY2V9L3RyZWUvJHtnaXRodWJCcmFuY2h9YDtcbiAgICB9XG5cbiAgICBuZXcgc3RhY2tDbGFzcyh0aGlzLCBzdGFja05hbWUsIHtcbiAgICAgIGVudjogZW52LFxuICAgICAgdGFnczoge1xuICAgICAgICBcInVtY2NyLW9yZzpQcm9kdWN0XCI6IFwiT3JjYUJ1c1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpDcmVhdG9yXCI6IFwiQ0RLXCIsXG4gICAgICAgIFwidW1jY3Itb3JnOlNlcnZpY2VcIjogc3RhY2tOYW1lLFxuICAgICAgICBcInVtY2NyLW9yZzpTb3VyY2VcIjogc291cmNlLFxuICAgICAgfSxcbiAgICAgIC4uLmFwcFN0YWNrUHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWlsT25EcmlmdEJ1aWxkU3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIEFXUyBhY2NvdW50IGFuZCByZWdpb24gd2hlcmUgdGhlIGRyaWZ0IGNoZWNrIHJ1bnMuXG4gICAqIFVzZWQgdG8gYXNzdW1lIHRoZSBDREsgbG9va3VwIHJvbGUgYW5kIHNldCBBV1NfREVGQVVMVF9SRUdJT04uXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50RW52OiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBDREsgc3RhY2sgSUQgdG8gY2hlY2sgZm9yIGRyaWZ0LlxuICAgKlxuICAgKiBGb3JtYXQ6IGA8cm9vdFN0YWNrPi88Y29uc3RydWN0SWQ+LzxlbnZOYW1lPi88c3RhY2tOYW1lPmBcbiAgICpcbiAgICogRXhhbXBsZTogYERldlN0YWNrL0RlcGxveW1lbnRQaXBlbGluZS9PcmNhQnVzQmV0YS9UZXN0U3RhY2tgXG4gICAqL1xuICByZWFkb25seSBzdGFja0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9JTlNUQUxMX0NPTU1BTkRTIG1lcmdlZCB3aXRoICYmLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmNsYXNzIEZhaWxPbkRyaWZ0QnVpbGRTdGVwIGV4dGVuZHMgQ29kZUJ1aWxkU3RlcCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAge1xuICAgICAgYWNjb3VudEVudixcbiAgICAgIHN0YWNrSWQsXG4gICAgICBjZGtDb21tYW5kLFxuICAgICAgaW5zdGFsbENvbW1hbmQsXG4gICAgfTogRmFpbE9uRHJpZnRCdWlsZFN0ZXBQcm9wcyxcbiAgKSB7XG4gICAgY29uc3QgY2RrSW5zdGFsbCA9IGluc3RhbGxDb21tYW5kXG4gICAgICA/IGluc3RhbGxDb21tYW5kXG4gICAgICA6IERFRkFVTFRfSU5TVEFMTF9DT01NQU5EUy5qb2luKFwiICYmIFwiKTtcblxuICAgIHN1cGVyKGlkLCB7XG4gICAgICBjb21tYW5kczogW1xuICAgICAgICBjZGtJbnN0YWxsLFxuXG4gICAgICAgIGBMT09LVVBfUk9MRV9BUk49XCJhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgICdTRVNTSU9OX05BTUU9XCJkcmlmdC1jaGVja1wiJyxcbiAgICAgICAgJ3JlYWQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOIDwgPChhd3Mgc3RzIGFzc3VtZS1yb2xlIC0tcm9sZS1hcm4gXCIkTE9PS1VQX1JPTEVfQVJOXCIgLS1yb2xlLXNlc3Npb24tbmFtZSBcIiRTRVNTSU9OX05BTUVcIiAtLWR1cmF0aW9uLXNlY29uZHMgOTAwIC0tcXVlcnkgXFwnQ3JlZGVudGlhbHMuW0FjY2Vzc0tleUlkLFNlY3JldEFjY2Vzc0tleSxTZXNzaW9uVG9rZW5dXFwnIC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgXCJleHBvcnQgQVdTX0FDQ0VTU19LRVlfSUQgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIEFXU19TRVNTSU9OX1RPS0VOXCIsXG4gICAgICAgIGBleHBvcnQgQVdTX0RFRkFVTFRfUkVHSU9OPVwiJHthY2NvdW50RW52LnJlZ2lvbn1cImAsXG4gICAgICAgIFwiYXdzIHN0cyBnZXQtY2FsbGVyLWlkZW50aXR5XCIsXG5cbiAgICAgICAgYGlmICR7Y2RrQ29tbWFuZH0gbHMgfCBncmVwIC1GcSBcIiR7c3RhY2tJZH1cIjsgdGhlbiBlY2hvIFwiU3RhY2sgJHtzdGFja0lkfSBmb3VuZDsgY2hlY2tpbmcgZm9yIGRyaWZ0Li4uXCI7ICR7Y2RrQ29tbWFuZH0gZHJpZnQgXCIke3N0YWNrSWR9XCIgLWUgLS1mYWlsOyBlbHNlIGVjaG8gXCJTdGFjayBub3QgZm91bmQgaW4gY2RrIGxzOyBza2lwcGluZyBkcmlmdCBjaGVjay5cIjsgZmlgLFxuICAgICAgXSxcbiAgICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInN0czpBc3N1bWVSb2xlXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgYGFybjphd3M6aWFtOjoke2FjY291bnRFbnYuYWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSR7YWNjb3VudEVudi5hY2NvdW50fS0ke2FjY291bnRFbnYucmVnaW9ufWAsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUFrRTtBQUNsRSw2REFNbUM7QUFDbkMsaURBQXNEO0FBQ3RELHFEQVErQjtBQUMvQixtRUFNc0M7QUFDdEMscUNBSWtCO0FBQ2xCLHlEQUFvRTtBQUNwRSxxRkFBbUU7QUFDbkUsdURBQWtFO0FBQ2xFLG1GQUc4QztBQUM5QyxpREFBc0Q7QUFDdEQsaURBQXNEO0FBRXREOztHQUVHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRztJQUN4QyxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUU7WUFDUCxrQkFBa0IsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsS0FBSztDQUNmLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsc0NBQXNDO0lBQ3RDLGlCQUFpQjtJQUNqQixTQUFTO0lBQ1Qsb0JBQW9CO0lBQ3BCLGlEQUFpRDtDQUNsRCxDQUFDO0FBc09GOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUzs7SUFDcEQ7O09BRUc7SUFDTSxRQUFRLENBQVc7SUFFNUIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUN6RCxJQUFJLEVBQ0oscUJBQXFCLENBQ3RCLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyw4QkFBa0IsQ0FBQyxVQUFVLENBQzlDLFdBQVcsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUM3QixLQUFLLENBQUMsWUFBWSxFQUNsQjtZQUNFLGFBQWEsRUFBRSxXQUFXO1lB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRHVyYXRpb24sIEVudmlyb25tZW50LCBTdGFjaywgU3RhZ2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldENhY2hlT3B0aW9ucyxcbiAgQnVpbGRTcGVjLFxuICBDYWNoZSxcbiAgQ29tcHV0ZVR5cGUsXG4gIExpbnV4QXJtQnVpbGRJbWFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlYnVpbGRcIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQge1xuICBDb2RlQnVpbGRTdGVwLFxuICBDb2RlUGlwZWxpbmUsXG4gIENvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnlSZXN1bHQsXG4gIENvZGVQaXBlbGluZVNvdXJjZSxcbiAgSUNvZGVQaXBlbGluZUFjdGlvbkZhY3RvcnksXG4gIFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICBTdGVwLFxufSBmcm9tIFwiYXdzLWNkay1saWIvcGlwZWxpbmVzXCI7XG5pbXBvcnQge1xuICBQaXBlbGluZSxcbiAgQ2ZuUGlwZWxpbmUsXG4gIFBpcGVsaW5lVHlwZSxcbiAgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsXG4gIElTdGFnZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmVcIjtcbmltcG9ydCB7XG4gIEJFVEFfRU5WSVJPTk1FTlQsXG4gIEdBTU1BX0VOVklST05NRU5ULFxuICBQUk9EX0VOVklST05NRU5ULFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IFNsYWNrQ2hhbm5lbENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNoYXRib3RcIjtcbmltcG9ydCB7IERldGFpbFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVzdGFybm90aWZpY2F0aW9uc1wiO1xuaW1wb3J0IHsgQ3Jvc3NEZXBsb3ltZW50QXJ0aWZhY3RCdWNrZXQgfSBmcm9tIFwiLi9hcnRpZmFjdC1idWNrZXRcIjtcbmltcG9ydCB7XG4gIE1hbnVhbEFwcHJvdmFsQWN0aW9uLFxuICBNYW51YWxBcHByb3ZhbEFjdGlvblByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29kZUJ1aWxkQ2FjaGVCdWNrZXQgfSBmcm9tIFwiLi9jYWNoZS1idWNrZXRcIjtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwYXJ0aWFsIGJ1aWxkIHNwZWMgZm9yIGNvZGUgYnVpbGQgc3RlcHMgaW4gdGhlIHBpcGVsaW5lLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQVJUSUFMX0JVSUxEX1NQRUMgPSB7XG4gIHBoYXNlczoge1xuICAgIGluc3RhbGw6IHtcbiAgICAgIFwicnVudGltZS12ZXJzaW9uc1wiOiB7XG4gICAgICAgIG5vZGVqczogXCIyMi54XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIHZlcnNpb246IFwiMC4yXCIsXG59O1xuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGluc3RhbGwgY29tbWFuZHMgZm9yIENvZGVCdWlsZCBzdGVwcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5TVEFMTF9DT01NQU5EUyA9IFtcbiAgXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIixcbiAgXCJjb3JlcGFjayBlbmFibGVcIixcbiAgXCJub2RlIC12XCIsXG4gIFwiY29yZXBhY2sgLS12ZXJzaW9uXCIsXG4gIFwicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHNcIixcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VFbnZQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBiZXRhIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBiZXRhOiBFbnZpcm9ubWVudDtcbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGdhbW1hIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBnYW1tYTogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgZm9yIHRoZSBwcm9kIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBFbnZpcm9ubWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0NvbmZpZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYmV0YSAoZGV2KSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2FtbWEgKHN0Zykgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IGdhbW1hOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwcm9kIHN0YWdlXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHByZS1kZXBsb3ltZW50IGRyaWZ0IGRldGVjdGlvbiBjaGVja3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRDaGVja0NvbmZpZyB7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGVudHJ5cG9pbnQgdXNlZCB0byBydW4gdGhlIGRyaWZ0IGNvbW1hbmQuXG4gICAqIEV4YW1wbGVzOiBcInBucG0gY2RrXCIsIFwicG5wbSBjZGstc3RhdGVmdWxcIiwgXCJwbnBtIGNkay1zdGF0ZWxlc3NcIi5cbiAgICogTXVzdCBzdXBwb3J0OiBcImRyaWZ0IDxzdGFja0lkPlwiLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBiZWZvcmUgcnVubmluZyBDREsuXG4gICAqIElmIHlvdXIgYXBwIGlzIGluIGEgc3ViZGlyZWN0b3J5LCBwcmVmaXggd2l0aCBcImNkIDxkaXI+ICYmXCIuXG4gICAqIEV4YW1wbGU6IFwiY2QgZGV2ICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAtLWlnbm9yZS1zY3JpcHRzXCJcbiAgICpcbiAgICogRGVmYXVsdDogXCJwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTdGVwUHJvcHMge1xuICAvKipcbiAgICogdGhlIG1haW4gY29tbWFuZCBmb3IgdGhlIGJ1aWxkIHN0ZXAgdG8gcnVuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBhcnRpYWwgYnVpbGRzcGVjIGZvciB0aGlzIENvZGVCdWlsZFN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpYWxCdWlsZFNwZWM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAvKipcbiAgICogVGhlIGluc3RhbGwgY29tbWFuZHMgdG8gcnVuIGJlZm9yZSB0aGUgbWFpbiBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYWRkaXRpb25hbCBwb2xpY3kgc3RhdGVtZW50cyB0byBhZGQgdG8gdGhlIENvZGVCdWlsZFN0ZXAgcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGVQb2xpY3lTdGF0ZW1lbnRzPzogUG9saWN5U3RhdGVtZW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWNrUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGJyYW5jaCBuYW1lIHRoZSBwaXBlbGluZSB3aWxsIGxpc3RlbiB0by5cbiAgICogQXZvaWQgdXNpbmcgYnJhbmNoIG5hbWVzIHRoYXQgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBwYXJlbnRoZXNlcy5cbiAgICogQWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlOiBcIisgLSA9IC4gXyA6IC8gQFwiLlxuICAgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGR1ZSB0byBBV1MgcmVzb3VyY2UgdGFnZ2luZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJCcmFuY2g6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXBvc2l0b3J5IG5hbWUgdGhhdCBleGlzdCBpbiB0aGUgJ09yY2FCdXMnIGdpdGh1YiBvcmdhbmlzYXRpb24uIGUuZy4gYGEtbWljcm8tc2VydmljZS1yZXBvYFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViUmVwbzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHdoaWNoIHRoZSBwaXBlbGluZSB3aWxsIGJlIGRlcGxveWluZyB0byBpdHMgcmVzcGVjdGl2ZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBzdGFjazogYW55O1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgKGluIGNsb3VkZm9ybWF0aW9uKSBmb3IgdGhlIHN0YWNrIGRlZmluZWQgaW4gYHN0YWNrYC4gVGhlIHN0YWNrIG5hbWUgd2lsbCBwcmVwZW5kIHdpdGggdGhlIHN0YWdlXG4gICAqIG5hbWUgZS5nLiBgT3JjYUJ1c0JldGEtPHN0YWNrTmFtZT5gLCBgT3JjYUJ1c0dhbW1hLTxzdGFja05hbWU+YCwgYE9yY2FCdXNQcm9kLTxzdGFja05hbWU+YFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgY29uZmlndXJhdGlvbi9jb25zdGFudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgc3RhY2sgcHJvcHMuXG4gICAqL1xuICByZWFkb25seSBzdGFja0NvbmZpZzogU3RhY2tDb25maWdQcm9wcztcbiAgLyoqXG4gICAqIFRoZSBwaXBlbGluZSBuYW1lIGluIHRoZSBiYXN0aW9uIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHBhdHRlcm5zIG9mIEdpdCByZXBvc2l0b3J5IGZpbGUgcGF0aHMgdGhhdCwgd2hlbiBhIGNvbW1pdCBpcyBwdXNoZWQsIGFyZSB0byBiZSBJTkNMVURFRCBhcyBjcml0ZXJpYSB0aGF0IHN0YXJ0cyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwYXR0ZXJucyBvZiBHaXQgcmVwb3NpdG9yeSBmaWxlIHBhdGhzIHRoYXQsIHdoZW4gYSBjb21taXQgaXMgcHVzaGVkLCBhcmUgdG8gYmUgRVhDTFVERUQgZnJvbSBzdGFydGluZyB0aGUgcGlwZWxpbmUuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNvZGVwaXBlbGluZS1waXBlbGluZS1naXRmaWxlcGF0aGZpbHRlcmNyaXRlcmlhLmh0bWxcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkRmlsZVBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byBydW4gdG8gc3ludGggdGhlIGNkayBzdGFjayB3aGljaCBhbHNvIGluc3RhbGxpbmcgdGhlIGNkayBkZXBlbmRlbmNpZXMuIGUuZy4gW1wicG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlXCIsIFwicG5wbSBjZGsgc3ludGhcIl1cbiAgICovXG4gIHJlYWRvbmx5IGNka1N5bnRoQ21kOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBhZGRpdGlvbmFsIHBvbGljeSBzdGF0ZW1lbnRzIHRvIGFkZCB0byB0aGUgQ29kZUJ1aWxkU3RlcCByb2xlIGR1cmluZyB0aGUgc3ludGggc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IHN5bnRoUm9sZVBvbGljeVN0YXRlbWVudHM/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgY2RrIG91dHB1dCB3aWxsIGJlIHN0b3JlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLm91dFxuICAgKi9cbiAgcmVhZG9ubHkgY2RrT3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgQ29kZUJ1aWxkIHN0ZXAgZHVyaW5nIHRoZSBDREsgc3ludGggcGhhc2UuIEl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZVxuICAgKiBgcGFydGlhbEJ1aWxkU3BlY2AgdG8gdGhlIGBDb2RlQnVpbGRTdGVwYC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9QQVJUSUFMX0JVSUxEX1NQRUNcbiAgICovXG4gIHJlYWRvbmx5IHN5bnRoQnVpbGRTcGVjPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsIGNvbW1hbmRzIGZvciB0aGUgc3ludGggc3RlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVF9JTlNUQUxMX0NPTU1BTkRTXG4gICAqL1xuICByZWFkb25seSBzeW50aEluc3RhbGxDb21tYW5kcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBjb2RlLlxuICAgKiBUaGlzIHN0ZXAgd2lsbCBleGVjdXRlIGluIHBhcmFsbGVsIHdpdGgge0BsaW5rIHVuaXRJYWNUZXN0Q29uZmlnfSBhcyBwYXJ0IG9mIHRoZSBzeW50aCBzdGFnZSBkZXBlbmRlbmNpZXMuXG4gICAqIEJvdGggbXVzdCBzdWNjZWVkIGJlZm9yZSB0aGUgc3ludGggc3RlcCBydW5zLlxuICAgKlxuICAgKiBlbnN1cmUgeW91ciBjb21tYW5kIGluY2x1ZGVzICdjZCcgdG8gdGhlIG1haW4gYXBwIGRpcmVjdG9yeSwgYXMgdGhlIGJ1aWxkIGNvbnRleHQgc3RhcnRzIGZyb20gdGhlIHJvb3QuXG4gICAqL1xuICByZWFkb25seSB1bml0QXBwVGVzdENvbmZpZzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwIHRoYXQgcnVucyB1bml0IHRlc3RzIGZvciBJbmZyYXN0cnVjdHVyZS1hcy1Db2RlIChJYUMpIGF0IHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgc3RlcCB3aWxsIGV4ZWN1dGUgaW4gcGFyYWxsZWwgd2l0aCB7QGxpbmsgdW5pdEFwcFRlc3RDb25maWd9IGFzIHBhcnQgb2YgdGhlIHN5bnRoIHN0YWdlIGRlcGVuZGVuY2llcy5cbiAgICogQm90aCBtdXN0IHN1Y2NlZWQgYmVmb3JlIHRoZSBzeW50aCBzdGVwIHJ1bnMuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGNvbW1hbmQgd2lsbCBiZSBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvOiBbXCJucG0gaW5zdGFsbCAtLWdsb2JhbCBjb3JlcGFja0BsYXRlc3RcIiwgXCJjb3JlcGFjayBlbmFibGVcIiwgXCJtYWtlIGluc3RhbGxcIiwgXCJtYWtlIHRlc3RcIl1cbiAgICovXG4gIHJlYWRvbmx5IHVuaXRJYWNUZXN0Q29uZmlnPzogQ29kZUJ1aWxkU3RlcFByb3BzO1xuICAvKipcbiAgICogVGhlIHN0YWdlIGVudmlyb25tZW50IGZvciB0aGUgZGVwbG95bWVudCBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VFbnY/OiBTdGFnZUVudlByb3BzO1xuICAvKipcbiAgICogRW5hYmxlIG5vdGlmaWNhdGlvbiB0byB0aGUgJ2FsZXJ0cy1idWlsZCcgc2xhY2sgY2hhbm5lbC5cbiAgICogQGRlZmF1bHQgVHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2xhY2tOb3RpZmljYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHBpcGVsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMgdGhhdCB3aWxsIHRyaWdnZXIgYSBTbGFjayBjaGFubmVsIG5vdGlmaWNhdGlvbi5cbiAgICogT25seSBhcHBsaWVzIGlmIGBlbmFibGVTbGFja05vdGlmaWNhdGlvbmAgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fRkFJTEVEXSDigJNcbiAgICogICBPbmx5IGZhaWxlZCBwaXBlbGluZSBleGVjdXRpb25zIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkV2ZW50cz86IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBmb3IgY3Jvc3MtZGVwbG95bWVudCBwaXBlbGluZXMuXG4gICAqIElmIHNldCB0byB0cnVlLCBpdCB3aWxsIGxvb2sgdXAgdGhlIGV4aXN0aW5nIGFydGlmYWN0IGJ1Y2tldCBpbiB0aGUgVE9PTENIQUlOIGFjY291bnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhc3NldHMgZnJvbSB0aGUgQ0RLIGFzc2VtYmx5IHByZS1kZXBsb3ltZW50IHRvIHByZXZlbnQgaGl0dGluZyBDb2RlUGlwZWxpbmUncyAyNTYgTUIgYXJ0aWZhY3Qgc2l6ZSBsaW1pdC5cbiAgICogVXNlZnVsIHdoZW4gQ0RLIGFzc2V0cyAoTGFtYmRhIGNvZGUsIERvY2tlciBpbWFnZXMsIGV0Yy4pIGFyZSBsYXJnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwQXNzZW1ibHlBc3NldHM/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZHJpZnQgZGV0ZWN0aW9uIGNoZWNrcyBiZWZvcmUgZGVwbG95bWVudC5cbiAgICogSWYgc3BlY2lmaWVkLCB0aGUgcGlwZWxpbmUgd2lsbCBjaGVjayBmb3IgQ2xvdWRGb3JtYXRpb24gZHJpZnQgYW5kIGZhaWwgaWYgZGV0ZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBkcmlmdENoZWNrQ29uZmlnPzogRHJpZnRDaGVja0NvbmZpZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgYGNhY2hlYCBvcHRpb25zIGZvciBlYWNoIGBDb2RlQnVpbGRTdGVwYC4gVGhpcyB3aWxsIGFsbG93IENvZGVCdWlsZCB0byB1c2VcbiAgICogUzMgY2FjaGluZyB3aXRoIHRoZSBgQ09ERUJVSUxEX0NBQ0hFX0JVQ0tFVGAgYnVja2V0LlxuICAgKlxuICAgKiBUaGUgcGFydGlhbCBidWlsZHNwZWMgbXVzdCBzdGlsbCBjb250YWluIGRlZmluaXRpb25zIGZvciBjYWNoZSBwYXRocyBhbmQga2V5cyBpZiB1c2VkLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2RlYnVpbGQvbGF0ZXN0L3VzZXJndWlkZS9idWlsZC1zcGVjLXJlZi5odG1sI2J1aWxkLXNwZWMuY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlT3B0aW9ucz86IENhY2hlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhbiBTMyBjYWNoZSB0byB1c2UgYWNyb3NzIGJ1aWxkIHN0ZXBzLiBJZiBzcGVjaWZpZWQsIHRoZSBidWNrZXQgdW5kZXJcbiAqIGBDT0RFQlVJTERfQ0FDSEVfQlVDS0VUYCB3aWxsIGJlIHVzZWQgZm9yIGNhY2hpbmcuIFRoaXMgYnVja2V0IGlzIG1hbmFnZWQgYnkgdGhlIHNoYXJlZC1yZXNvdXJjZXNcbiAqIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIG5hbWVzcGFjZSBmb3IgdGhlIGNhY2hlLiBUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBjYWNoZSBidWNrZXQgaXMgc2hhcmVkIGFjcm9zc1xuICAgKiBhbGwgcHJvamVjdHMgc28gYSBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNhY2hlLiBVc2UgdGhlIHByb2plY3QgbmFtZSwgZS5nLiBgZmlsZW1hbmFnZXJgLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IGZvciB0aGUgY2FjaGUgY29udHJvbGxpbmcgdGhlIHByZWZpeCBvbiBTMy4gSWYgbGVmdCB1bnNwZWNpZmllZCwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRocyB0byBjYWNoZS4gVGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeSBpZiB1bnNwZWNpZmllZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHRoZSBjYWNoZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGJ1aWxkc3BlYywgdGhhdCBjb25maWcgd2lsbCB0YWtlIHByZWNlZGVuY2UuIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZFxuICAgKiBhcyBhIGNvbnZlbmllbmNlIHRvIHNwZWNpZnkgcGF0aHMsIGFuZCB3aWxsIG5vdCBvdmVycmlkZSB0aGUgYnVpbGRzcGVjIGNhY2hlIGNvbmZpZy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29kZWJ1aWxkL2xhdGVzdC91c2VyZ3VpZGUvYnVpbGQtc3BlYy1yZWYuaHRtbCNidWlsZC1zcGVjLmNhY2hlXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgYSBkZXBsb3ltZW50IHBpcGVsaW5lIGFjcm9zcyBlbnZpcm9ubWVudHMgZm9yIHRoZSBPcmNhQnVzIHByb2plY3QuXG4gKlxuICogUHJlcmVxdWlzaXRlOiBFbnN1cmUgdGhhdCB0aGUgXCJDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldFwiIHN0YWNrIGlzIGRlcGxveWVkIGluIHRoZSBUT09MQ0hBSU4gYWNjb3VudFxuICogYmVmb3JlIHVzaW5nIHRoaXMgY29uc3RydWN0LlxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95bWVudFN0YWNrUGlwZWxpbmUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGNvZGUgcGlwZWxpbmUgY29uc3RydWN0IHRoYXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERlcGxveW1lbnRTdGFja1BpcGVsaW5lUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2RlU3RhckFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBcImNvZGVzdGFyX2dpdGh1Yl9hcm5cIixcbiAgICApO1xuICAgIGNvbnN0IGNvZGVTdGFyU291cmNlQWN0aW9uTmFtZSA9IFwicGlwZWxpbmUtc3JjXCI7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IENvZGVQaXBlbGluZVNvdXJjZS5jb25uZWN0aW9uKFxuICAgICAgYE9yY2FCdXMvJHtwcm9wcy5naXRodWJSZXBvfWAsXG4gICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3Rpb25Bcm46IGNvZGVTdGFyQXJuLFxuICAgICAgICBhY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgIHRyaWdnZXJPblB1c2g6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpc1JldXNpbmdFeGlzdGluZ0FydGlmYWN0QnVja2V0ID1cbiAgICAgIHByb3BzLnJldXNlRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldCA/PyB0cnVlO1xuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gaXNSZXVzaW5nRXhpc3RpbmdBcnRpZmFjdEJ1Y2tldFxuICAgICAgPyBDcm9zc0RlcGxveW1lbnRBcnRpZmFjdEJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmFydGlmYWN0QnVja2V0XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUodGhpcywgXCJEZXBsb3ltZW50Q29kZVBpcGVsaW5lXCIsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiBhcnRpZmFjdEJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlLlYyLFxuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICBjcm9zc0FjY291bnRLZXlzOiB0cnVlLFxuICAgICAgLy8gZW5hYmxlIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZVxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU3MDE3NzYvdXBkYXRlcGlwZWxpbmUtc3RhZ2UtaW4tY2RrLXBpcGVsaW5lLWlzLWNhbmNlbGxlZFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmluY2x1ZGVkRmlsZVBhdGhzIHx8IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gICAgICBpZiAocHJvcHMuaW5jbHVkZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgZmlsZVBhdGhzW1wiSW5jbHVkZXNcIl0gPSBwcm9wcy5pbmNsdWRlZEZpbGVQYXRocztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5leGNsdWRlZEZpbGVQYXRocykge1xuICAgICAgICBmaWxlUGF0aHNbXCJFeGNsdWRlc1wiXSA9IHByb3BzLmV4Y2x1ZGVkRmlsZVBhdGhzO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgZmlsdGVyIHRvIG9ubHkgdHJpZ2dlciBpZiB0aGUgcHVzaCBldmVudCBpcyBmcm9tIGBkZXBsb3lgIGRpcmVjdG9yeVxuICAgICAgY29uc3QgY2ZuUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblBpcGVsaW5lO1xuICAgICAgY2ZuUGlwZWxpbmUuYWRkUHJvcGVydHlPdmVycmlkZShcIlRyaWdnZXJzXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIEdpdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIFB1c2g6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEJyYW5jaGVzOiB7XG4gICAgICAgICAgICAgICAgICBJbmNsdWRlczogW3Byb3BzLmdpdGh1YkJyYW5jaF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBGaWxlUGF0aHM6IGZpbGVQYXRocyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBTb3VyY2VBY3Rpb25OYW1lOiBjb2RlU3RhclNvdXJjZUFjdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBQcm92aWRlclR5cGU6IFwiQ29kZVN0YXJTb3VyY2VDb25uZWN0aW9uXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBsZXQgY2FjaGVCdWNrZXQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNhY2hlT3B0aW9uczogQnVja2V0Q2FjaGVPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5jYWNoZU9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVCdWNrZXQgPSBDb2RlQnVpbGRDYWNoZUJ1Y2tldC5mcm9tTG9va3VwKHRoaXMpLmNhY2hlQnVja2V0O1xuICAgICAgY2FjaGVPcHRpb25zID0ge1xuICAgICAgICBjYWNoZU5hbWVzcGFjZTogcHJvcHMuY2FjaGVPcHRpb25zLm5hbWVzcGFjZSxcbiAgICAgICAgcHJlZml4OiBwcm9wcy5jYWNoZU9wdGlvbnMucHJlZml4ID8/IHByb3BzLmNhY2hlT3B0aW9ucy5uYW1lc3BhY2UsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBzZXRDYWNoZVBhdGhzID0gKGJ1aWxkU3BlYzogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgaWYgKGJ1aWxkU3BlYyAhPT0gdW5kZWZpbmVkICYmICEoXCJjYWNoZVwiIGluIGJ1aWxkU3BlYykpIHtcbiAgICAgICAgYnVpbGRTcGVjW1wiY2FjaGVcIl0gPSB7XG4gICAgICAgICAgcGF0aHM6IHByb3BzLmNhY2hlT3B0aW9ucz8ucGF0aHMgPz8gW1wibm9kZV9tb2R1bGVzLyoqLypcIl0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEFkZCB1bml0IHRlc3QgZm9yIElhQyBhdCB0aGUgcm9vdCBvZiB0aGVcbiAgICBjb25zdCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHVuaXRJYWNUZXN0SW5zdGFsbCA9IERFRkFVTFRfSU5TVEFMTF9DT01NQU5EUyxcbiAgICAgIGNvbW1hbmQ6IHVuaXRJYWNUZXN0Q29tbWFuZCA9IFtcInBucG0gdGVzdFwiXSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjID0gc3RydWN0dXJlZENsb25lKFxuICAgICAgICBERUZBVUxUX1BBUlRJQUxfQlVJTERfU1BFQyxcbiAgICAgICksXG4gICAgICByb2xlUG9saWN5U3RhdGVtZW50czogdW5pdElhY1JvbGVQb2xpY3lTdGF0ZW1lbnRzLFxuICAgIH0gPSBwcm9wcy51bml0SWFjVGVzdENvbmZpZyB8fCB7fTtcbiAgICBzZXRDYWNoZVBhdGhzKHVuaXRJYWNQYXJ0aWFsQnVpbGRTcGVjKTtcblxuICAgIGNvbnN0IHVuaXRJYWNUZXN0ID0gbmV3IENvZGVCdWlsZFN0ZXAoXCJVbml0SWFjVGVzdFwiLCB7XG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHVuaXRJYWNUZXN0SW5zdGFsbCxcbiAgICAgIGNvbW1hbmRzOiB1bml0SWFjVGVzdENvbW1hbmQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBUkdFLFxuICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAgIE5PREVfT1BUSU9OUzoge1xuICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcGFydGlhbEJ1aWxkU3BlYzogdW5pdElhY1BhcnRpYWxCdWlsZFNwZWNcbiAgICAgICAgPyBCdWlsZFNwZWMuZnJvbU9iamVjdCh1bml0SWFjUGFydGlhbEJ1aWxkU3BlYylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjYWNoZTogY2FjaGVCdWNrZXQgPyBDYWNoZS5idWNrZXQoY2FjaGVCdWNrZXQsIGNhY2hlT3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICByb2xlUG9saWN5U3RhdGVtZW50czogdW5pdElhY1JvbGVQb2xpY3lTdGF0ZW1lbnRzLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkaW5nIHVuaXQgdGVzdCBmb3IgdGhlIG1haW4gYXBwXG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZDogdW5pdEFwcFRlc3RDb21tYW5kLFxuICAgICAgaW5zdGFsbENvbW1hbmRzOiB1bml0QXBwVGVzdEluc3RhbGwgPSBERUZBVUxUX0lOU1RBTExfQ09NTUFORFMsXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiB1bml0QXBwUGFydGlhbEJ1aWxkU3BlYyA9IHN0cnVjdHVyZWRDbG9uZShcbiAgICAgICAgREVGQVVMVF9QQVJUSUFMX0JVSUxEX1NQRUMsXG4gICAgICApLFxuICAgICAgcm9sZVBvbGljeVN0YXRlbWVudHM6IHVuaXRBcHBSb2xlUG9saWN5U3RhdGVtZW50cyxcbiAgICB9ID0gcHJvcHMudW5pdEFwcFRlc3RDb25maWc7XG4gICAgc2V0Q2FjaGVQYXRocyh1bml0QXBwUGFydGlhbEJ1aWxkU3BlYyk7XG5cbiAgICBjb25zdCB1bml0QXBwVGVzdCA9IG5ldyBDb2RlQnVpbGRTdGVwKFwiVW5pdEFwcFRlc3RcIiwge1xuICAgICAgY29tbWFuZHM6IHVuaXRBcHBUZXN0Q29tbWFuZCxcbiAgICAgIGluc3RhbGxDb21tYW5kczogdW5pdEFwcFRlc3RJbnN0YWxsLFxuICAgICAgaW5wdXQ6IHNvdXJjZUZpbGUsXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhBcm1CdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yX1NUQU5EQVJEXzNfMCxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTgxOTJcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IHVuaXRBcHBQYXJ0aWFsQnVpbGRTcGVjXG4gICAgICAgID8gQnVpbGRTcGVjLmZyb21PYmplY3QodW5pdEFwcFBhcnRpYWxCdWlsZFNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgY2FjaGU6IGNhY2hlQnVja2V0ID8gQ2FjaGUuYnVja2V0KGNhY2hlQnVja2V0LCBjYWNoZU9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgICAgcm9sZVBvbGljeVN0YXRlbWVudHM6IHVuaXRBcHBSb2xlUG9saWN5U3RhdGVtZW50cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHN5bnRoSW5zdGFsbENvbW1hbmRzID0gREVGQVVMVF9JTlNUQUxMX0NPTU1BTkRTLFxuICAgICAgc3ludGhCdWlsZFNwZWMgPSBzdHJ1Y3R1cmVkQ2xvbmUoREVGQVVMVF9QQVJUSUFMX0JVSUxEX1NQRUMpLFxuICAgICAgc3ludGhSb2xlUG9saWN5U3RhdGVtZW50cyxcbiAgICB9ID0gcHJvcHM7XG4gICAgc2V0Q2FjaGVQYXRocyhzeW50aEJ1aWxkU3BlYyk7XG5cbiAgICBjb25zdCBzeW50aFN0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIkNka1N5bnRoXCIsIHtcbiAgICAgIGluc3RhbGxDb21tYW5kczogc3ludGhJbnN0YWxsQ29tbWFuZHMsXG4gICAgICBjb21tYW5kczogcHJvcHMuY2RrU3ludGhDbWQsXG4gICAgICBpbnB1dDogc291cmNlRmlsZSxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHByb3BzLmNka091dCB8fCBcImNkay5vdXRcIixcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHN5bnRoQnVpbGRTcGVjKSxcbiAgICAgIGNhY2hlOiBjYWNoZUJ1Y2tldCA/IENhY2hlLmJ1Y2tldChjYWNoZUJ1Y2tldCwgY2FjaGVPcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJvbGVQb2xpY3lTdGF0ZW1lbnRzOiBzeW50aFJvbGVQb2xpY3lTdGF0ZW1lbnRzLFxuICAgIH0pO1xuICAgIHN5bnRoU3RlcC5hZGRTdGVwRGVwZW5kZW5jeSh1bml0SWFjVGVzdCk7XG4gICAgc3ludGhTdGVwLmFkZFN0ZXBEZXBlbmRlbmN5KHVuaXRBcHBUZXN0KTtcblxuICAgIGNvbnN0IGNka1BpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCBcIkNES0NvZGVQaXBlbGluZVwiLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUsXG4gICAgICBzeW50aDogc3ludGhTdGVwLFxuICAgICAgc2VsZk11dGF0aW9uOiB0cnVlLFxuICAgICAgY29kZUJ1aWxkRGVmYXVsdHM6IHtcbiAgICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eEFybUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfU1RBTkRBUkRfM18wLFxuICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgICBOT0RFX09QVElPTlM6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9ODE5MlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRTdGFnZUVudjogU3RhZ2VFbnZQcm9wcyA9IHtcbiAgICAgIGJldGE6IEJFVEFfRU5WSVJPTk1FTlQsXG4gICAgICBnYW1tYTogR0FNTUFfRU5WSVJPTk1FTlQsXG4gICAgICBwcm9kOiBQUk9EX0VOVklST05NRU5ULFxuICAgIH07XG4gICAgY29uc3Qgc3RhZ2VFbnYgPSBwcm9wcy5zdGFnZUVudiB8fCBkZWZhdWx0U3RhZ2VFbnY7XG5cbiAgICAvLyBBZnRlciBhc3NldHMgYXJlIHB1Ymxpc2hlZCwgdGhleSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICAvLyB0byBoZWxwIHByZXZlbnQgaGl0dGluZyB0aGUgQ29kZVBpcGVsaW5lIGFydGlmYWN0IGxpbWl0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgIGxldCBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuc3RyaXBBc3NlbWJseUFzc2V0cykge1xuICAgICAgc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkgPSBuZXcgQ29kZUJ1aWxkU3RlcChcIlN0cmlwQXNzZXRzRnJvbUFzc2VtYmx5XCIsIHtcbiAgICAgICAgaW5wdXQ6IGNka1BpcGVsaW5lLmNsb3VkQXNzZW1ibHlGaWxlU2V0LFxuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICAgXCJaSVBfQVJDSElWRT0kKGJhc2VuYW1lICRTM19QQVRIKVwiLFxuICAgICAgICAgIFwiZWNobyAkUzNfUEFUSFwiLFxuICAgICAgICAgIFwiZWNobyAkWklQX0FSQ0hJVkVcIixcbiAgICAgICAgICBcImxzXCIsXG4gICAgICAgICAgXCJybSAtcmZ2IGFzc2V0LipcIixcbiAgICAgICAgICBcInppcCAtciAtcSAtQSAkWklQX0FSQ0hJVkUgKlwiLFxuICAgICAgICAgIFwibHNcIixcbiAgICAgICAgICBcImF3cyBzMyBjcCAkWklQX0FSQ0hJVkUgczM6Ly8kUzNfUEFUSFwiLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNka1BpcGVsaW5lLmFkZFdhdmUoXCJCZWZvcmVTdGFnZURlcGxveW1lbnRcIiwge1xuICAgICAgICBwcmU6IFtzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgZnVuY3Rpb24gdG8gZ2V0IFN0YWNrSWQgZm9yIGRyaWZ0IGNoZWNrXG4gICAgY29uc3Qgcm9vdFN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25zdHJ1Y3RJZCA9IHRoaXMubm9kZS5pZDtcbiAgICBjb25zdCBnZXRTdGFja0lkID0gKGVudk5hbWU6IHN0cmluZykgPT5cbiAgICAgIGAke3Jvb3RTdGFja05hbWV9LyR7Y29uc3RydWN0SWR9LyR7ZW52TmFtZX0vJHtwcm9wcy5zdGFja05hbWV9YDtcblxuICAgIC8vIERyaWZ0IGNoZWNrIGNvbmZpZ1xuICAgIGNvbnN0IGlzRHJpZnRDaGVja1N0ZXAgPSAhIXByb3BzLmRyaWZ0Q2hlY2tDb25maWc7XG4gICAgY29uc3QgY2RrSW5zdGFsbENtZCA9IHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/Lmluc3RhbGxDb21tYW5kO1xuICAgIGNvbnN0IGNka1J1bkNtZCA9IHByb3BzLmRyaWZ0Q2hlY2tDb25maWc/LmNka0NvbW1hbmQgPz8gYGA7XG5cbiAgICBjb25zdCBiZXRhRW52TmFtZSA9IFwiT3JjYUJ1c0JldGFcIjtcbiAgICBjZGtQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBEZXBsb3ltZW50U3RhZ2UoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGJldGFFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5iZXRhLFxuICAgICAgICBwcm9wcy5zdGFja05hbWUsXG4gICAgICAgIHByb3BzLnN0YWNrLFxuICAgICAgICBwcm9wcy5zdGFja0NvbmZpZy5iZXRhLFxuICAgICAgICBwcm9wcy5naXRodWJSZXBvLFxuICAgICAgICBwcm9wcy5naXRodWJCcmFuY2gsXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBwcmU6IGlzRHJpZnRDaGVja1N0ZXBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgbmV3IEZhaWxPbkRyaWZ0QnVpbGRTdGVwKFwiRHJpZnRPbkZhaWxCZXRhQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LmJldGEsXG4gICAgICAgICAgICAgICAgc3RhY2tJZDogZ2V0U3RhY2tJZChiZXRhRW52TmFtZSksXG4gICAgICAgICAgICAgICAgY2RrQ29tbWFuZDogY2RrUnVuQ21kLFxuICAgICAgICAgICAgICAgIGluc3RhbGxDb21tYW5kOiBjZGtJbnN0YWxsQ21kLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEdBTU1BXG4gICAgICovXG4gICAgY29uc3QgZ2FtbWFFbnZOYW1lID0gXCJPcmNhQnVzR2FtbWFcIjtcblxuICAgIGNka1BpcGVsaW5lLmFkZFN0YWdlKFxuICAgICAgbmV3IERlcGxveW1lbnRTdGFnZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZ2FtbWFFbnZOYW1lLFxuICAgICAgICBzdGFnZUVudi5nYW1tYSxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcuZ2FtbWEsXG4gICAgICAgIHByb3BzLmdpdGh1YlJlcG8sXG4gICAgICAgIHByb3BzLmdpdGh1YkJyYW5jaCxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIHByZTogaXNEcmlmdENoZWNrU3RlcFxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBuZXcgRmFpbE9uRHJpZnRCdWlsZFN0ZXAoXCJEcmlmdE9uRmFpbEdhbW1hQ2hlY2tcIiwge1xuICAgICAgICAgICAgICAgIGFjY291bnRFbnY6IHN0YWdlRW52LmdhbW1hLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQoZ2FtbWFFbnZOYW1lKSxcbiAgICAgICAgICAgICAgICBjZGtDb21tYW5kOiBjZGtSdW5DbWQsXG4gICAgICAgICAgICAgICAgaW5zdGFsbENvbW1hbmQ6IGNka0luc3RhbGxDbWQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0OiBbXG4gICAgICAgICAgbmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcChcIlByb21vdGVUb1Byb2RcIiwge1xuICAgICAgICAgICAgYWN0aW9uTmFtZTogXCJQcm9tb3RlVG9Qcm9kXCIsXG4gICAgICAgICAgICAvLyBDdXN0b20gc3RlcHMgYnlwYXNzIHN0YWdlIHByZS9wb3N0IG9yZGVyaW5nLCBzbyBydW5PcmRlciBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAgICAgLy8gU2V0IHRvIDUgdG8gZW5zdXJlIHRoaXMgcnVucyBhZnRlciBhbGwgT3JjYUJ1c0dhbW1hIHN0YWdlIHN0ZXBzIGNvbXBsZXRlLlxuICAgICAgICAgICAgLy8gKEdhbW1hIGRlcGxveW1lbnQgdHlwaWNhbGx5IHVzZXMgMiBzdGVwcywgc28gNSBwcm92aWRlcyBhZGVxdWF0ZSBidWZmZXIpXG4gICAgICAgICAgICBydW5PcmRlcjogNSxcbiAgICAgICAgICAgIC8vIDYwLW1pbnV0ZSB0aW1lb3V0IGFsbG93cyBxdWV1ZWQgcGlwZWxpbmUgZXhlY3V0aW9ucyB0byBwcm9jZWVkIGlmIGFwcHJvdmFsIGV4cGlyZXNcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNjApLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogUFJPRFxuICAgICAqL1xuICAgIGNvbnN0IHByb2RFbnZOYW1lID0gXCJPcmNhQnVzUHJvZFwiO1xuXG4gICAgY2RrUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgRGVwbG95bWVudFN0YWdlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBwcm9kRW52TmFtZSxcbiAgICAgICAgc3RhZ2VFbnYucHJvZCxcbiAgICAgICAgcHJvcHMuc3RhY2tOYW1lLFxuICAgICAgICBwcm9wcy5zdGFjayxcbiAgICAgICAgcHJvcHMuc3RhY2tDb25maWcucHJvZCxcbiAgICAgICAgcHJvcHMuZ2l0aHViUmVwbyxcbiAgICAgICAgcHJvcHMuZ2l0aHViQnJhbmNoLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgcHJlOiBpc0RyaWZ0Q2hlY2tTdGVwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIG5ldyBGYWlsT25EcmlmdEJ1aWxkU3RlcChcIkRyaWZ0T25GYWlsUHJvZENoZWNrXCIsIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50RW52OiBzdGFnZUVudi5wcm9kLFxuICAgICAgICAgICAgICAgIHN0YWNrSWQ6IGdldFN0YWNrSWQocHJvZEVudk5hbWUpLFxuICAgICAgICAgICAgICAgIGNka0NvbW1hbmQ6IGNka1J1bkNtZCxcbiAgICAgICAgICAgICAgICBpbnN0YWxsQ29tbWFuZDogY2RrSW5zdGFsbENtZCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjZGtQaXBlbGluZS5idWlsZFBpcGVsaW5lKCk7XG5cbiAgICBpZiAoc3RyaXBBc3NldHNGcm9tQXNzZW1ibHkpIHtcbiAgICAgIGNka1BpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICBzdHJpcEFzc2V0c0Zyb21Bc3NlbWJseS5wcm9qZWN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlU2xhY2tOb3RpZmljYXRpb24gPz8gdHJ1ZSkge1xuICAgICAgY29uc3QgYWxlcnRzQnVpbGRTbGFja0NvbmZpZ0FybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCIvY2hhdGJvdF9hcm4vc2xhY2svYWxlcnRzLWJ1aWxkXCIsXG4gICAgICApO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbi5mcm9tU2xhY2tDaGFubmVsQ29uZmlndXJhdGlvbkFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTbGFja0NoYW5uZWxDb25maWd1cmF0aW9uXCIsXG4gICAgICAgIGFsZXJ0c0J1aWxkU2xhY2tDb25maWdBcm4sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnBpcGVsaW5lLm5vdGlmeU9uKFwiUGlwZWxpbmVTbGFja05vdGlmaWNhdGlvblwiLCB0YXJnZXQsIHtcbiAgICAgICAgZXZlbnRzOiBwcm9wcy5ub3RpZmljYXRpb25FdmVudHMgfHwgW1xuICAgICAgICAgIFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9GQUlMRUQsXG4gICAgICAgIF0sXG4gICAgICAgIGRldGFpbFR5cGU6IERldGFpbFR5cGUuRlVMTCxcbiAgICAgICAgbm90aWZpY2F0aW9uUnVsZU5hbWU6IGBPcmNhQnVzLSR7cHJvcHMucGlwZWxpbmVOYW1lfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBNYW51YWxBcHByb3ZhbEFjdGlvblN0ZXAgd2l0aCByZXF1aXJlZCBydW5PcmRlci5cbiAqL1xuaW50ZXJmYWNlIE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzIGV4dGVuZHMgTWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIG9yZGVyIGZvciB0aGlzIGFjdGlvbiBpbiB0aGUgcGlwZWxpbmUgc3RhZ2UuIFRoZSBzdGFnZSBQcmUvUG9zdCBvcmRlciBkb2VzIG5vdCBhcHBseSB0byB0aGlzIGN1c3RvbVxuICAgKiBzdGVwL2FjdGlvbiwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJ1bk9yZGVyLlxuICAgKi9cbiAgcnVuT3JkZXI6IG51bWJlcjtcbn1cbi8qKlxuICogQ3VzdG9tIG1hbnVhbCBhcHByb3ZhbCBzdGVwIGZvciBDREsgQ29kZVBpcGVsaW5lLlxuICpcbiAqIFRoaXMgY2xhc3MgYnJpZGdlcyB0aGUgZ2FwIHRvIGVuYWJsZSB1c2luZyBNYW51YWxBcHByb3ZhbEFjdGlvbiB3aXRoaW4gYSBTdGVwIGNsYXNzLFxuICogbWFraW5nIGl0IGNvbXBhdGlibGUgd2l0aCBjZGsucGlwZWxpbmVzIGNvbnN0cnVjdHMuXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc3RlcC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBtYW51YWwgYXBwcm92YWwgYWN0aW9uLCBpbmNsdWRpbmdcbiAqL1xuY2xhc3MgTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwXG4gIGV4dGVuZHMgU3RlcFxuICBpbXBsZW1lbnRzIElDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wczogTWFudWFsQXBwcm92YWxBY3Rpb25TdGVwUHJvcHM7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IE1hbnVhbEFwcHJvdmFsQWN0aW9uU3RlcFByb3BzKSB7XG4gICAgc3VwZXIoaWQpO1xuICAgIHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcHJvZHVjZUFjdGlvbihcbiAgICBzdGFnZTogSVN0YWdlLFxuICAgIG9wdGlvbnM6IFByb2R1Y2VBY3Rpb25PcHRpb25zLFxuICApOiBDb2RlUGlwZWxpbmVBY3Rpb25GYWN0b3J5UmVzdWx0IHtcbiAgICBzdGFnZS5hZGRBY3Rpb24obmV3IE1hbnVhbEFwcHJvdmFsQWN0aW9uKHRoaXMubWFudWFsQXBwcm92YWxBY3Rpb25Qcm9wcykpO1xuXG4gICAgcmV0dXJuIHsgcnVuT3JkZXJzQ29uc3VtZWQ6IDEgfTtcbiAgfVxufVxuXG5jbGFzcyBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgZW52aXJvbm1lbnROYW1lOiBzdHJpbmcsXG4gICAgZW52OiBFbnZpcm9ubWVudCxcbiAgICBzdGFja05hbWU6IHN0cmluZyxcbiAgICBzdGFja0NsYXNzOiBuZXcgKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpID0+IFN0YWNrLFxuICAgIGFwcFN0YWNrUHJvcHM6IGFueSxcbiAgICBnaXRodWJSZXBvOiBzdHJpbmcsXG4gICAgZ2l0aHViQnJhbmNoPzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgZW52aXJvbm1lbnROYW1lLCB7IGVudjogZW52IH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IGBodHRwczovL2dpdGh1Yi5jb20vT3JjYUJ1cy8ke2dpdGh1YlJlcG99YDtcbiAgICBpZiAoZ2l0aHViQnJhbmNoICE9PSB1bmRlZmluZWQgJiYgZ2l0aHViQnJhbmNoICE9PSBcIm1haW5cIikge1xuICAgICAgc291cmNlID0gYCR7c291cmNlfS90cmVlLyR7Z2l0aHViQnJhbmNofWA7XG4gICAgfVxuXG4gICAgbmV3IHN0YWNrQ2xhc3ModGhpcywgc3RhY2tOYW1lLCB7XG4gICAgICBlbnY6IGVudixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgXCJ1bWNjci1vcmc6UHJvZHVjdFwiOiBcIk9yY2FCdXNcIixcbiAgICAgICAgXCJ1bWNjci1vcmc6Q3JlYXRvclwiOiBcIkNES1wiLFxuICAgICAgICBcInVtY2NyLW9yZzpTZXJ2aWNlXCI6IHN0YWNrTmFtZSxcbiAgICAgICAgXCJ1bWNjci1vcmc6U291cmNlXCI6IHNvdXJjZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcHBTdGFja1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbE9uRHJpZnRCdWlsZFN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBBV1MgYWNjb3VudCBhbmQgcmVnaW9uIHdoZXJlIHRoZSBkcmlmdCBjaGVjayBydW5zLlxuICAgKiBVc2VkIHRvIGFzc3VtZSB0aGUgQ0RLIGxvb2t1cCByb2xlIGFuZCBzZXQgQVdTX0RFRkFVTFRfUkVHSU9OLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEVudjogRW52aXJvbm1lbnQ7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgQ0RLIHN0YWNrIElEIHRvIGNoZWNrIGZvciBkcmlmdC5cbiAgICpcbiAgICogRm9ybWF0OiBgPHJvb3RTdGFjaz4vPGNvbnN0cnVjdElkPi88ZW52TmFtZT4vPHN0YWNrTmFtZT5gXG4gICAqXG4gICAqIEV4YW1wbGU6IGBEZXZTdGFjay9EZXBsb3ltZW50UGlwZWxpbmUvT3JjYUJ1c0JldGEvVGVzdFN0YWNrYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tJZDogc3RyaW5nO1xuICAvKipcbiAgICogQ0RLIENMSSBlbnRyeXBvaW50IHVzZWQgdG8gcnVuIHRoZSBkcmlmdCBjb21tYW5kLlxuICAgKiBFeGFtcGxlczogXCJwbnBtIGNka1wiLCBcInBucG0gY2RrLXN0YXRlZnVsXCIsIFwicG5wbSBjZGstc3RhdGVsZXNzXCIuXG4gICAqIE11c3Qgc3VwcG9ydDogXCJkcmlmdCA8c3RhY2tJZD5cIi5cbiAgICovXG4gIHJlYWRvbmx5IGNka0NvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICAgKiBJZiB5b3VyIGFwcCBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgcHJlZml4IHdpdGggXCJjZCA8ZGlyPiAmJlwiLlxuICAgKiBFeGFtcGxlOiBcImNkIGRldiAmJiBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0c1wiXG4gICAqXG4gICAqIEBkZWZhdWx0IERFRkFVTFRfSU5TVEFMTF9DT01NQU5EUyBtZXJnZWQgd2l0aCAmJi5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxDb21tYW5kPzogc3RyaW5nO1xufVxuXG5jbGFzcyBGYWlsT25EcmlmdEJ1aWxkU3RlcCBleHRlbmRzIENvZGVCdWlsZFN0ZXAge1xuICBjb25zdHJ1Y3RvcihcbiAgICBpZDogc3RyaW5nLFxuICAgIHtcbiAgICAgIGFjY291bnRFbnYsXG4gICAgICBzdGFja0lkLFxuICAgICAgY2RrQ29tbWFuZCxcbiAgICAgIGluc3RhbGxDb21tYW5kLFxuICAgIH06IEZhaWxPbkRyaWZ0QnVpbGRTdGVwUHJvcHMsXG4gICkge1xuICAgIGNvbnN0IGNka0luc3RhbGwgPSBpbnN0YWxsQ29tbWFuZFxuICAgICAgPyBpbnN0YWxsQ29tbWFuZFxuICAgICAgOiBERUZBVUxUX0lOU1RBTExfQ09NTUFORFMuam9pbihcIiAmJiBcIik7XG5cbiAgICBzdXBlcihpZCwge1xuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgY2RrSW5zdGFsbCxcblxuICAgICAgICBgTE9PS1VQX1JPTEVfQVJOPVwiYXJuOmF3czppYW06OiR7YWNjb3VudEVudi5hY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtJHthY2NvdW50RW52LmFjY291bnR9LSR7YWNjb3VudEVudi5yZWdpb259XCJgLFxuICAgICAgICAnU0VTU0lPTl9OQU1FPVwiZHJpZnQtY2hlY2tcIicsXG4gICAgICAgICdyZWFkIEFXU19BQ0NFU1NfS0VZX0lEIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBBV1NfU0VTU0lPTl9UT0tFTiA8IDwoYXdzIHN0cyBhc3N1bWUtcm9sZSAtLXJvbGUtYXJuIFwiJExPT0tVUF9ST0xFX0FSTlwiIC0tcm9sZS1zZXNzaW9uLW5hbWUgXCIkU0VTU0lPTl9OQU1FXCIgLS1kdXJhdGlvbi1zZWNvbmRzIDkwMCAtLXF1ZXJ5IFxcJ0NyZWRlbnRpYWxzLltBY2Nlc3NLZXlJZCxTZWNyZXRBY2Nlc3NLZXksU2Vzc2lvblRva2VuXVxcJyAtLW91dHB1dCB0ZXh0KScsXG4gICAgICAgIFwiZXhwb3J0IEFXU19BQ0NFU1NfS0VZX0lEIEFXU19TRUNSRVRfQUNDRVNTX0tFWSBBV1NfU0VTU0lPTl9UT0tFTlwiLFxuICAgICAgICBgZXhwb3J0IEFXU19ERUZBVUxUX1JFR0lPTj1cIiR7YWNjb3VudEVudi5yZWdpb259XCJgLFxuICAgICAgICBcImF3cyBzdHMgZ2V0LWNhbGxlci1pZGVudGl0eVwiLFxuXG4gICAgICAgIGBpZiAke2Nka0NvbW1hbmR9IGxzIHwgZ3JlcCAtRnEgXCIke3N0YWNrSWR9XCI7IHRoZW4gZWNobyBcIlN0YWNrICR7c3RhY2tJZH0gZm91bmQ7IGNoZWNraW5nIGZvciBkcmlmdC4uLlwiOyAke2Nka0NvbW1hbmR9IGRyaWZ0IFwiJHtzdGFja0lkfVwiIC1lIC0tZmFpbDsgZWxzZSBlY2hvIFwiU3RhY2sgbm90IGZvdW5kIGluIGNkayBsczsgc2tpcHBpbmcgZHJpZnQgY2hlY2suXCI7IGZpYCxcbiAgICAgIF0sXG4gICAgICByb2xlUG9saWN5U3RhdGVtZW50czogW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzdHM6QXNzdW1lUm9sZVwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmlhbTo6JHthY2NvdW50RW52LmFjY291bnR9OnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0ke2FjY291bnRFbnYuYWNjb3VudH0tJHthY2NvdW50RW52LnJlZ2lvbn1gLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
package/dynamodb/index.js CHANGED
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
40
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
41
  const config_1 = require("./config");
42
42
  class DynamoDbPartitionedConstruct extends constructs_1.Construct {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.1.2" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "1.2.1" };
44
44
  table;
45
45
  constructor(scope, id, props) {
46
46
  super(scope, id);
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
75
75
  }
76
76
  exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
77
77
  class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
78
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.1.2" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "1.2.1" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
55
55
  ['ARM64']: lambda.Architecture.ARM_64
56
56
  };
57
57
  class EcsFargateTaskConstruct extends constructs_1.Construct {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.1.2" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "1.2.1" };
59
59
  cluster;
60
60
  taskDefinition;
61
61
  taskExecutionRole;
@@ -17,7 +17,7 @@ var SfnEventStatus;
17
17
  SfnEventStatus["ABORTED"] = "ABORTED";
18
18
  })(SfnEventStatus || (exports.SfnEventStatus = SfnEventStatus = {}));
19
19
  class SfnSlackNotification extends constructs_1.Construct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.1.2" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.eventbridgeRule.SfnSlackNotification", version: "1.2.1" };
21
21
  rule;
22
22
  constructor(scope, id, props) {
23
23
  super(scope, id);
package/lambda/index.js CHANGED
@@ -57,7 +57,7 @@ function getPythonUvDockerImage() {
57
57
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
58
58
  }
59
59
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
60
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.1.2" };
60
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "1.2.1" };
61
61
  // Class constructs, to be used for caching the layers
62
62
  // This means that if there are multiple lambdas throughout the stack
63
63
  // They will all use the same layer
@@ -77,17 +77,17 @@ chardet = ">=3.0.2"
77
77
 
78
78
  [[package]]
79
79
  name = "boto3"
80
- version = "1.42.35"
80
+ version = "1.42.46"
81
81
  description = "The AWS SDK for Python"
82
82
  optional = false
83
83
  python-versions = ">=3.9"
84
84
  files = [
85
- {file = "boto3-1.42.35-py3-none-any.whl", hash = "sha256:4251bbac90e4a190680439973d9e9ed851e50292c10cd063c8bf0c365410ffe1"},
86
- {file = "boto3-1.42.35.tar.gz", hash = "sha256:edbfbfbadd419e65888166dd044786d4b731cf60abeb2301b73e775e154d7c5e"},
85
+ {file = "boto3-1.42.46-py3-none-any.whl", hash = "sha256:679cf4930e559621653bbd1439cf6e93b138cbaf46e36e5d7d95319999b7a356"},
86
+ {file = "boto3-1.42.46.tar.gz", hash = "sha256:c8c82ab34dd8d2d4d93a562d0e75fca164efa644651d3ccddb0f4aa88a481b38"},
87
87
  ]
88
88
 
89
89
  [package.dependencies]
90
- botocore = ">=1.42.35,<1.43.0"
90
+ botocore = ">=1.42.46,<1.43.0"
91
91
  jmespath = ">=0.7.1,<2.0.0"
92
92
  s3transfer = ">=0.16.0,<0.17.0"
93
93
 
@@ -96,13 +96,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
96
96
 
97
97
  [[package]]
98
98
  name = "botocore"
99
- version = "1.42.35"
99
+ version = "1.42.46"
100
100
  description = "Low-level, data-driven core of boto 3."
101
101
  optional = false
102
102
  python-versions = ">=3.9"
103
103
  files = [
104
- {file = "botocore-1.42.35-py3-none-any.whl", hash = "sha256:b89f527987691abbd1374c4116cc2711471ce48e6da502db17e92b17b2af8d47"},
105
- {file = "botocore-1.42.35.tar.gz", hash = "sha256:40a6e0f16afe9e5d42e956f0b6d909869793fadb21780e409063601fc3d094b8"},
104
+ {file = "botocore-1.42.46-py3-none-any.whl", hash = "sha256:f7459fcf586f38a3b0a242a172d3332141c770a3f5767bbb21e79d810db95d75"},
105
+ {file = "botocore-1.42.46.tar.gz", hash = "sha256:fc290b33aba6e271f627c4f46b8bcebfa1a94e19157d396732da417404158c01"},
106
106
  ]
107
107
 
108
108
  [package.dependencies]
@@ -332,23 +332,24 @@ testing = ["pytest (<9)", "pytest-mock"]
332
332
 
333
333
  [[package]]
334
334
  name = "fastapi"
335
- version = "0.128.0"
335
+ version = "0.128.7"
336
336
  description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
337
337
  optional = false
338
338
  python-versions = ">=3.9"
339
339
  files = [
340
- {file = "fastapi-0.128.0-py3-none-any.whl", hash = "sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d"},
341
- {file = "fastapi-0.128.0.tar.gz", hash = "sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a"},
340
+ {file = "fastapi-0.128.7-py3-none-any.whl", hash = "sha256:6bd9bd31cb7047465f2d3fa3ba3f33b0870b17d4eaf7cdb36d1576ab060ad662"},
341
+ {file = "fastapi-0.128.7.tar.gz", hash = "sha256:783c273416995486c155ad2c0e2b45905dedfaf20b9ef8d9f6a9124670639a24"},
342
342
  ]
343
343
 
344
344
  [package.dependencies]
345
345
  annotated-doc = ">=0.0.2"
346
346
  pydantic = ">=2.7.0"
347
- starlette = ">=0.40.0,<0.51.0"
347
+ starlette = ">=0.40.0,<1.0.0"
348
348
  typing-extensions = ">=4.8.0"
349
+ typing-inspection = ">=0.4.2"
349
350
 
350
351
  [package.extras]
351
- all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
352
+ all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.9.3)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=5.8.0)", "uvicorn[standard] (>=0.12.0)"]
352
353
  standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
353
354
  standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0,<1.0.0)", "jinja2 (>=3.1.5)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"]
354
355
 
@@ -526,83 +527,83 @@ files = [
526
527
 
527
528
  [[package]]
528
529
  name = "numpy"
529
- version = "2.4.1"
530
+ version = "2.4.2"
530
531
  description = "Fundamental package for array computing in Python"
531
532
  optional = false
532
533
  python-versions = ">=3.11"
533
534
  files = [
534
- {file = "numpy-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0cce2a669e3c8ba02ee563c7835f92c153cf02edff1ae05e1823f1dde21b16a5"},
535
- {file = "numpy-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:899d2c18024984814ac7e83f8f49d8e8180e2fbe1b2e252f2e7f1d06bea92425"},
536
- {file = "numpy-2.4.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:09aa8a87e45b55a1c2c205d42e2808849ece5c484b2aab11fecabec3841cafba"},
537
- {file = "numpy-2.4.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:edee228f76ee2dab4579fad6f51f6a305de09d444280109e0f75df247ff21501"},
538
- {file = "numpy-2.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a92f227dbcdc9e4c3e193add1a189a9909947d4f8504c576f4a732fd0b54240a"},
539
- {file = "numpy-2.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:538bf4ec353709c765ff75ae616c34d3c3dca1a68312727e8f2676ea644f8509"},
540
- {file = "numpy-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ac08c63cb7779b85e9d5318e6c3518b424bc1f364ac4cb2c6136f12e5ff2dccc"},
541
- {file = "numpy-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f9c360ecef085e5841c539a9a12b883dff005fbd7ce46722f5e9cef52634d82"},
542
- {file = "numpy-2.4.1-cp311-cp311-win32.whl", hash = "sha256:0f118ce6b972080ba0758c6087c3617b5ba243d806268623dc34216d69099ba0"},
543
- {file = "numpy-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:18e14c4d09d55eef39a6ab5b08406e84bc6869c1e34eef45564804f90b7e0574"},
544
- {file = "numpy-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:6461de5113088b399d655d45c3897fa188766415d0f568f175ab071c8873bd73"},
545
- {file = "numpy-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2"},
546
- {file = "numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8"},
547
- {file = "numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a"},
548
- {file = "numpy-2.4.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0"},
549
- {file = "numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c"},
550
- {file = "numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02"},
551
- {file = "numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162"},
552
- {file = "numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9"},
553
- {file = "numpy-2.4.1-cp312-cp312-win32.whl", hash = "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f"},
554
- {file = "numpy-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87"},
555
- {file = "numpy-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8"},
556
- {file = "numpy-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b"},
557
- {file = "numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f"},
558
- {file = "numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9"},
559
- {file = "numpy-2.4.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e"},
560
- {file = "numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5"},
561
- {file = "numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8"},
562
- {file = "numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c"},
563
- {file = "numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2"},
564
- {file = "numpy-2.4.1-cp313-cp313-win32.whl", hash = "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d"},
565
- {file = "numpy-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb"},
566
- {file = "numpy-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5"},
567
- {file = "numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7"},
568
- {file = "numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d"},
569
- {file = "numpy-2.4.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15"},
570
- {file = "numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9"},
571
- {file = "numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2"},
572
- {file = "numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505"},
573
- {file = "numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2"},
574
- {file = "numpy-2.4.1-cp313-cp313t-win32.whl", hash = "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4"},
575
- {file = "numpy-2.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510"},
576
- {file = "numpy-2.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261"},
577
- {file = "numpy-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3869ea1ee1a1edc16c29bbe3a2f2a4e515cc3a44d43903ad41e0cacdbaf733dc"},
578
- {file = "numpy-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3"},
579
- {file = "numpy-2.4.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220"},
580
- {file = "numpy-2.4.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f0a90aba7d521e6954670550e561a4cb925713bd944445dbe9e729b71f6cabee"},
581
- {file = "numpy-2.4.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556"},
582
- {file = "numpy-2.4.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844"},
583
- {file = "numpy-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3"},
584
- {file = "numpy-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205"},
585
- {file = "numpy-2.4.1-cp314-cp314-win32.whl", hash = "sha256:727c6c3275ddefa0dc078524a85e064c057b4f4e71ca5ca29a19163c607be745"},
586
- {file = "numpy-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:7d5d7999df434a038d75a748275cd6c0094b0ecdb0837342b332a82defc4dc4d"},
587
- {file = "numpy-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:ce9ce141a505053b3c7bce3216071f3bf5c182b8b28930f14cd24d43932cd2df"},
588
- {file = "numpy-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f"},
589
- {file = "numpy-2.4.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0"},
590
- {file = "numpy-2.4.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:fb1461c99de4d040666ca0444057b06541e5642f800b71c56e6ea92d6a853a0c"},
591
- {file = "numpy-2.4.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93"},
592
- {file = "numpy-2.4.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42"},
593
- {file = "numpy-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01"},
594
- {file = "numpy-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7b6b5e28bbd47b7532698e5db2fe1db693d84b58c254e4389d99a27bb9b8f6b"},
595
- {file = "numpy-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:5de60946f14ebe15e713a6f22850c2372fa72f4ff9a432ab44aa90edcadaa65a"},
596
- {file = "numpy-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8f085da926c0d491ffff3096f91078cc97ea67e7e6b65e490bc8dcda65663be2"},
597
- {file = "numpy-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295"},
598
- {file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8ad35f20be147a204e28b6a0575fbf3540c5e5f802634d4258d55b1ff5facce1"},
599
- {file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8097529164c0f3e32bb89412a0905d9100bf434d9692d9fc275e18dcf53c9344"},
600
- {file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:ea66d2b41ca4a1630aae5507ee0a71647d3124d1741980138aa8f28f44dac36e"},
601
- {file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d3f8f0df9f4b8be57b3bf74a1d087fec68f927a2fab68231fdb442bf2c12e426"},
602
- {file = "numpy-2.4.1-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2023ef86243690c2791fd6353e5b4848eedaa88ca8a2d129f462049f6d484696"},
603
- {file = "numpy-2.4.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8361ea4220d763e54cff2fbe7d8c93526b744f7cd9ddab47afeff7e14e8503be"},
604
- {file = "numpy-2.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4f1b68ff47680c2925f8063402a693ede215f0257f02596b1318ecdfb1d79e33"},
605
- {file = "numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690"},
535
+ {file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"},
536
+ {file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"},
537
+ {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7"},
538
+ {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73"},
539
+ {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1"},
540
+ {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32"},
541
+ {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390"},
542
+ {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413"},
543
+ {file = "numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda"},
544
+ {file = "numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695"},
545
+ {file = "numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3"},
546
+ {file = "numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a"},
547
+ {file = "numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1"},
548
+ {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e"},
549
+ {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27"},
550
+ {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548"},
551
+ {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f"},
552
+ {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460"},
553
+ {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba"},
554
+ {file = "numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f"},
555
+ {file = "numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85"},
556
+ {file = "numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa"},
557
+ {file = "numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c"},
558
+ {file = "numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979"},
559
+ {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98"},
560
+ {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef"},
561
+ {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7"},
562
+ {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499"},
563
+ {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb"},
564
+ {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7"},
565
+ {file = "numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110"},
566
+ {file = "numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622"},
567
+ {file = "numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71"},
568
+ {file = "numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262"},
569
+ {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913"},
570
+ {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab"},
571
+ {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82"},
572
+ {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f"},
573
+ {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554"},
574
+ {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257"},
575
+ {file = "numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657"},
576
+ {file = "numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b"},
577
+ {file = "numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1"},
578
+ {file = "numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b"},
579
+ {file = "numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000"},
580
+ {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1"},
581
+ {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74"},
582
+ {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a"},
583
+ {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325"},
584
+ {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909"},
585
+ {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a"},
586
+ {file = "numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a"},
587
+ {file = "numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75"},
588
+ {file = "numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05"},
589
+ {file = "numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308"},
590
+ {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef"},
591
+ {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d"},
592
+ {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8"},
593
+ {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5"},
594
+ {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e"},
595
+ {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a"},
596
+ {file = "numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443"},
597
+ {file = "numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236"},
598
+ {file = "numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181"},
599
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082"},
600
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a"},
601
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920"},
602
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821"},
603
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb"},
604
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0"},
605
+ {file = "numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0"},
606
+ {file = "numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"},
606
607
  ]
607
608
 
608
609
  [[package]]
@@ -882,20 +883,20 @@ typing-extensions = ">=4.14.1"
882
883
 
883
884
  [[package]]
884
885
  name = "pyjwt"
885
- version = "2.10.1"
886
+ version = "2.11.0"
886
887
  description = "JSON Web Token implementation in Python"
887
888
  optional = false
888
889
  python-versions = ">=3.9"
889
890
  files = [
890
- {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"},
891
- {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"},
891
+ {file = "pyjwt-2.11.0-py3-none-any.whl", hash = "sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469"},
892
+ {file = "pyjwt-2.11.0.tar.gz", hash = "sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623"},
892
893
  ]
893
894
 
894
895
  [package.extras]
895
896
  crypto = ["cryptography (>=3.4.0)"]
896
- dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"]
897
+ dev = ["coverage[toml] (==7.10.7)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=8.4.2,<9.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"]
897
898
  docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"]
898
- tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
899
+ tests = ["coverage[toml] (==7.10.7)", "pytest (>=8.4.2,<9.0.0)"]
899
900
 
900
901
  [[package]]
901
902
  name = "pyparsing"
@@ -1211,13 +1212,13 @@ files = [
1211
1212
 
1212
1213
  [[package]]
1213
1214
  name = "starlette"
1214
- version = "0.50.0"
1215
+ version = "0.52.1"
1215
1216
  description = "The little ASGI library that shines."
1216
1217
  optional = false
1217
1218
  python-versions = ">=3.10"
1218
1219
  files = [
1219
- {file = "starlette-0.50.0-py3-none-any.whl", hash = "sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca"},
1220
- {file = "starlette-0.50.0.tar.gz", hash = "sha256:a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca"},
1220
+ {file = "starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74"},
1221
+ {file = "starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933"},
1221
1222
  ]
1222
1223
 
1223
1224
  [package.dependencies]
@@ -1308,13 +1309,13 @@ test = ["pytest", "websockets"]
1308
1309
 
1309
1310
  [[package]]
1310
1311
  name = "wrapica"
1311
- version = "2.40.1.post20251107162736"
1312
+ version = "2.40.1.post20260211135303"
1312
1313
  description = "Secondary level functions for ICAv2 based off libica"
1313
1314
  optional = false
1314
1315
  python-versions = "<3.15,>=3.12"
1315
1316
  files = [
1316
- {file = "wrapica-2.40.1.post20251107162736-py3-none-any.whl", hash = "sha256:1e157934f6f78f31725a389e61a73eb7049be8d90436dab8b293f8ff9078635e"},
1317
- {file = "wrapica-2.40.1.post20251107162736.tar.gz", hash = "sha256:39256764f6480bb4410cdf5ebc88142a0824dc15ba84a446b876f7dbcc379999"},
1317
+ {file = "wrapica-2.40.1.post20260211135303-py3-none-any.whl", hash = "sha256:fdaa1cd38afad6c49aee73cf850fc677d6c44888513a720179d4ef2ec9c8dccf"},
1318
+ {file = "wrapica-2.40.1.post20260211135303.tar.gz", hash = "sha256:9ed8dac997dfb7f0b330b0a17fc3a01951973ca9cf3707cc2a54c395e975c5aa"},
1318
1319
  ]
1319
1320
 
1320
1321
  [package.dependencies]
@@ -1340,4 +1341,4 @@ toml = ["tomli_w (>=1.0.0,<2)"]
1340
1341
  [metadata]
1341
1342
  lock-version = "2.0"
1342
1343
  python-versions = "^3.14, <3.15"
1343
- content-hash = "a5b62376948887cdd479c0fae46e967b0b2c0bf2e6734d299be2d82ee09b48fe"
1344
+ content-hash = "12f2100ad25049928ca20166a4461fb1b983bded05699415292e3fe136b0e871"
@@ -15,7 +15,7 @@ repository = "https://github.com/orcabus/platform-cdk-constructs"
15
15
 
16
16
  [tool.poetry.dependencies]
17
17
  python = "^3.14, <3.15"
18
- wrapica = "2.40.1.post20251107162736"
18
+ wrapica = "2.40.1.post20260211135303"
19
19
 
20
20
  [tool.poetry.group.dev]
21
21
  optional = true
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
13
  * SNS topic.
14
14
  */
15
15
  class MonitoredQueue extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.1.2" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "1.2.1" };
17
17
  queue;
18
18
  deadLetterQueue;
19
19
  alarm;
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.1.2" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "1.2.1" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "1.1.2",
3
+ "version": "1.2.1",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.1.2" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "1.2.1" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.1.2" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "1.2.1" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.1.2" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "1.2.1" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
11
11
  * A helper class to construct the arn for the slack SNS topic.
12
12
  */
13
13
  class SlackAlerts {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.1.2" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "1.2.1" };
15
15
  /**
16
16
  * Format the ARN for the slack alerts SNS topic for the current stack.
17
17
  * @param stack