@decaf-ts/integrations 0.3.7 → 0.3.9
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/dist/integrations.cjs +3 -3
- package/dist/integrations.js +3 -3
- package/lib/cjs/graph/engine/constants.cjs +58 -0
- package/lib/cjs/graph/engine/decorators.cjs +4 -0
- package/lib/cjs/graph/engine/errors/GraphCycleError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs +27 -0
- package/lib/cjs/graph/engine/errors/GraphInputError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphPinningError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphPortError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphStoreError.cjs +20 -0
- package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs +20 -0
- package/lib/cjs/graph/{errors → engine/errors}/index.cjs +2 -2
- package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs +4 -0
- package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs +40 -0
- package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs +37 -0
- package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs +4 -0
- package/lib/cjs/graph/{events → engine/events}/index.cjs +2 -2
- package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs +4 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs +79 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs +408 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs +32 -0
- package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs +30 -0
- package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs +4 -0
- package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +103 -0
- package/lib/cjs/graph/{execution → engine/execution}/index.cjs +2 -2
- package/lib/cjs/graph/engine/index.cjs +84 -0
- package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs +87 -0
- package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +85 -0
- package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs +85 -0
- package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs +16 -0
- package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs +77 -0
- package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs +78 -0
- package/lib/cjs/graph/{loops → engine/loops}/index.cjs +2 -2
- package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs +28 -0
- package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs +20 -0
- package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs +34 -0
- package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs +191 -0
- package/lib/cjs/graph/{pinning → engine/pinning}/index.cjs +2 -2
- package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs +4 -0
- package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs +197 -0
- package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs +172 -0
- package/lib/cjs/graph/engine/planning/GraphTopology.cjs +57 -0
- package/lib/cjs/graph/{planning → engine/planning}/index.cjs +2 -2
- package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs +44 -0
- package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs +27 -0
- package/lib/cjs/graph/{registry → engine/registry}/index.cjs +2 -2
- package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
- package/lib/cjs/graph/{snapshots → engine/snapshots}/index.cjs +2 -2
- package/lib/cjs/graph/engine/store/GraphCachedValue.cjs +4 -0
- package/lib/cjs/graph/engine/store/GraphValueKey.cjs +4 -0
- package/lib/cjs/graph/engine/store/GraphValueStore.cjs +76 -0
- package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs +4 -0
- package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
- package/lib/cjs/graph/{store → engine/store}/index.cjs +2 -2
- package/lib/cjs/graph/engine/types.cjs +4 -0
- package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs +33 -0
- package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs +58 -0
- package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs +52 -0
- package/lib/cjs/graph/{validation → engine/validation}/index.cjs +2 -2
- package/lib/cjs/graph/index.cjs +10 -60
- package/lib/cjs/graph/shared/constants.cjs +44 -0
- package/lib/cjs/graph/shared/index.cjs +38 -0
- package/lib/cjs/graph/{nodes → shared/nodes}/agent.cjs +2 -2
- package/lib/cjs/graph/shared/nodes/base.cjs +35 -0
- package/lib/cjs/graph/shared/nodes/category-styles.cjs +38 -0
- package/lib/cjs/graph/shared/nodes/flow-control.cjs +464 -0
- package/lib/cjs/graph/{nodes → shared/nodes}/index.cjs +2 -2
- package/lib/cjs/graph/shared/nodes/triggers.cjs +250 -0
- package/lib/cjs/graph/shared/types.cjs +4 -0
- package/lib/cjs/index.cjs +3 -3
- package/lib/cjs/nest/index.cjs +2 -3
- package/lib/esm/graph/engine/constants.js +62 -0
- package/lib/esm/graph/engine/decorators.js +2 -0
- package/lib/esm/graph/engine/errors/GraphCycleError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphExecutionError.js +22 -0
- package/lib/esm/graph/engine/errors/GraphInputError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphLoopLimitError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphPinningError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphPortError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphStoreError.js +15 -0
- package/lib/esm/graph/engine/errors/GraphTopologyError.js +15 -0
- package/lib/esm/graph/engine/errors/index.js +14 -0
- package/lib/esm/graph/engine/events/GraphExecutionEvent.js +2 -0
- package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js +35 -0
- package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js +32 -0
- package/lib/esm/graph/engine/events/GraphExecutionObserver.js +2 -0
- package/lib/esm/graph/engine/events/index.js +10 -0
- package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js +18 -0
- package/lib/esm/graph/engine/execution/GraphExecutionContext.js +74 -0
- package/lib/esm/graph/engine/execution/GraphExecutionEngine.js +403 -0
- package/lib/esm/graph/engine/execution/GraphExecutionFrame.js +27 -0
- package/lib/esm/graph/engine/execution/GraphExecutionResult.js +26 -0
- package/lib/esm/graph/engine/execution/GraphNodeExecutor.js +2 -0
- package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +98 -0
- package/lib/esm/graph/engine/execution/index.js +13 -0
- package/lib/esm/graph/engine/index.js +67 -0
- package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js +82 -0
- package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +80 -0
- package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js +80 -0
- package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js +11 -0
- package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js +72 -0
- package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js +73 -0
- package/lib/esm/graph/engine/loops/index.js +12 -0
- package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js +23 -0
- package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js +15 -0
- package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js +29 -0
- package/lib/esm/graph/engine/pinning/GraphPinningService.js +186 -0
- package/lib/esm/graph/engine/pinning/index.js +10 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlan.js +2 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js +7 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js +2 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js +2 -0
- package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js +192 -0
- package/lib/esm/graph/engine/planning/GraphRelationResolver.js +167 -0
- package/lib/esm/graph/engine/planning/GraphTopology.js +52 -0
- package/lib/esm/graph/engine/planning/index.js +13 -0
- package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js +39 -0
- package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js +22 -0
- package/lib/esm/graph/engine/registry/index.js +8 -0
- package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js +48 -0
- package/lib/esm/graph/engine/snapshots/index.js +7 -0
- package/lib/esm/graph/engine/store/GraphCachedValue.js +2 -0
- package/lib/esm/graph/engine/store/GraphValueKey.js +7 -0
- package/lib/esm/graph/engine/store/GraphValueStore.js +71 -0
- package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js +2 -0
- package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js +64 -0
- package/lib/esm/graph/engine/store/index.js +11 -0
- package/lib/esm/graph/engine/types.js +2 -0
- package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js +28 -0
- package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js +53 -0
- package/lib/esm/graph/engine/validation/GraphValueValidator.js +47 -0
- package/lib/esm/graph/engine/validation/index.js +9 -0
- package/lib/esm/graph/index.js +9 -59
- package/lib/esm/graph/shared/constants.js +56 -0
- package/lib/esm/graph/shared/index.js +19 -0
- package/lib/esm/graph/shared/nodes/agent.js +101 -0
- package/lib/esm/graph/shared/nodes/base.js +30 -0
- package/lib/esm/graph/shared/nodes/category-styles.js +34 -0
- package/lib/esm/graph/shared/nodes/flow-control.js +455 -0
- package/lib/esm/graph/shared/nodes/index.js +18 -0
- package/lib/esm/graph/shared/nodes/triggers.js +241 -0
- package/lib/esm/graph/shared/types.js +2 -0
- package/lib/esm/index.js +3 -3
- package/lib/esm/nest/index.js +1 -2
- package/lib/types/graph/engine/constants.d.cts +59 -0
- package/lib/types/graph/engine/constants.d.mts +59 -0
- package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.cts +1 -1
- package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.mts +1 -1
- package/lib/types/graph/engine/index.d.cts +61 -0
- package/lib/types/graph/engine/index.d.mts +61 -0
- package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.cts +1 -1
- package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.mts +1 -1
- package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.cts +2 -1
- package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.mts +2 -1
- package/lib/types/graph/{types.d.cts → engine/types.d.cts} +8 -116
- package/lib/types/graph/{types.d.mts → engine/types.d.mts} +8 -116
- package/lib/types/graph/index.d.cts +8 -53
- package/lib/types/graph/index.d.mts +8 -53
- package/lib/types/graph/shared/constants.d.cts +53 -0
- package/lib/types/graph/shared/constants.d.mts +53 -0
- package/lib/types/graph/shared/index.d.cts +18 -0
- package/lib/types/graph/shared/index.d.mts +18 -0
- package/lib/types/graph/shared/types.d.cts +121 -0
- package/lib/types/graph/shared/types.d.mts +121 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/nest/index.d.cts +0 -1
- package/lib/types/nest/index.d.mts +0 -1
- package/package.json +25 -3
- package/lib/cjs/graph/constants.cjs +0 -94
- package/lib/cjs/graph/decorators.cjs +0 -4
- package/lib/cjs/graph/errors/GraphCycleError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphExecutionError.cjs +0 -27
- package/lib/cjs/graph/errors/GraphInputError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphPinningError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphPortError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphStoreError.cjs +0 -20
- package/lib/cjs/graph/errors/GraphTopologyError.cjs +0 -20
- package/lib/cjs/graph/events/GraphExecutionEvent.cjs +0 -4
- package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +0 -40
- package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +0 -37
- package/lib/cjs/graph/events/GraphExecutionObserver.cjs +0 -4
- package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +0 -4
- package/lib/cjs/graph/execution/GraphExecutionContext.cjs +0 -79
- package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +0 -407
- package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +0 -32
- package/lib/cjs/graph/execution/GraphExecutionResult.cjs +0 -30
- package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +0 -4
- package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +0 -103
- package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +0 -87
- package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +0 -84
- package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +0 -85
- package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +0 -16
- package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +0 -76
- package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +0 -77
- package/lib/cjs/graph/nodes/base.cjs +0 -35
- package/lib/cjs/graph/nodes/category-styles.cjs +0 -38
- package/lib/cjs/graph/nodes/flow-control.cjs +0 -464
- package/lib/cjs/graph/nodes/triggers.cjs +0 -250
- package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +0 -28
- package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +0 -20
- package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +0 -34
- package/lib/cjs/graph/pinning/GraphPinningService.cjs +0 -191
- package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +0 -4
- package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +0 -197
- package/lib/cjs/graph/planning/GraphRelationResolver.cjs +0 -172
- package/lib/cjs/graph/planning/GraphTopology.cjs +0 -57
- package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +0 -44
- package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +0 -27
- package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +0 -53
- package/lib/cjs/graph/store/GraphCachedValue.cjs +0 -4
- package/lib/cjs/graph/store/GraphValueKey.cjs +0 -4
- package/lib/cjs/graph/store/GraphValueStore.cjs +0 -76
- package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +0 -4
- package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +0 -69
- package/lib/cjs/graph/types.cjs +0 -4
- package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +0 -33
- package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +0 -58
- package/lib/cjs/graph/validation/GraphValueValidator.cjs +0 -52
- package/lib/esm/graph/constants.js +0 -106
- package/lib/esm/graph/decorators.js +0 -2
- package/lib/esm/graph/errors/GraphCycleError.js +0 -15
- package/lib/esm/graph/errors/GraphExecutionError.js +0 -22
- package/lib/esm/graph/errors/GraphInputError.js +0 -15
- package/lib/esm/graph/errors/GraphLoopLimitError.js +0 -15
- package/lib/esm/graph/errors/GraphPinningError.js +0 -15
- package/lib/esm/graph/errors/GraphPortError.js +0 -15
- package/lib/esm/graph/errors/GraphStoreError.js +0 -15
- package/lib/esm/graph/errors/GraphTopologyError.js +0 -15
- package/lib/esm/graph/errors/index.js +0 -14
- package/lib/esm/graph/events/GraphExecutionEvent.js +0 -2
- package/lib/esm/graph/events/GraphExecutionEventEmitter.js +0 -35
- package/lib/esm/graph/events/GraphExecutionEventFactory.js +0 -32
- package/lib/esm/graph/events/GraphExecutionObserver.js +0 -2
- package/lib/esm/graph/events/index.js +0 -10
- package/lib/esm/graph/execution/CodeSandboxEvaluator.js +0 -18
- package/lib/esm/graph/execution/GraphExecutionContext.js +0 -74
- package/lib/esm/graph/execution/GraphExecutionEngine.js +0 -402
- package/lib/esm/graph/execution/GraphExecutionFrame.js +0 -27
- package/lib/esm/graph/execution/GraphExecutionResult.js +0 -26
- package/lib/esm/graph/execution/GraphNodeExecutor.js +0 -2
- package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +0 -98
- package/lib/esm/graph/execution/index.js +0 -13
- package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +0 -82
- package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +0 -79
- package/lib/esm/graph/loops/GraphConditionEvaluator.js +0 -80
- package/lib/esm/graph/loops/GraphLoopExecutionContext.js +0 -11
- package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +0 -71
- package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +0 -72
- package/lib/esm/graph/loops/index.js +0 -12
- package/lib/esm/graph/nodes/agent.js +0 -101
- package/lib/esm/graph/nodes/base.js +0 -30
- package/lib/esm/graph/nodes/category-styles.js +0 -34
- package/lib/esm/graph/nodes/flow-control.js +0 -455
- package/lib/esm/graph/nodes/index.js +0 -18
- package/lib/esm/graph/nodes/triggers.js +0 -241
- package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +0 -23
- package/lib/esm/graph/pinning/GraphPinningMetadata.js +0 -15
- package/lib/esm/graph/pinning/GraphPinningPolicy.js +0 -29
- package/lib/esm/graph/pinning/GraphPinningService.js +0 -186
- package/lib/esm/graph/pinning/index.js +0 -10
- package/lib/esm/graph/planning/GraphExecutionPlan.js +0 -2
- package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +0 -7
- package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +0 -2
- package/lib/esm/graph/planning/GraphExecutionPlanNode.js +0 -2
- package/lib/esm/graph/planning/GraphExecutionPlanner.js +0 -192
- package/lib/esm/graph/planning/GraphRelationResolver.js +0 -167
- package/lib/esm/graph/planning/GraphTopology.js +0 -52
- package/lib/esm/graph/planning/index.js +0 -13
- package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +0 -39
- package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +0 -22
- package/lib/esm/graph/registry/index.js +0 -8
- package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +0 -48
- package/lib/esm/graph/snapshots/index.js +0 -7
- package/lib/esm/graph/store/GraphCachedValue.js +0 -2
- package/lib/esm/graph/store/GraphValueKey.js +0 -7
- package/lib/esm/graph/store/GraphValueStore.js +0 -71
- package/lib/esm/graph/store/GraphValueStoreAdapter.js +0 -2
- package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +0 -64
- package/lib/esm/graph/store/index.js +0 -11
- package/lib/esm/graph/types.js +0 -2
- package/lib/esm/graph/validation/GraphDefinitionValidator.js +0 -28
- package/lib/esm/graph/validation/GraphPortSchemaResolver.js +0 -53
- package/lib/esm/graph/validation/GraphValueValidator.js +0 -47
- package/lib/esm/graph/validation/index.js +0 -9
- package/lib/types/graph/constants.d.cts +0 -101
- package/lib/types/graph/constants.d.mts +0 -101
- /package/lib/types/graph/{decorators.d.cts → engine/decorators.d.cts} +0 -0
- /package/lib/types/graph/{decorators.d.mts → engine/decorators.d.mts} +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.mts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/index.d.cts +0 -0
- /package/lib/types/graph/{errors → engine/errors}/index.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.mts +0 -0
- /package/lib/types/graph/{events → engine/events}/index.d.cts +0 -0
- /package/lib/types/graph/{events → engine/events}/index.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/index.d.cts +0 -0
- /package/lib/types/graph/{execution → engine/execution}/index.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.mts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/index.d.cts +0 -0
- /package/lib/types/graph/{loops → engine/loops}/index.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.mts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/index.d.cts +0 -0
- /package/lib/types/graph/{pinning → engine/pinning}/index.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.mts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/index.d.cts +0 -0
- /package/lib/types/graph/{planning → engine/planning}/index.d.mts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.cts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.mts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.cts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.mts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/index.d.cts +0 -0
- /package/lib/types/graph/{registry → engine/registry}/index.d.mts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.cts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.mts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.cts +0 -0
- /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.mts +0 -0
- /package/lib/types/graph/{store → engine/store}/index.d.cts +0 -0
- /package/lib/types/graph/{store → engine/store}/index.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.mts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/index.d.cts +0 -0
- /package/lib/types/graph/{validation → engine/validation}/index.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/agent.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/agent.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/base.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/base.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/index.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/index.d.mts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.cts +0 -0
- /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.mts +0 -0
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GRAPH_FLOW_CONTROL_NODES = exports.CodeFlowNode = exports.ReturnFlowNode = exports.HumanApprovalFlowNode = exports.ErrorBoundaryFlowNode = exports.DelayFlowNode = exports.MapFlowNode = exports.MergeFlowNode = exports.ParallelFlowNode = exports.SwitchFlowNode = exports.IfFlowNode = void 0;
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
7
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
else
|
|
9
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
10
|
+
if (d = decorators[i])
|
|
11
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
};
|
|
14
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
16
|
+
return Reflect.metadata(k, v);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @module integrations/graph/nodes/flow-control
|
|
20
|
+
* @summary Production flow-control node kind declarations (DECAF-32 §22.2.2).
|
|
21
|
+
* @description Canonical `@node`-decorated classes for the ten ALFRED-5
|
|
22
|
+
* flow-control kinds. These are graph-level macros: the engine's planner
|
|
23
|
+
* recognises them as ordinary executable nodes (§5.7) but they have no
|
|
24
|
+
* built-in executors — downstream projects (e.g. ALFRED) register custom
|
|
25
|
+
* executors or compile them into Mastra composition APIs (§22.2.2).
|
|
26
|
+
*
|
|
27
|
+
* The three loop kinds (`core.loop.foreach/while/until`) already have built-in
|
|
28
|
+
* executors (§5.9) and are NOT redeclared here.
|
|
29
|
+
*/
|
|
30
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
31
|
+
const ui_decorators_1 = require("@decaf-ts/ui-decorators");
|
|
32
|
+
const graph_1 = require("@decaf-ts/ui-decorators/graph");
|
|
33
|
+
const base_js_1 = require("./base.cjs");
|
|
34
|
+
/**
|
|
35
|
+
* If — conditional branch. Evaluates a `ConditionExpression` (§22.3) and
|
|
36
|
+
* routes the input to the `then` or `else` output.
|
|
37
|
+
*/
|
|
38
|
+
let IfFlowNode = class IfFlowNode extends decorator_validation_1.Model {
|
|
39
|
+
};
|
|
40
|
+
exports.IfFlowNode = IfFlowNode;
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, decorator_validation_1.required)(),
|
|
43
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to evaluate" }),
|
|
44
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
45
|
+
__metadata("design:type", Object)
|
|
46
|
+
], IfFlowNode.prototype, "value", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, decorator_validation_1.required)(),
|
|
49
|
+
(0, ui_decorators_1.uielement)("input", { label: "Then", placeholder: "Output when condition is true" }),
|
|
50
|
+
(0, graph_1.output)({ handle: "then" }),
|
|
51
|
+
__metadata("design:type", Object)
|
|
52
|
+
], IfFlowNode.prototype, "then", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, decorator_validation_1.required)(),
|
|
55
|
+
(0, ui_decorators_1.uielement)("input", { label: "Else", placeholder: "Output when condition is false" }),
|
|
56
|
+
(0, graph_1.output)({ handle: "else" }),
|
|
57
|
+
__metadata("design:type", Object)
|
|
58
|
+
], IfFlowNode.prototype, "else", void 0);
|
|
59
|
+
exports.IfFlowNode = IfFlowNode = __decorate([
|
|
60
|
+
(0, graph_1.node)("core.flow.if", {
|
|
61
|
+
kind: "core.flow.if",
|
|
62
|
+
category: "Flow Control",
|
|
63
|
+
color: "#f59e0b",
|
|
64
|
+
icon: "ti-arrows-split-2",
|
|
65
|
+
width: 96,
|
|
66
|
+
height: 96,
|
|
67
|
+
labels: ["flow", "conditional", "branch"],
|
|
68
|
+
metadata: {
|
|
69
|
+
title: "If",
|
|
70
|
+
description: "Conditional branch. Evaluates the configured condition and routes the input to the matching output.",
|
|
71
|
+
condition: { op: "eq", left: { const: true }, right: { const: true } },
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
(0, decorator_validation_1.model)()
|
|
75
|
+
], IfFlowNode);
|
|
76
|
+
/**
|
|
77
|
+
* Switch — multi-branch. Routes the input to one of the case output ports
|
|
78
|
+
* or `default` based on matching conditions. Each case defines a
|
|
79
|
+
* {@link SwitchCaseCondition} (graphical or code mode) and a dedicated
|
|
80
|
+
* output port. Cases are stored in `metadata.switch.cases` and the
|
|
81
|
+
* renderer creates dynamic output ports from them (DECAF-32 §22.2.2).
|
|
82
|
+
*
|
|
83
|
+
* The node grows in height as cases are added. Each case gets its own
|
|
84
|
+
* output port on the right side, labeled with the case label.
|
|
85
|
+
*/
|
|
86
|
+
let SwitchFlowNode = class SwitchFlowNode extends base_js_1.GraphNode {
|
|
87
|
+
/**
|
|
88
|
+
* Computes the node's ports, size, and data patch from the given switch
|
|
89
|
+
* metadata. Each case gets its own output port on the right side; the
|
|
90
|
+
* node grows in height as cases are added.
|
|
91
|
+
*/
|
|
92
|
+
static applyMetadata(meta) {
|
|
93
|
+
const definition = (0, graph_1.graphDefinitionOf)(this);
|
|
94
|
+
const basePorts = definition.ports.filter((p) => !meta.cases.some((c) => c.outputPort === p.property));
|
|
95
|
+
const casePorts = meta.cases.map((c) => ({
|
|
96
|
+
property: c.outputPort,
|
|
97
|
+
name: c.label,
|
|
98
|
+
direction: graph_1.PortDirection.OUTPUT,
|
|
99
|
+
label: c.label,
|
|
100
|
+
required: false,
|
|
101
|
+
hidden: false,
|
|
102
|
+
path: c.outputPort,
|
|
103
|
+
}));
|
|
104
|
+
const caseCount = meta.cases.length;
|
|
105
|
+
return {
|
|
106
|
+
ports: [...basePorts, ...casePorts],
|
|
107
|
+
size: {
|
|
108
|
+
width: definition.width ?? 120,
|
|
109
|
+
height: caseCount > 0 ? 140 + caseCount * 24 : definition.height ?? 140,
|
|
110
|
+
},
|
|
111
|
+
dataPatch: { switchMetadata: meta },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
exports.SwitchFlowNode = SwitchFlowNode;
|
|
116
|
+
__decorate([
|
|
117
|
+
(0, decorator_validation_1.required)(),
|
|
118
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to switch on" }),
|
|
119
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
120
|
+
__metadata("design:type", Object)
|
|
121
|
+
], SwitchFlowNode.prototype, "value", void 0);
|
|
122
|
+
__decorate([
|
|
123
|
+
(0, decorator_validation_1.required)(),
|
|
124
|
+
(0, ui_decorators_1.uielement)("input", { label: "Default", placeholder: "Default output when no case matches" }),
|
|
125
|
+
(0, graph_1.output)({ handle: "default" }),
|
|
126
|
+
__metadata("design:type", Object)
|
|
127
|
+
], SwitchFlowNode.prototype, "default", void 0);
|
|
128
|
+
exports.SwitchFlowNode = SwitchFlowNode = __decorate([
|
|
129
|
+
(0, graph_1.node)("core.flow.switch", {
|
|
130
|
+
kind: "core.flow.switch",
|
|
131
|
+
category: "Flow Control",
|
|
132
|
+
color: "#f97316",
|
|
133
|
+
icon: "ti-arrows-shuffle",
|
|
134
|
+
width: 120,
|
|
135
|
+
height: 140,
|
|
136
|
+
labels: ["flow", "switch", "multi-branch"],
|
|
137
|
+
metadata: {
|
|
138
|
+
title: "Switch",
|
|
139
|
+
description: "Multi-branch switch. Routes the input to the first matching case output, or the default output.",
|
|
140
|
+
switch: {
|
|
141
|
+
cases: [],
|
|
142
|
+
defaultPort: "default",
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
}),
|
|
146
|
+
(0, decorator_validation_1.model)()
|
|
147
|
+
], SwitchFlowNode);
|
|
148
|
+
/**
|
|
149
|
+
* Parallel — splits execution into concurrent branches.
|
|
150
|
+
*/
|
|
151
|
+
let ParallelFlowNode = class ParallelFlowNode extends decorator_validation_1.Model {
|
|
152
|
+
};
|
|
153
|
+
exports.ParallelFlowNode = ParallelFlowNode;
|
|
154
|
+
__decorate([
|
|
155
|
+
(0, decorator_validation_1.required)(),
|
|
156
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to fan out" }),
|
|
157
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
158
|
+
__metadata("design:type", Object)
|
|
159
|
+
], ParallelFlowNode.prototype, "value", void 0);
|
|
160
|
+
__decorate([
|
|
161
|
+
(0, decorator_validation_1.required)(),
|
|
162
|
+
(0, ui_decorators_1.uielement)("input", { label: "Branches", placeholder: "Collected branch outputs" }),
|
|
163
|
+
(0, graph_1.output)({ handle: "branches" }),
|
|
164
|
+
__metadata("design:type", Array)
|
|
165
|
+
], ParallelFlowNode.prototype, "branches", void 0);
|
|
166
|
+
exports.ParallelFlowNode = ParallelFlowNode = __decorate([
|
|
167
|
+
(0, graph_1.node)("core.flow.parallel", {
|
|
168
|
+
kind: "core.flow.parallel",
|
|
169
|
+
category: "Flow Control",
|
|
170
|
+
color: "#06b6d4",
|
|
171
|
+
icon: "ti-arrows-vertical",
|
|
172
|
+
width: 96,
|
|
173
|
+
height: 96,
|
|
174
|
+
labels: ["flow", "parallel", "concurrent"],
|
|
175
|
+
metadata: {
|
|
176
|
+
title: "Parallel",
|
|
177
|
+
description: "Splits execution into concurrent branches. All branches run in parallel and outputs are collected.",
|
|
178
|
+
branchCount: 2,
|
|
179
|
+
},
|
|
180
|
+
}),
|
|
181
|
+
(0, decorator_validation_1.model)()
|
|
182
|
+
], ParallelFlowNode);
|
|
183
|
+
/**
|
|
184
|
+
* Merge — normalises branch/parallel outputs into a single output.
|
|
185
|
+
*/
|
|
186
|
+
let MergeFlowNode = class MergeFlowNode extends decorator_validation_1.Model {
|
|
187
|
+
};
|
|
188
|
+
exports.MergeFlowNode = MergeFlowNode;
|
|
189
|
+
__decorate([
|
|
190
|
+
(0, decorator_validation_1.required)(),
|
|
191
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Branch outputs", placeholder: "Outputs to merge" }),
|
|
192
|
+
(0, graph_1.input)({ handle: "values" }),
|
|
193
|
+
__metadata("design:type", Array)
|
|
194
|
+
], MergeFlowNode.prototype, "values", void 0);
|
|
195
|
+
__decorate([
|
|
196
|
+
(0, decorator_validation_1.required)(),
|
|
197
|
+
(0, ui_decorators_1.uielement)("input", { label: "Merged output", placeholder: "Merged result" }),
|
|
198
|
+
(0, graph_1.output)({ handle: "merged" }),
|
|
199
|
+
__metadata("design:type", Object)
|
|
200
|
+
], MergeFlowNode.prototype, "merged", void 0);
|
|
201
|
+
exports.MergeFlowNode = MergeFlowNode = __decorate([
|
|
202
|
+
(0, graph_1.node)("core.flow.merge", {
|
|
203
|
+
kind: "core.flow.merge",
|
|
204
|
+
category: "Utility",
|
|
205
|
+
color: "#0d9488",
|
|
206
|
+
icon: "ti-arrows-merge",
|
|
207
|
+
width: 96,
|
|
208
|
+
height: 96,
|
|
209
|
+
labels: ["flow", "merge", "join"],
|
|
210
|
+
metadata: {
|
|
211
|
+
title: "Merge",
|
|
212
|
+
description: "Merges multiple branch outputs into a single normalised output object.",
|
|
213
|
+
strategy: "concat",
|
|
214
|
+
},
|
|
215
|
+
}),
|
|
216
|
+
(0, decorator_validation_1.model)()
|
|
217
|
+
], MergeFlowNode);
|
|
218
|
+
/**
|
|
219
|
+
* Map — transforms the current input into a new output object.
|
|
220
|
+
*/
|
|
221
|
+
let MapFlowNode = class MapFlowNode extends decorator_validation_1.Model {
|
|
222
|
+
};
|
|
223
|
+
exports.MapFlowNode = MapFlowNode;
|
|
224
|
+
__decorate([
|
|
225
|
+
(0, decorator_validation_1.required)(),
|
|
226
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to transform" }),
|
|
227
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
228
|
+
__metadata("design:type", Object)
|
|
229
|
+
], MapFlowNode.prototype, "value", void 0);
|
|
230
|
+
__decorate([
|
|
231
|
+
(0, decorator_validation_1.required)(),
|
|
232
|
+
(0, ui_decorators_1.uielement)("input", { label: "Transformed output", placeholder: "Mapped result" }),
|
|
233
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
234
|
+
__metadata("design:type", Object)
|
|
235
|
+
], MapFlowNode.prototype, "result", void 0);
|
|
236
|
+
exports.MapFlowNode = MapFlowNode = __decorate([
|
|
237
|
+
(0, graph_1.node)("core.flow.map", {
|
|
238
|
+
kind: "core.flow.map",
|
|
239
|
+
category: "Utility",
|
|
240
|
+
color: "#84cc16",
|
|
241
|
+
icon: "ti-arrows-right-left",
|
|
242
|
+
width: 96,
|
|
243
|
+
height: 96,
|
|
244
|
+
labels: ["flow", "map", "transform"],
|
|
245
|
+
metadata: {
|
|
246
|
+
title: "Map",
|
|
247
|
+
description: "Transforms the current input into a new output object using the configured mapper.",
|
|
248
|
+
mapper: {},
|
|
249
|
+
},
|
|
250
|
+
}),
|
|
251
|
+
(0, decorator_validation_1.model)()
|
|
252
|
+
], MapFlowNode);
|
|
253
|
+
/**
|
|
254
|
+
* Delay — pauses execution for a configured duration.
|
|
255
|
+
*/
|
|
256
|
+
let DelayFlowNode = class DelayFlowNode extends decorator_validation_1.Model {
|
|
257
|
+
};
|
|
258
|
+
exports.DelayFlowNode = DelayFlowNode;
|
|
259
|
+
__decorate([
|
|
260
|
+
(0, decorator_validation_1.required)(),
|
|
261
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to forward after delay" }),
|
|
262
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
263
|
+
__metadata("design:type", Object)
|
|
264
|
+
], DelayFlowNode.prototype, "value", void 0);
|
|
265
|
+
__decorate([
|
|
266
|
+
(0, decorator_validation_1.required)(),
|
|
267
|
+
(0, ui_decorators_1.uielement)("input", { label: "Output value", placeholder: "Forwarded value" }),
|
|
268
|
+
(0, graph_1.output)({ handle: "value" }),
|
|
269
|
+
__metadata("design:type", Object)
|
|
270
|
+
], DelayFlowNode.prototype, "valueOut", void 0);
|
|
271
|
+
exports.DelayFlowNode = DelayFlowNode = __decorate([
|
|
272
|
+
(0, graph_1.node)("core.flow.delay", {
|
|
273
|
+
kind: "core.flow.delay",
|
|
274
|
+
category: "Utility",
|
|
275
|
+
color: "#a3a3a3",
|
|
276
|
+
icon: "ti-clock-hour-4",
|
|
277
|
+
width: 96,
|
|
278
|
+
height: 96,
|
|
279
|
+
labels: ["flow", "delay", "wait"],
|
|
280
|
+
metadata: {
|
|
281
|
+
title: "Delay",
|
|
282
|
+
description: "Pauses execution for the configured duration (in milliseconds), then forwards the input unchanged.",
|
|
283
|
+
durationMs: 1000,
|
|
284
|
+
},
|
|
285
|
+
}),
|
|
286
|
+
(0, decorator_validation_1.model)()
|
|
287
|
+
], DelayFlowNode);
|
|
288
|
+
/**
|
|
289
|
+
* Error boundary — try/catch/finally workflow behaviour.
|
|
290
|
+
*/
|
|
291
|
+
let ErrorBoundaryFlowNode = class ErrorBoundaryFlowNode extends decorator_validation_1.Model {
|
|
292
|
+
};
|
|
293
|
+
exports.ErrorBoundaryFlowNode = ErrorBoundaryFlowNode;
|
|
294
|
+
__decorate([
|
|
295
|
+
(0, decorator_validation_1.required)(),
|
|
296
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to guard" }),
|
|
297
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
298
|
+
__metadata("design:type", Object)
|
|
299
|
+
], ErrorBoundaryFlowNode.prototype, "value", void 0);
|
|
300
|
+
__decorate([
|
|
301
|
+
(0, decorator_validation_1.required)(),
|
|
302
|
+
(0, ui_decorators_1.uielement)("input", { label: "Result", placeholder: "Output on success" }),
|
|
303
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
304
|
+
__metadata("design:type", Object)
|
|
305
|
+
], ErrorBoundaryFlowNode.prototype, "result", void 0);
|
|
306
|
+
__decorate([
|
|
307
|
+
(0, decorator_validation_1.required)(),
|
|
308
|
+
(0, ui_decorators_1.uielement)("input", { label: "Error", placeholder: "Output on failure" }),
|
|
309
|
+
(0, graph_1.output)({ handle: "error" }),
|
|
310
|
+
__metadata("design:type", Object)
|
|
311
|
+
], ErrorBoundaryFlowNode.prototype, "error", void 0);
|
|
312
|
+
exports.ErrorBoundaryFlowNode = ErrorBoundaryFlowNode = __decorate([
|
|
313
|
+
(0, graph_1.node)("core.flow.errorBoundary", {
|
|
314
|
+
kind: "core.flow.errorBoundary",
|
|
315
|
+
category: "Flow Control",
|
|
316
|
+
color: "#ef4444",
|
|
317
|
+
icon: "ti-shield-check",
|
|
318
|
+
width: 96,
|
|
319
|
+
height: 96,
|
|
320
|
+
labels: ["flow", "error", "try-catch"],
|
|
321
|
+
metadata: {
|
|
322
|
+
title: "Error boundary",
|
|
323
|
+
description: "Wraps the input in a try/catch/finally. Emits the result on success, or the error on failure.",
|
|
324
|
+
finally: false,
|
|
325
|
+
},
|
|
326
|
+
}),
|
|
327
|
+
(0, decorator_validation_1.model)()
|
|
328
|
+
], ErrorBoundaryFlowNode);
|
|
329
|
+
/**
|
|
330
|
+
* Human approval — suspends execution until a human approves or rejects.
|
|
331
|
+
*/
|
|
332
|
+
let HumanApprovalFlowNode = class HumanApprovalFlowNode extends decorator_validation_1.Model {
|
|
333
|
+
};
|
|
334
|
+
exports.HumanApprovalFlowNode = HumanApprovalFlowNode;
|
|
335
|
+
__decorate([
|
|
336
|
+
(0, decorator_validation_1.required)(),
|
|
337
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value pending approval" }),
|
|
338
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
339
|
+
__metadata("design:type", Object)
|
|
340
|
+
], HumanApprovalFlowNode.prototype, "value", void 0);
|
|
341
|
+
__decorate([
|
|
342
|
+
(0, decorator_validation_1.required)(),
|
|
343
|
+
(0, ui_decorators_1.uielement)("input", { label: "Approved", placeholder: "Output when approved" }),
|
|
344
|
+
(0, graph_1.output)({ handle: "approved" }),
|
|
345
|
+
__metadata("design:type", Object)
|
|
346
|
+
], HumanApprovalFlowNode.prototype, "approved", void 0);
|
|
347
|
+
__decorate([
|
|
348
|
+
(0, decorator_validation_1.required)(),
|
|
349
|
+
(0, ui_decorators_1.uielement)("input", { label: "Rejected", placeholder: "Output when rejected" }),
|
|
350
|
+
(0, graph_1.output)({ handle: "rejected" }),
|
|
351
|
+
__metadata("design:type", Object)
|
|
352
|
+
], HumanApprovalFlowNode.prototype, "rejected", void 0);
|
|
353
|
+
exports.HumanApprovalFlowNode = HumanApprovalFlowNode = __decorate([
|
|
354
|
+
(0, graph_1.node)("core.flow.humanApproval", {
|
|
355
|
+
kind: "core.flow.humanApproval",
|
|
356
|
+
category: "Flow Control",
|
|
357
|
+
color: "#d946ef",
|
|
358
|
+
icon: "ti-user-check",
|
|
359
|
+
width: 96,
|
|
360
|
+
height: 96,
|
|
361
|
+
labels: ["flow", "approval", "suspend"],
|
|
362
|
+
metadata: {
|
|
363
|
+
title: "Human approval",
|
|
364
|
+
description: "Suspends execution until a human approves or rejects. Emits the approved value or a rejection.",
|
|
365
|
+
approvers: [],
|
|
366
|
+
timeoutMs: 86400000,
|
|
367
|
+
},
|
|
368
|
+
}),
|
|
369
|
+
(0, decorator_validation_1.model)()
|
|
370
|
+
], HumanApprovalFlowNode);
|
|
371
|
+
/**
|
|
372
|
+
* Return — defines and normalises the final workflow output.
|
|
373
|
+
*/
|
|
374
|
+
let ReturnFlowNode = class ReturnFlowNode extends decorator_validation_1.Model {
|
|
375
|
+
};
|
|
376
|
+
exports.ReturnFlowNode = ReturnFlowNode;
|
|
377
|
+
__decorate([
|
|
378
|
+
(0, decorator_validation_1.required)(),
|
|
379
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to normalise" }),
|
|
380
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
381
|
+
__metadata("design:type", Object)
|
|
382
|
+
], ReturnFlowNode.prototype, "value", void 0);
|
|
383
|
+
__decorate([
|
|
384
|
+
(0, decorator_validation_1.required)(),
|
|
385
|
+
(0, ui_decorators_1.uielement)("input", { label: "Returned output", placeholder: "Normalised output" }),
|
|
386
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
387
|
+
__metadata("design:type", Object)
|
|
388
|
+
], ReturnFlowNode.prototype, "result", void 0);
|
|
389
|
+
exports.ReturnFlowNode = ReturnFlowNode = __decorate([
|
|
390
|
+
(0, graph_1.node)("core.flow.return", {
|
|
391
|
+
kind: "core.flow.return",
|
|
392
|
+
category: "Utility",
|
|
393
|
+
color: "#22c55e",
|
|
394
|
+
icon: "ti-arrow-back-up",
|
|
395
|
+
width: 96,
|
|
396
|
+
height: 96,
|
|
397
|
+
labels: ["flow", "return", "output"],
|
|
398
|
+
metadata: {
|
|
399
|
+
title: "Return",
|
|
400
|
+
description: "Normalises the input into the final workflow output object.",
|
|
401
|
+
outputSchema: {},
|
|
402
|
+
},
|
|
403
|
+
}),
|
|
404
|
+
(0, decorator_validation_1.model)()
|
|
405
|
+
], ReturnFlowNode);
|
|
406
|
+
/**
|
|
407
|
+
* Code — sandboxed JS/TS code execution (ALFRED-5 §7).
|
|
408
|
+
*
|
|
409
|
+
* The engine does not implement the sandbox directly (§22.4). A future
|
|
410
|
+
* executor may wrap the `CodeSandbox` contract (ALFRED-5 §7.17) as a
|
|
411
|
+
* pluggable executor. The placeholder syntax (`{{ $input }}`, `{{ $item }}`,
|
|
412
|
+
* `{{ $index }}`, `{{ $vars }}`, `{{ $node["Name"].output }}`) is Mastra-
|
|
413
|
+
* agnostic and lives in the downstream project's `modules/core` (ALFRED-6).
|
|
414
|
+
*/
|
|
415
|
+
let CodeFlowNode = class CodeFlowNode extends decorator_validation_1.Model {
|
|
416
|
+
};
|
|
417
|
+
exports.CodeFlowNode = CodeFlowNode;
|
|
418
|
+
__decorate([
|
|
419
|
+
(0, decorator_validation_1.required)(),
|
|
420
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input", placeholder: "Input object (accessible as $input)" }),
|
|
421
|
+
(0, graph_1.input)({ handle: "input" }),
|
|
422
|
+
__metadata("design:type", Object)
|
|
423
|
+
], CodeFlowNode.prototype, "input", void 0);
|
|
424
|
+
__decorate([
|
|
425
|
+
(0, decorator_validation_1.required)(),
|
|
426
|
+
(0, ui_decorators_1.uielement)("input", { label: "Result", placeholder: "Code execution result" }),
|
|
427
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
428
|
+
__metadata("design:type", Object)
|
|
429
|
+
], CodeFlowNode.prototype, "result", void 0);
|
|
430
|
+
exports.CodeFlowNode = CodeFlowNode = __decorate([
|
|
431
|
+
(0, graph_1.node)("core.flow.code", {
|
|
432
|
+
kind: "core.flow.code",
|
|
433
|
+
category: "Utility",
|
|
434
|
+
color: "#7c3aed",
|
|
435
|
+
icon: "ti-code",
|
|
436
|
+
width: 96,
|
|
437
|
+
height: 96,
|
|
438
|
+
labels: ["flow", "code", "sandbox", "transform"],
|
|
439
|
+
metadata: {
|
|
440
|
+
title: "Code",
|
|
441
|
+
description: "Runs user-authored JS/TS in a restricted VM sandbox. Supports placeholder syntax for workflow data references.",
|
|
442
|
+
code: "",
|
|
443
|
+
language: "javascript",
|
|
444
|
+
},
|
|
445
|
+
}),
|
|
446
|
+
(0, decorator_validation_1.model)()
|
|
447
|
+
], CodeFlowNode);
|
|
448
|
+
/**
|
|
449
|
+
* All built-in flow-control node constructors.
|
|
450
|
+
*/
|
|
451
|
+
exports.GRAPH_FLOW_CONTROL_NODES = [
|
|
452
|
+
IfFlowNode,
|
|
453
|
+
SwitchFlowNode,
|
|
454
|
+
ParallelFlowNode,
|
|
455
|
+
MergeFlowNode,
|
|
456
|
+
MapFlowNode,
|
|
457
|
+
DelayFlowNode,
|
|
458
|
+
ErrorBoundaryFlowNode,
|
|
459
|
+
HumanApprovalFlowNode,
|
|
460
|
+
ReturnFlowNode,
|
|
461
|
+
CodeFlowNode,
|
|
462
|
+
];
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL3NoYXJlZC9ub2Rlcy9mbG93LWNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEdBRWQsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFlO0FBRW5DOzs7R0FHRztBQWdCSSxJQUFNLFVBQVUsR0FBaEIsTUFBTSxVQUFXLFNBQVEsS0FBSztDQWVwQyxDQUFBO0FBWEM7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUNqRixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7O3lDQUNYO0FBS2hCO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLCtCQUErQixFQUFFLENBQUM7SUFDbkYsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDOzt3Q0FDWjtBQUtmO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGdDQUFnQyxFQUFFLENBQUM7SUFDcEYsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFB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O1lBQzdILElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLFlBQVk7U0FDdkI7S0FDRixDQUFDO0lBQ0QsS0FBSyxFQUFFO0dBQ0ssWUFBWSxDQVV4Qjs7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHO0lBQ3RDLFVBQVU7SUFDVixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixXQUFXO0lBQ1gsYUFBYTtJQUNiLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsY0FBYztJQUNkLFlBQVk7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9ub2Rlcy9mbG93LWNvbnRyb2xcbiAqIEBzdW1tYXJ5IFByb2R1Y3Rpb24gZmxvdy1jb250cm9sIG5vZGUga2luZCBkZWNsYXJhdGlvbnMgKERFQ0FGLTMyIMKnMjIuMi4yKS5cbiAqIEBkZXNjcmlwdGlvbiBDYW5vbmljYWwgYEBub2RlYC1kZWNvcmF0ZWQgY2xhc3NlcyBmb3IgdGhlIHRlbiBBTEZSRUQtNVxuICogZmxvdy1jb250cm9sIGtpbmRzLiBUaGVzZSBhcmUgZ3JhcGgtbGV2ZWwgbWFjcm9zOiB0aGUgZW5naW5lJ3MgcGxhbm5lclxuICogcmVjb2duaXNlcyB0aGVtIGFzIG9yZGluYXJ5IGV4ZWN1dGFibGUgbm9kZXMgKMKnNS43KSBidXQgdGhleSBoYXZlIG5vXG4gKiBidWlsdC1pbiBleGVjdXRvcnMg4oCUIGRvd25zdHJlYW0gcHJvamVjdHMgKGUuZy4gQUxGUkVEKSByZWdpc3RlciBjdXN0b21cbiAqIGV4ZWN1dG9ycyBvciBjb21waWxlIHRoZW0gaW50byBNYXN0cmEgY29tcG9zaXRpb24gQVBJcyAowqcyMi4yLjIpLlxuICpcbiAqIFRoZSB0aHJlZSBsb29wIGtpbmRzIChgY29yZS5sb29wLmZvcmVhY2gvd2hpbGUvdW50aWxgKSBhbHJlYWR5IGhhdmUgYnVpbHQtaW5cbiAqIGV4ZWN1dG9ycyAowqc1LjkpIGFuZCBhcmUgTk9UIHJlZGVjbGFyZWQgaGVyZS5cbiAqL1xuaW1wb3J0IHsgTW9kZWwsIG1vZGVsLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHVpZWxlbWVudCB9IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgZ3JhcGhEZWZpbml0aW9uT2YsXG4gIGlucHV0LFxuICBub2RlLFxuICBvdXRwdXQsXG4gIFBvcnREaXJlY3Rpb24sXG4gIHR5cGUgR3JhcGhQb3J0RGVmaW5pdGlvbixcbn0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5pbXBvcnQgdHlwZSB7IE5vZGVNZXRhZGF0YUNoYW5nZSwgU3dpdGNoTm9kZU1ldGFkYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBHcmFwaE5vZGUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbi8qKlxuICogSWYg4oCUIGNvbmRpdGlvbmFsIGJyYW5jaC4gRXZhbHVhdGVzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gICjCpzIyLjMpIGFuZFxuICogcm91dGVzIHRoZSBpbnB1dCB0byB0aGUgYHRoZW5gIG9yIGBlbHNlYCBvdXRwdXQuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LmlmXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuaWZcIixcbiAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gIGNvbG9yOiBcIiNmNTllMGJcIixcbiAgaWNvbjogXCJ0aS1hcnJvd3Mtc3BsaXQtMlwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcImNvbmRpdGlvbmFsXCIsIFwiYnJhbmNoXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIklmXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQ29uZGl0aW9uYWwgYnJhbmNoLiBFdmFsdWF0ZXMgdGhlIGNvbmZpZ3VyZWQgY29uZGl0aW9uIGFuZCByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBtYXRjaGluZyBvdXRwdXQuXCIsXG4gICAgY29uZGl0aW9uOiB7IG9wOiBcImVxXCIsIGxlZnQ6IHsgY29uc3Q6IHRydWUgfSwgcmlnaHQ6IHsgY29uc3Q6IHRydWUgfSB9LFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgSWZGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZXZhbHVhdGVcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiVGhlblwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwidGhlblwiIH0pXG4gIHRoZW4hOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkVsc2VcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gY29uZGl0aW9uIGlzIGZhbHNlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJlbHNlXCIgfSlcbiAgZWxzZSE6IHVua25vd247XG59XG5cbi8qKlxuICogU3dpdGNoIOKAlCBtdWx0aS1icmFuY2guIFJvdXRlcyB0aGUgaW5wdXQgdG8gb25lIG9mIHRoZSBjYXNlIG91dHB1dCBwb3J0c1xuICogb3IgYGRlZmF1bHRgIGJhc2VkIG9uIG1hdGNoaW5nIGNvbmRpdGlvbnMuIEVhY2ggY2FzZSBkZWZpbmVzIGFcbiAqIHtAbGluayBTd2l0Y2hDYXNlQ29uZGl0aW9ufSAoZ3JhcGhpY2FsIG9yIGNvZGUgbW9kZSkgYW5kIGEgZGVkaWNhdGVkXG4gKiBvdXRwdXQgcG9ydC4gQ2FzZXMgYXJlIHN0b3JlZCBpbiBgbWV0YWRhdGEuc3dpdGNoLmNhc2VzYCBhbmQgdGhlXG4gKiByZW5kZXJlciBjcmVhdGVzIGR5bmFtaWMgb3V0cHV0IHBvcnRzIGZyb20gdGhlbSAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICpcbiAqIFRoZSBub2RlIGdyb3dzIGluIGhlaWdodCBhcyBjYXNlcyBhcmUgYWRkZWQuIEVhY2ggY2FzZSBnZXRzIGl0cyBvd25cbiAqIG91dHB1dCBwb3J0IG9uIHRoZSByaWdodCBzaWRlLCBsYWJlbGVkIHdpdGggdGhlIGNhc2UgbGFiZWwuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LnN3aXRjaFwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93LnN3aXRjaFwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiI2Y5NzMxNlwiLFxuICBpY29uOiBcInRpLWFycm93cy1zaHVmZmxlXCIsXG4gIHdpZHRoOiAxMjAsXG4gIGhlaWdodDogMTQwLFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJzd2l0Y2hcIiwgXCJtdWx0aS1icmFuY2hcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiU3dpdGNoXCIsXG4gICAgZGVzY3JpcHRpb246IFwiTXVsdGktYnJhbmNoIHN3aXRjaC4gUm91dGVzIHRoZSBpbnB1dCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgY2FzZSBvdXRwdXQsIG9yIHRoZSBkZWZhdWx0IG91dHB1dC5cIixcbiAgICBzd2l0Y2g6IHtcbiAgICAgIGNhc2VzOiBbXSxcbiAgICAgIGRlZmF1bHRQb3J0OiBcImRlZmF1bHRcIixcbiAgICB9LFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgU3dpdGNoRmxvd05vZGUgZXh0ZW5kcyBHcmFwaE5vZGUge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBzd2l0Y2ggb25cIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJEZWZhdWx0IG91dHB1dCB3aGVuIG5vIGNhc2UgbWF0Y2hlc1wiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwiZGVmYXVsdFwiIH0pXG4gIGRlZmF1bHQhOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbm9kZSdzIHBvcnRzLCBzaXplLCBhbmQgZGF0YSBwYXRjaCBmcm9tIHRoZSBnaXZlbiBzd2l0Y2hcbiAgICogbWV0YWRhdGEuIEVhY2ggY2FzZSBnZXRzIGl0cyBvd24gb3V0cHV0IHBvcnQgb24gdGhlIHJpZ2h0IHNpZGU7IHRoZVxuICAgKiBub2RlIGdyb3dzIGluIGhlaWdodCBhcyBjYXNlcyBhcmUgYWRkZWQuXG4gICAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgYXBwbHlNZXRhZGF0YShtZXRhOiBTd2l0Y2hOb2RlTWV0YWRhdGEpOiBOb2RlTWV0YWRhdGFDaGFuZ2Uge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBncmFwaERlZmluaXRpb25PZih0aGlzIGFzIG5ldmVyKTtcbiAgICBjb25zdCBiYXNlUG9ydHMgPSBkZWZpbml0aW9uLnBvcnRzLmZpbHRlcihcbiAgICAgIChwKSA9PiAhbWV0YS5jYXNlcy5zb21lKChjKSA9PiBjLm91dHB1dFBvcnQgPT09IHAucHJvcGVydHkpXG4gICAgKTtcbiAgICBjb25zdCBjYXNlUG9ydHM6IEdyYXBoUG9ydERlZmluaXRpb25bXSA9IG1ldGEuY2FzZXMubWFwKChjKSA9PiAoe1xuICAgICAgcHJvcGVydHk6IGMub3V0cHV0UG9ydCxcbiAgICAgIG5hbWU6IGMubGFiZWwsXG4gICAgICBkaXJlY3Rpb246IFBvcnREaXJlY3Rpb24uT1VUUFVULFxuICAgICAgbGFiZWw6IGMubGFiZWwsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgcGF0aDogYy5vdXRwdXRQb3J0LFxuICAgIH0pKTtcbiAgICBjb25zdCBjYXNlQ291bnQgPSBtZXRhLmNhc2VzLmxlbmd0aDtcbiAgICByZXR1cm4ge1xuICAgICAgcG9ydHM6IFsuLi5iYXNlUG9ydHMsIC4uLmNhc2VQb3J0c10sXG4gICAgICBzaXplOiB7XG4gICAgICAgIHdpZHRoOiBkZWZpbml0aW9uLndpZHRoID8/IDEyMCxcbiAgICAgICAgaGVpZ2h0OiBjYXNlQ291bnQgPiAwID8gMTQwICsgY2FzZUNvdW50ICogMjQgOiBkZWZpbml0aW9uLmhlaWdodCA/PyAxNDAsXG4gICAgICB9LFxuICAgICAgZGF0YVBhdGNoOiB7IHN3aXRjaE1ldGFkYXRhOiBtZXRhIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcmFsbGVsIOKAlCBzcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cucGFyYWxsZWxcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5wYXJhbGxlbFwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiIzA2YjZkNFwiLFxuICBpY29uOiBcInRpLWFycm93cy12ZXJ0aWNhbFwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcInBhcmFsbGVsXCIsIFwiY29uY3VycmVudFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJQYXJhbGxlbFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlNwbGl0cyBleGVjdXRpb24gaW50byBjb25jdXJyZW50IGJyYW5jaGVzLiBBbGwgYnJhbmNoZXMgcnVuIGluIHBhcmFsbGVsIGFuZCBvdXRwdXRzIGFyZSBjb2xsZWN0ZWQuXCIsXG4gICAgYnJhbmNoQ291bnQ6IDIsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBQYXJhbGxlbEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBmYW4gb3V0XCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkJyYW5jaGVzXCIsIHBsYWNlaG9sZGVyOiBcIkNvbGxlY3RlZCBicmFuY2ggb3V0cHV0c1wiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwiYnJhbmNoZXNcIiB9KVxuICBicmFuY2hlcyE6IHVua25vd25bXTtcbn1cblxuLyoqXG4gKiBNZXJnZSDigJQgbm9ybWFsaXNlcyBicmFuY2gvcGFyYWxsZWwgb3V0cHV0cyBpbnRvIGEgc2luZ2xlIG91dHB1dC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cubWVyZ2VcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5tZXJnZVwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiMwZDk0ODhcIixcbiAgaWNvbjogXCJ0aS1hcnJvd3MtbWVyZ2VcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJtZXJnZVwiLCBcImpvaW5cIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiTWVyZ2VcIixcbiAgICBkZXNjcmlwdGlvbjogXCJNZXJnZXMgbXVsdGlwbGUgYnJhbmNoIG91dHB1dHMgaW50byBhIHNpbmdsZSBub3JtYWxpc2VkIG91dHB1dCBvYmplY3QuXCIsXG4gICAgc3RyYXRlZ3k6IFwiY29uY2F0XCIsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBNZXJnZUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJCcmFuY2ggb3V0cHV0c1wiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXRzIHRvIG1lcmdlXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlc1wiIH0pXG4gIHZhbHVlcyE6IHVua25vd25bXTtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJNZXJnZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk1lcmdlZCByZXN1bHRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcIm1lcmdlZFwiIH0pXG4gIG1lcmdlZCE6IHVua25vd247XG59XG5cbi8qKlxuICogTWFwIOKAlCB0cmFuc2Zvcm1zIHRoZSBjdXJyZW50IGlucHV0IGludG8gYSBuZXcgb3V0cHV0IG9iamVjdC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cubWFwXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cubWFwXCIsXG4gIGNhdGVnb3J5OiBcIlV0aWxpdHlcIixcbiAgY29sb3I6IFwiIzg0Y2MxNlwiLFxuICBpY29uOiBcInRpLWFycm93cy1yaWdodC1sZWZ0XCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwibWFwXCIsIFwidHJhbnNmb3JtXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIk1hcFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlRyYW5zZm9ybXMgdGhlIGN1cnJlbnQgaW5wdXQgaW50byBhIG5ldyBvdXRwdXQgb2JqZWN0IHVzaW5nIHRoZSBjb25maWd1cmVkIG1hcHBlci5cIixcbiAgICBtYXBwZXI6IHt9LFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgTWFwRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIHRyYW5zZm9ybVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJUcmFuc2Zvcm1lZCBvdXRwdXRcIiwgcGxhY2Vob2xkZXI6IFwiTWFwcGVkIHJlc3VsdFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSlcbiAgcmVzdWx0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBEZWxheSDigJQgcGF1c2VzIGV4ZWN1dGlvbiBmb3IgYSBjb25maWd1cmVkIGR1cmF0aW9uLlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5kZWxheVwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93LmRlbGF5XCIsXG4gIGNhdGVnb3J5OiBcIlV0aWxpdHlcIixcbiAgY29sb3I6IFwiI2EzYTNhM1wiLFxuICBpY29uOiBcInRpLWNsb2NrLWhvdXItNFwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcImRlbGF5XCIsIFwid2FpdFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJEZWxheVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlBhdXNlcyBleGVjdXRpb24gZm9yIHRoZSBjb25maWd1cmVkIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpLCB0aGVuIGZvcndhcmRzIHRoZSBpbnB1dCB1bmNoYW5nZWQuXCIsXG4gICAgZHVyYXRpb25NczogMTAwMCxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIERlbGF5Rmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIGZvcndhcmQgYWZ0ZXIgZGVsYXlcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiT3V0cHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIkZvcndhcmRlZCB2YWx1ZVwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZU91dCE6IHVua25vd247XG59XG5cbi8qKlxuICogRXJyb3IgYm91bmRhcnkg4oCUIHRyeS9jYXRjaC9maW5hbGx5IHdvcmtmbG93IGJlaGF2aW91ci5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuZXJyb3JCb3VuZGFyeVwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93LmVycm9yQm91bmRhcnlcIixcbiAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gIGNvbG9yOiBcIiNlZjQ0NDRcIixcbiAgaWNvbjogXCJ0aS1zaGllbGQtY2hlY2tcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJlcnJvclwiLCBcInRyeS1jYXRjaFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJFcnJvciBib3VuZGFyeVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldyYXBzIHRoZSBpbnB1dCBpbiBhIHRyeS9jYXRjaC9maW5hbGx5LiBFbWl0cyB0aGUgcmVzdWx0IG9uIHN1Y2Nlc3MsIG9yIHRoZSBlcnJvciBvbiBmYWlsdXJlLlwiLFxuICAgIGZpbmFsbHk6IGZhbHNlLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgRXJyb3JCb3VuZGFyeUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBndWFyZFwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXN1bHRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IG9uIHN1Y2Nlc3NcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pXG4gIHJlc3VsdCE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRXJyb3JcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IG9uIGZhaWx1cmVcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImVycm9yXCIgfSlcbiAgZXJyb3IhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEh1bWFuIGFwcHJvdmFsIOKAlCBzdXNwZW5kcyBleGVjdXRpb24gdW50aWwgYSBodW1hbiBhcHByb3ZlcyBvciByZWplY3RzLlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5odW1hbkFwcHJvdmFsXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuaHVtYW5BcHByb3ZhbFwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiI2Q5NDZlZlwiLFxuICBpY29uOiBcInRpLXVzZXItY2hlY2tcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJhcHByb3ZhbFwiLCBcInN1c3BlbmRcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiSHVtYW4gYXBwcm92YWxcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTdXNwZW5kcyBleGVjdXRpb24gdW50aWwgYSBodW1hbiBhcHByb3ZlcyBvciByZWplY3RzLiBFbWl0cyB0aGUgYXBwcm92ZWQgdmFsdWUgb3IgYSByZWplY3Rpb24uXCIsXG4gICAgYXBwcm92ZXJzOiBbXSxcbiAgICB0aW1lb3V0TXM6IDg2NDAwMDAwLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgSHVtYW5BcHByb3ZhbEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSBwZW5kaW5nIGFwcHJvdmFsXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkFwcHJvdmVkXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIGFwcHJvdmVkXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJhcHByb3ZlZFwiIH0pXG4gIGFwcHJvdmVkITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZWplY3RlZFwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiByZWplY3RlZFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwicmVqZWN0ZWRcIiB9KVxuICByZWplY3RlZCE6IHVua25vd247XG59XG5cbi8qKlxuICogUmV0dXJuIOKAlCBkZWZpbmVzIGFuZCBub3JtYWxpc2VzIHRoZSBmaW5hbCB3b3JrZmxvdyBvdXRwdXQuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LnJldHVyblwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93LnJldHVyblwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiMyMmM1NWVcIixcbiAgaWNvbjogXCJ0aS1hcnJvdy1iYWNrLXVwXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwicmV0dXJuXCIsIFwib3V0cHV0XCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIlJldHVyblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIk5vcm1hbGlzZXMgdGhlIGlucHV0IGludG8gdGhlIGZpbmFsIHdvcmtmbG93IG91dHB1dCBvYmplY3QuXCIsXG4gICAgb3V0cHV0U2NoZW1hOiB7fSxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIFJldHVybkZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBub3JtYWxpc2VcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmV0dXJuZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk5vcm1hbGlzZWQgb3V0cHV0XCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KVxuICByZXN1bHQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIENvZGUg4oCUIHNhbmRib3hlZCBKUy9UUyBjb2RlIGV4ZWN1dGlvbiAoQUxGUkVELTUgwqc3KS5cbiAqXG4gKiBUaGUgZW5naW5lIGRvZXMgbm90IGltcGxlbWVudCB0aGUgc2FuZGJveCBkaXJlY3RseSAowqcyMi40KS4gQSBmdXR1cmVcbiAqIGV4ZWN1dG9yIG1heSB3cmFwIHRoZSBgQ29kZVNhbmRib3hgIGNvbnRyYWN0IChBTEZSRUQtNSDCpzcuMTcpIGFzIGFcbiAqIHBsdWdnYWJsZSBleGVjdXRvci4gVGhlIHBsYWNlaG9sZGVyIHN5bnRheCAoYHt7ICRpbnB1dCB9fWAsIGB7eyAkaXRlbSB9fWAsXG4gKiBge3sgJGluZGV4IH19YCwgYHt7ICR2YXJzIH19YCwgYHt7ICRub2RlW1wiTmFtZVwiXS5vdXRwdXQgfX1gKSBpcyBNYXN0cmEtXG4gKiBhZ25vc3RpYyBhbmQgbGl2ZXMgaW4gdGhlIGRvd25zdHJlYW0gcHJvamVjdCdzIGBtb2R1bGVzL2NvcmVgIChBTEZSRUQtNikuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LmNvZGVcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5jb2RlXCIsXG4gIGNhdGVnb3J5OiBcIlV0aWxpdHlcIixcbiAgY29sb3I6IFwiIzdjM2FlZFwiLFxuICBpY29uOiBcInRpLWNvZGVcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJjb2RlXCIsIFwic2FuZGJveFwiLCBcInRyYW5zZm9ybVwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgZGVzY3JpcHRpb246IFwiUnVucyB1c2VyLWF1dGhvcmVkIEpTL1RTIGluIGEgcmVzdHJpY3RlZCBWTSBzYW5kYm94LiBTdXBwb3J0cyBwbGFjZWhvbGRlciBzeW50YXggZm9yIHdvcmtmbG93IGRhdGEgcmVmZXJlbmNlcy5cIixcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxhbmd1YWdlOiBcImphdmFzY3JpcHRcIixcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIENvZGVGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXRcIiwgcGxhY2Vob2xkZXI6IFwiSW5wdXQgb2JqZWN0IChhY2Nlc3NpYmxlIGFzICRpbnB1dClcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwiaW5wdXRcIiB9KVxuICBpbnB1dCE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVzdWx0XCIsIHBsYWNlaG9sZGVyOiBcIkNvZGUgZXhlY3V0aW9uIHJlc3VsdFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSlcbiAgcmVzdWx0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBBbGwgYnVpbHQtaW4gZmxvdy1jb250cm9sIG5vZGUgY29uc3RydWN0b3JzLlxuICovXG5leHBvcnQgY29uc3QgR1JBUEhfRkxPV19DT05UUk9MX05PREVTID0gW1xuICBJZkZsb3dOb2RlLFxuICBTd2l0Y2hGbG93Tm9kZSxcbiAgUGFyYWxsZWxGbG93Tm9kZSxcbiAgTWVyZ2VGbG93Tm9kZSxcbiAgTWFwRmxvd05vZGUsXG4gIERlbGF5Rmxvd05vZGUsXG4gIEVycm9yQm91bmRhcnlGbG93Tm9kZSxcbiAgSHVtYW5BcHByb3ZhbEZsb3dOb2RlLFxuICBSZXR1cm5GbG93Tm9kZSxcbiAgQ29kZUZsb3dOb2RlLFxuXSBhcyBjb25zdDtcbiJdfQ==
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmxvdy1jb250cm9sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDakYsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztRQUMxSCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FB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dGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG4vKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL25vZGVzL2Zsb3ctY29udHJvbFxuICogQHN1bW1hcnkgUHJvZHVjdGlvbiBmbG93LWNvbnRyb2wgbm9kZSBraW5kIGRlY2xhcmF0aW9ucyAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICogQGRlc2NyaXB0aW9uIENhbm9uaWNhbCBgQG5vZGVgLWRlY29yYXRlZCBjbGFzc2VzIGZvciB0aGUgdGVuIEFMRlJFRC01XG4gKiBmbG93LWNvbnRyb2wga2luZHMuIFRoZXNlIGFyZSBncmFwaC1sZXZlbCBtYWNyb3M6IHRoZSBlbmdpbmUncyBwbGFubmVyXG4gKiByZWNvZ25pc2VzIHRoZW0gYXMgb3JkaW5hcnkgZXhlY3V0YWJsZSBub2RlcyAowqc1LjcpIGJ1dCB0aGV5IGhhdmUgbm9cbiAqIGJ1aWx0LWluIGV4ZWN1dG9ycyDigJQgZG93bnN0cmVhbSBwcm9qZWN0cyAoZS5nLiBBTEZSRUQpIHJlZ2lzdGVyIGN1c3RvbVxuICogZXhlY3V0b3JzIG9yIGNvbXBpbGUgdGhlbSBpbnRvIE1hc3RyYSBjb21wb3NpdGlvbiBBUElzICjCpzIyLjIuMikuXG4gKlxuICogVGhlIHRocmVlIGxvb3Aga2luZHMgKGBjb3JlLmxvb3AuZm9yZWFjaC93aGlsZS91bnRpbGApIGFscmVhZHkgaGF2ZSBidWlsdC1pblxuICogZXhlY3V0b3JzICjCpzUuOSkgYW5kIGFyZSBOT1QgcmVkZWNsYXJlZCBoZXJlLlxuICovXG5pbXBvcnQgeyBNb2RlbCwgbW9kZWwsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdWllbGVtZW50IH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBncmFwaERlZmluaXRpb25PZiwgaW5wdXQsIG5vZGUsIG91dHB1dCwgUG9ydERpcmVjdGlvbiwgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcbmltcG9ydCB7IEdyYXBoTm9kZSB9IGZyb20gXCIuL2Jhc2UuanNcIjtcbi8qKlxuICogSWYg4oCUIGNvbmRpdGlvbmFsIGJyYW5jaC4gRXZhbHVhdGVzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gICjCpzIyLjMpIGFuZFxuICogcm91dGVzIHRoZSBpbnB1dCB0byB0aGUgYHRoZW5gIG9yIGBlbHNlYCBvdXRwdXQuXG4gKi9cbmxldCBJZkZsb3dOb2RlID0gY2xhc3MgSWZGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZXZhbHVhdGVcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBJZkZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlRoZW5cIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gY29uZGl0aW9uIGlzIHRydWVcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwidGhlblwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBJZkZsb3dOb2RlLnByb3RvdHlwZSwgXCJ0aGVuXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRWxzZVwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgZmFsc2VcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiZWxzZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBJZkZsb3dOb2RlLnByb3RvdHlwZSwgXCJlbHNlXCIsIHZvaWQgMCk7XG5JZkZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5pZlwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LmlmXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICAgICAgICBjb2xvcjogXCIjZjU5ZTBiXCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3dzLXNwbGl0LTJcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJjb25kaXRpb25hbFwiLCBcImJyYW5jaFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIklmXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25kaXRpb25hbCBicmFuY2guIEV2YWx1YXRlcyB0aGUgY29uZmlndXJlZCBjb25kaXRpb24gYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlIG1hdGNoaW5nIG91dHB1dC5cIixcbiAgICAgICAgICAgIGNvbmRpdGlvbjogeyBvcDogXCJlcVwiLCBsZWZ0OiB7IGNvbnN0OiB0cnVlIH0sIHJpZ2h0OiB7IGNvbnN0OiB0cnVlIH0gfSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBJZkZsb3dOb2RlKTtcbmV4cG9ydCB7IElmRmxvd05vZGUgfTtcbi8qKlxuICogU3dpdGNoIOKAlCBtdWx0aS1icmFuY2guIFJvdXRlcyB0aGUgaW5wdXQgdG8gb25lIG9mIHRoZSBjYXNlIG91dHB1dCBwb3J0c1xuICogb3IgYGRlZmF1bHRgIGJhc2VkIG9uIG1hdGNoaW5nIGNvbmRpdGlvbnMuIEVhY2ggY2FzZSBkZWZpbmVzIGFcbiAqIHtAbGluayBTd2l0Y2hDYXNlQ29uZGl0aW9ufSAoZ3JhcGhpY2FsIG9yIGNvZGUgbW9kZSkgYW5kIGEgZGVkaWNhdGVkXG4gKiBvdXRwdXQgcG9ydC4gQ2FzZXMgYXJlIHN0b3JlZCBpbiBgbWV0YWRhdGEuc3dpdGNoLmNhc2VzYCBhbmQgdGhlXG4gKiByZW5kZXJlciBjcmVhdGVzIGR5bmFtaWMgb3V0cHV0IHBvcnRzIGZyb20gdGhlbSAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICpcbiAqIFRoZSBub2RlIGdyb3dzIGluIGhlaWdodCBhcyBjYXNlcyBhcmUgYWRkZWQuIEVhY2ggY2FzZSBnZXRzIGl0cyBvd25cbiAqIG91dHB1dCBwb3J0IG9uIHRoZSByaWdodCBzaWRlLCBsYWJlbGVkIHdpdGggdGhlIGNhc2UgbGFiZWwuXG4gKi9cbmxldCBTd2l0Y2hGbG93Tm9kZSA9IGNsYXNzIFN3aXRjaEZsb3dOb2RlIGV4dGVuZHMgR3JhcGhOb2RlIHtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbm9kZSdzIHBvcnRzLCBzaXplLCBhbmQgZGF0YSBwYXRjaCBmcm9tIHRoZSBnaXZlbiBzd2l0Y2hcbiAgICAgKiBtZXRhZGF0YS4gRWFjaCBjYXNlIGdldHMgaXRzIG93biBvdXRwdXQgcG9ydCBvbiB0aGUgcmlnaHQgc2lkZTsgdGhlXG4gICAgICogbm9kZSBncm93cyBpbiBoZWlnaHQgYXMgY2FzZXMgYXJlIGFkZGVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBhcHBseU1ldGFkYXRhKG1ldGEpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGdyYXBoRGVmaW5pdGlvbk9mKHRoaXMpO1xuICAgICAgICBjb25zdCBiYXNlUG9ydHMgPSBkZWZpbml0aW9uLnBvcnRzLmZpbHRlcigocCkgPT4gIW1ldGEuY2FzZXMuc29tZSgoYykgPT4gYy5vdXRwdXRQb3J0ID09PSBwLnByb3BlcnR5KSk7XG4gICAgICAgIGNvbnN0IGNhc2VQb3J0cyA9IG1ldGEuY2FzZXMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IGMub3V0cHV0UG9ydCxcbiAgICAgICAgICAgIG5hbWU6IGMubGFiZWwsXG4gICAgICAgICAgICBkaXJlY3Rpb246IFBvcnREaXJlY3Rpb24uT1VUUFVULFxuICAgICAgICAgICAgbGFiZWw6IGMubGFiZWwsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogYy5vdXRwdXRQb3J0LFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGNhc2VDb3VudCA9IG1ldGEuY2FzZXMubGVuZ3RoO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9ydHM6IFsuLi5iYXNlUG9ydHMsIC4uLmNhc2VQb3J0c10sXG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGRlZmluaXRpb24ud2lkdGggPz8gMTIwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogY2FzZUNvdW50ID4gMCA/IDE0MCArIGNhc2VDb3VudCAqIDI0IDogZGVmaW5pdGlvbi5oZWlnaHQgPz8gMTQwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGFQYXRjaDogeyBzd2l0Y2hNZXRhZGF0YTogbWV0YSB9LFxuICAgICAgICB9O1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gc3dpdGNoIG9uXCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgU3dpdGNoRmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJEZWZhdWx0IG91dHB1dCB3aGVuIG5vIGNhc2UgbWF0Y2hlc1wiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJkZWZhdWx0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFN3aXRjaEZsb3dOb2RlLnByb3RvdHlwZSwgXCJkZWZhdWx0XCIsIHZvaWQgMCk7XG5Td2l0Y2hGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cuc3dpdGNoXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuc3dpdGNoXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICAgICAgICBjb2xvcjogXCIjZjk3MzE2XCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3dzLXNodWZmbGVcIixcbiAgICAgICAgd2lkdGg6IDEyMCxcbiAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcInN3aXRjaFwiLCBcIm11bHRpLWJyYW5jaFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIlN3aXRjaFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTXVsdGktYnJhbmNoIHN3aXRjaC4gUm91dGVzIHRoZSBpbnB1dCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgY2FzZSBvdXRwdXQsIG9yIHRoZSBkZWZhdWx0IG91dHB1dC5cIixcbiAgICAgICAgICAgIHN3aXRjaDoge1xuICAgICAgICAgICAgICAgIGNhc2VzOiBbXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UG9ydDogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIFN3aXRjaEZsb3dOb2RlKTtcbmV4cG9ydCB7IFN3aXRjaEZsb3dOb2RlIH07XG4vKipcbiAqIFBhcmFsbGVsIOKAlCBzcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy5cbiAqL1xubGV0IFBhcmFsbGVsRmxvd05vZGUgPSBjbGFzcyBQYXJhbGxlbEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBmYW4gb3V0XCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUGFyYWxsZWxGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJCcmFuY2hlc1wiLCBwbGFjZWhvbGRlcjogXCJDb2xsZWN0ZWQgYnJhbmNoIG91dHB1dHNcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiYnJhbmNoZXNcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXG5dLCBQYXJhbGxlbEZsb3dOb2RlLnByb3RvdHlwZSwgXCJicmFuY2hlc1wiLCB2b2lkIDApO1xuUGFyYWxsZWxGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cucGFyYWxsZWxcIiwge1xuICAgICAgICBraW5kOiBcImNvcmUuZmxvdy5wYXJhbGxlbFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiIzA2YjZkNFwiLFxuICAgICAgICBpY29uOiBcInRpLWFycm93cy12ZXJ0aWNhbFwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcInBhcmFsbGVsXCIsIFwiY29uY3VycmVudFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIlBhcmFsbGVsXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy4gQWxsIGJyYW5jaGVzIHJ1biBpbiBwYXJhbGxlbCBhbmQgb3V0cHV0cyBhcmUgY29sbGVjdGVkLlwiLFxuICAgICAgICAgICAgYnJhbmNoQ291bnQ6IDIsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgUGFyYWxsZWxGbG93Tm9kZSk7XG5leHBvcnQgeyBQYXJhbGxlbEZsb3dOb2RlIH07XG4vKipcbiAqIE1lcmdlIOKAlCBub3JtYWxpc2VzIGJyYW5jaC9wYXJhbGxlbCBvdXRwdXRzIGludG8gYSBzaW5nbGUgb3V0cHV0LlxuICovXG5sZXQgTWVyZ2VGbG93Tm9kZSA9IGNsYXNzIE1lcmdlRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIkJyYW5jaCBvdXRwdXRzXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dHMgdG8gbWVyZ2VcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZXNcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXG5dLCBNZXJnZUZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJNZXJnZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk1lcmdlZCByZXN1bHRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwibWVyZ2VkXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIE1lcmdlRmxvd05vZGUucHJvdG90eXBlLCBcIm1lcmdlZFwiLCB2b2lkIDApO1xuTWVyZ2VGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cubWVyZ2VcIiwge1xuICAgICAgICBraW5kOiBcImNvcmUuZmxvdy5tZXJnZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiMwZDk0ODhcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvd3MtbWVyZ2VcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJtZXJnZVwiLCBcImpvaW5cIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJNZXJnZVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTWVyZ2VzIG11bHRpcGxlIGJyYW5jaCBvdXRwdXRzIGludG8gYSBzaW5nbGUgbm9ybWFsaXNlZCBvdXRwdXQgb2JqZWN0LlwiLFxuICAgICAgICAgICAgc3RyYXRlZ3k6IFwiY29uY2F0XCIsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgTWVyZ2VGbG93Tm9kZSk7XG5leHBvcnQgeyBNZXJnZUZsb3dOb2RlIH07XG4vKipcbiAqIE1hcCDigJQgdHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QuXG4gKi9cbmxldCBNYXBGbG93Tm9kZSA9IGNsYXNzIE1hcEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byB0cmFuc2Zvcm1cIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBNYXBGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJUcmFuc2Zvcm1lZCBvdXRwdXRcIiwgcGxhY2Vob2xkZXI6IFwiTWFwcGVkIHJlc3VsdFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgTWFwRmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuTWFwRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93Lm1hcFwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93Lm1hcFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiM4NGNjMTZcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvd3MtcmlnaHQtbGVmdFwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcIm1hcFwiLCBcInRyYW5zZm9ybVwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIk1hcFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgbWFwcGVyLlwiLFxuICAgICAgICAgICAgbWFwcGVyOiB7fSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBNYXBGbG93Tm9kZSk7XG5leHBvcnQgeyBNYXBGbG93Tm9kZSB9O1xuLyoqXG4gKiBEZWxheSDigJQgcGF1c2VzIGV4ZWN1dGlvbiBmb3IgYSBjb25maWd1cmVkIGR1cmF0aW9uLlxuICovXG5sZXQgRGVsYXlGbG93Tm9kZSA9IGNsYXNzIERlbGF5Rmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIGZvcndhcmQgYWZ0ZXIgZGVsYXlcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBEZWxheUZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIk91dHB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJGb3J3YXJkZWQgdmFsdWVcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgRGVsYXlGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVPdXRcIiwgdm9pZCAwKTtcbkRlbGF5Rmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LmRlbGF5XCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuZGVsYXlcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICAgICAgICBjb2xvcjogXCIjYTNhM2EzXCIsXG4gICAgICAgIGljb246IFwidGktY2xvY2staG91ci00XCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwiZGVsYXlcIiwgXCJ3YWl0XCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiRGVsYXlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhdXNlcyBleGVjdXRpb24gZm9yIHRoZSBjb25maWd1cmVkIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpLCB0aGVuIGZvcndhcmRzIHRoZSBpbnB1dCB1bmNoYW5nZWQuXCIsXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiAxMDAwLFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIERlbGF5Rmxvd05vZGUpO1xuZXhwb3J0IHsgRGVsYXlGbG93Tm9kZSB9O1xuLyoqXG4gKiBFcnJvciBib3VuZGFyeSDigJQgdHJ5L2NhdGNoL2ZpbmFsbHkgd29ya2Zsb3cgYmVoYXZpb3VyLlxuICovXG5sZXQgRXJyb3JCb3VuZGFyeUZsb3dOb2RlID0gY2xhc3MgRXJyb3JCb3VuZGFyeUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBndWFyZFwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEVycm9yQm91bmRhcnlGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXN1bHRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IG9uIHN1Y2Nlc3NcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEVycm9yQm91bmRhcnlGbG93Tm9kZS5wcm90b3R5cGUsIFwicmVzdWx0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRXJyb3JcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IG9uIGZhaWx1cmVcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiZXJyb3JcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgRXJyb3JCb3VuZGFyeUZsb3dOb2RlLnByb3RvdHlwZSwgXCJlcnJvclwiLCB2b2lkIDApO1xuRXJyb3JCb3VuZGFyeUZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5lcnJvckJvdW5kYXJ5XCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuZXJyb3JCb3VuZGFyeVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiI2VmNDQ0NFwiLFxuICAgICAgICBpY29uOiBcInRpLXNoaWVsZC1jaGVja1wiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcImVycm9yXCIsIFwidHJ5LWNhdGNoXCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IgYm91bmRhcnlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIldyYXBzIHRoZSBpbnB1dCBpbiBhIHRyeS9jYXRjaC9maW5hbGx5LiBFbWl0cyB0aGUgcmVzdWx0IG9uIHN1Y2Nlc3MsIG9yIHRoZSBlcnJvciBvbiBmYWlsdXJlLlwiLFxuICAgICAgICAgICAgZmluYWxseTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgRXJyb3JCb3VuZGFyeUZsb3dOb2RlKTtcbmV4cG9ydCB7IEVycm9yQm91bmRhcnlGbG93Tm9kZSB9O1xuLyoqXG4gKiBIdW1hbiBhcHByb3ZhbCDigJQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy5cbiAqL1xubGV0IEh1bWFuQXBwcm92YWxGbG93Tm9kZSA9IGNsYXNzIEh1bWFuQXBwcm92YWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgcGVuZGluZyBhcHByb3ZhbFwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEh1bWFuQXBwcm92YWxGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJBcHByb3ZlZFwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBhcHByb3ZlZFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJhcHByb3ZlZFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBIdW1hbkFwcHJvdmFsRmxvd05vZGUucHJvdG90eXBlLCBcImFwcHJvdmVkXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVqZWN0ZWRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gcmVqZWN0ZWRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwicmVqZWN0ZWRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgSHVtYW5BcHByb3ZhbEZsb3dOb2RlLnByb3RvdHlwZSwgXCJyZWplY3RlZFwiLCB2b2lkIDApO1xuSHVtYW5BcHByb3ZhbEZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5odW1hbkFwcHJvdmFsXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuaHVtYW5BcHByb3ZhbFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiI2Q5NDZlZlwiLFxuICAgICAgICBpY29uOiBcInRpLXVzZXItY2hlY2tcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJhcHByb3ZhbFwiLCBcInN1c3BlbmRcIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJIdW1hbiBhcHByb3ZhbFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy4gRW1pdHMgdGhlIGFwcHJvdmVkIHZhbHVlIG9yIGEgcmVqZWN0aW9uLlwiLFxuICAgICAgICAgICAgYXBwcm92ZXJzOiBbXSxcbiAgICAgICAgICAgIHRpbWVvdXRNczogODY0MDAwMDAsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgSHVtYW5BcHByb3ZhbEZsb3dOb2RlKTtcbmV4cG9ydCB7IEh1bWFuQXBwcm92YWxGbG93Tm9kZSB9O1xuLyoqXG4gKiBSZXR1cm4g4oCUIGRlZmluZXMgYW5kIG5vcm1hbGlzZXMgdGhlIGZpbmFsIHdvcmtmbG93IG91dHB1dC5cbiAqL1xubGV0IFJldHVybkZsb3dOb2RlID0gY2xhc3MgUmV0dXJuRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIG5vcm1hbGlzZVwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFJldHVybkZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJldHVybmVkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJOb3JtYWxpc2VkIG91dHB1dFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUmV0dXJuRmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuUmV0dXJuRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LnJldHVyblwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LnJldHVyblwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiMyMmM1NWVcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvdy1iYWNrLXVwXCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwicmV0dXJuXCIsIFwib3V0cHV0XCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiUmV0dXJuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJOb3JtYWxpc2VzIHRoZSBpbnB1dCBpbnRvIHRoZSBmaW5hbCB3b3JrZmxvdyBvdXRwdXQgb2JqZWN0LlwiLFxuICAgICAgICAgICAgb3V0cHV0U2NoZW1hOiB7fSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBSZXR1cm5GbG93Tm9kZSk7XG5leHBvcnQgeyBSZXR1cm5GbG93Tm9kZSB9O1xuLyoqXG4gKiBDb2RlIOKAlCBzYW5kYm94ZWQgSlMvVFMgY29kZSBleGVjdXRpb24gKEFMRlJFRC01IMKnNykuXG4gKlxuICogVGhlIGVuZ2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHNhbmRib3ggZGlyZWN0bHkgKMKnMjIuNCkuIEEgZnV0dXJlXG4gKiBleGVjdXRvciBtYXkgd3JhcCB0aGUgYENvZGVTYW5kYm94YCBjb250cmFjdCAoQUxGUkVELTUgwqc3LjE3KSBhcyBhXG4gKiBwbHVnZ2FibGUgZXhlY3V0b3IuIFRoZSBwbGFjZWhvbGRlciBzeW50YXggKGB7eyAkaW5wdXQgfX1gLCBge3sgJGl0ZW0gfX1gLFxuICogYHt7ICRpbmRleCB9fWAsIGB7eyAkdmFycyB9fWAsIGB7eyAkbm9kZVtcIk5hbWVcIl0ub3V0cHV0IH19YCkgaXMgTWFzdHJhLVxuICogYWdub3N0aWMgYW5kIGxpdmVzIGluIHRoZSBkb3duc3RyZWFtIHByb2plY3QncyBgbW9kdWxlcy9jb3JlYCAoQUxGUkVELTYpLlxuICovXG5sZXQgQ29kZUZsb3dOb2RlID0gY2xhc3MgQ29kZUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJJbnB1dCBvYmplY3QgKGFjY2Vzc2libGUgYXMgJGlucHV0KVwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcImlucHV0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIENvZGVGbG93Tm9kZS5wcm90b3R5cGUsIFwiaW5wdXRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXN1bHRcIiwgcGxhY2Vob2xkZXI6IFwiQ29kZSBleGVjdXRpb24gcmVzdWx0XCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDb2RlRmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuQ29kZUZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5jb2RlXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuY29kZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiM3YzNhZWRcIixcbiAgICAgICAgaWNvbjogXCJ0aS1jb2RlXCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29kZVwiLCBcInNhbmRib3hcIiwgXCJ0cmFuc2Zvcm1cIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSdW5zIHVzZXItYXV0aG9yZWQgSlMvVFMgaW4gYSByZXN0cmljdGVkIFZNIHNhbmRib3guIFN1cHBvcnRzIHBsYWNlaG9sZGVyIHN5bnRheCBmb3Igd29ya2Zsb3cgZGF0YSByZWZlcmVuY2VzLlwiLFxuICAgICAgICAgICAgY29kZTogXCJcIixcbiAgICAgICAgICAgIGxhbmd1YWdlOiBcImphdmFzY3JpcHRcIixcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBDb2RlRmxvd05vZGUpO1xuZXhwb3J0IHsgQ29kZUZsb3dOb2RlIH07XG4vKipcbiAqIEFsbCBidWlsdC1pbiBmbG93LWNvbnRyb2wgbm9kZSBjb25zdHJ1Y3RvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBHUkFQSF9GTE9XX0NPTlRST0xfTk9ERVMgPSBbXG4gICAgSWZGbG93Tm9kZSxcbiAgICBTd2l0Y2hGbG93Tm9kZSxcbiAgICBQYXJhbGxlbEZsb3dOb2RlLFxuICAgIE1lcmdlRmxvd05vZGUsXG4gICAgTWFwRmxvd05vZGUsXG4gICAgRGVsYXlGbG93Tm9kZSxcbiAgICBFcnJvckJvdW5kYXJ5Rmxvd05vZGUsXG4gICAgSHVtYW5BcHByb3ZhbEZsb3dOb2RlLFxuICAgIFJldHVybkZsb3dOb2RlLFxuICAgIENvZGVGbG93Tm9kZSxcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2labXh2ZHkxamIyNTBjbTlzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZMaTR2TGk0dmMzSmpMMmR5WVhCb0wzTm9ZWEpsWkM5dWIyUmxjeTltYkc5M0xXTnZiblJ5YjJ3dWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUU3T3pzN096czdPenM3TzBkQlYwYzdRVUZEU0N4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFdEJRVXNzUlVGQlJTeFJRVUZSTEVWQlFVVXNUVUZCVFN4blEwRkJaME1zUTBGQlF6dEJRVU40UlN4UFFVRlBMRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzZVVKQlFYbENMRU5CUVVNN1FVRkRjRVFzVDBGQlR5eEZRVU5NTEdsQ1FVRnBRaXhGUVVOcVFpeExRVUZMTEVWQlEwd3NTVUZCU1N4RlFVTktMRTFCUVUwc1JVRkRUaXhoUVVGaExFZEJSV1FzVFVGQlRTd3JRa0ZCSzBJc1EwRkJRenRCUVVWMlF5eFBRVUZQTEVWQlFVVXNVMEZCVXl4RlFVRkZMR3RDUVVGbE8wRkJSVzVET3pzN1IwRkhSenRCUVdkQ1NTeEpRVUZOTEZWQlFWVXNSMEZCYUVJc1RVRkJUU3hWUVVGWExGTkJRVkVzUzBGQlN6dERRV1Z3UXl4RFFVRkJPMEZCV0VNN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHRkJRV0VzUlVGQlJTeFhRVUZYTEVWQlFVVXNiVUpCUVcxQ0xFVkJRVVVzUTBGQlF6dEpRVU5xUml4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPM2xEUVVOWU8wRkJTMmhDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1YwRkJWeXhGUVVGRkxDdENRVUVyUWl4RlFVRkZMRU5CUVVNN1NVRkRia1lzVFVGQlRTeERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVGRE96dDNRMEZEV2p0QlFVdG1PMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFVkJRVVVzVjBGQlZ5eEZRVUZGTEdkRFFVRm5ReXhGUVVGRkxFTkJRVU03U1VGRGNFWXNUVUZCVFN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUlVGQlJTeERRVUZET3p0M1EwRkRXanRCUVdSS0xGVkJRVlU3U1VGbWRFSXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSVHRSUVVOd1FpeEpRVUZKTEVWQlFVVXNZMEZCWXp0UlFVTndRaXhSUVVGUkxFVkJRVVVzWTBGQll6dFJRVU40UWl4TFFVRkxMRVZCUVVVc1UwRkJVenRSUVVOb1FpeEpRVUZKTEVWQlFVVXNiVUpCUVcxQ08xRkJRM3BDTEV0QlFVc3NSVUZCUlN4RlFVRkZPMUZCUTFRc1RVRkJUU3hGUVVGRkxFVkJRVVU3VVVGRFZpeE5RVUZOTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1lVRkJZU3hGUVVGRkxGRkJRVkVzUTBGQlF6dFJRVU42UXl4UlFVRlJMRVZCUVVVN1dVRkRVaXhMUVVGTExFVkJRVVVzU1VGQlNUdFpRVU5ZTEZkQlFWY3NSVUZCUlN4eFIwRkJjVWM3V1VGRGJFZ3NVMEZCVXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hGUVVGRk8xTkJRM1pGTzB0QlEwWXNRMEZCUXp0SlFVTkVMRXRCUVVzc1JVRkJSVHRIUVVOTExGVkJRVlVzUTBGbGRFSTdPMEZCUlVRN096czdPenM3T3p0SFFWTkhPMEZCYlVKSkxFbEJRVTBzWTBGQll5eEhRVUZ3UWl4TlFVRk5MR05CUVdVc1UwRkJVU3hUUVVGVE8wbEJWek5ET3pzN08wOUJTVWM3U1VGRFNDeE5RVUZOTEVOQlFWVXNZVUZCWVN4RFFVRkRMRWxCUVhkQ08xRkJRM0JFTEUxQlFVMHNWVUZCVlN4SFFVRkhMR2xDUVVGcFFpeERRVUZETEVsQlFXRXNRMEZCUXl4RFFVRkRPMUZCUTNCRUxFMUJRVTBzVTBGQlV5eEhRVUZITEZWQlFWVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVOMlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRelZFTEVOQlFVTTdVVUZEUml4TlFVRk5MRk5CUVZNc1IwRkJNRUlzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdXVUZET1VRc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGQlF5eFZRVUZWTzFsQlEzUkNMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN6dFpRVU5pTEZOQlFWTXNSVUZCUlN4aFFVRmhMRU5CUVVNc1RVRkJUVHRaUVVNdlFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRXRCUVVzN1dVRkRaQ3hSUVVGUkxFVkJRVVVzUzBGQlN6dFpRVU5tTEUxQlFVMHNSVUZCUlN4TFFVRkxPMWxCUTJJc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eFZRVUZWTzFOQlEyNUNMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMG9zVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGNFTXNUMEZCVHp0WlFVTk1MRXRCUVVzc1JVRkJSU3hEUVVGRExFZEJRVWNzVTBGQlV5eEZRVUZGTEVkQlFVY3NVMEZCVXl4RFFVRkRPMWxCUTI1RExFbEJRVWtzUlVGQlJUdG5Ra0ZEU2l4TFFVRkxMRVZCUVVVc1ZVRkJWU3hEUVVGRExFdEJRVXNzU1VGQlNTeEhRVUZITzJkQ1FVTTVRaXhOUVVGTkxFVkJRVVVzVTBGQlV5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhIUVVGSExGTkJRVk1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ6dGhRVU40UlR0WlFVTkVMRk5CUVZNc1JVRkJSU3hGUVVGRkxHTkJRV01zUlVGQlJTeEpRVUZKTEVWQlFVVTdVMEZEY0VNc1EwRkJRenRKUVVOS0xFTkJRVU03UTBGRFJpeERRVUZCTzBGQmNFTkRPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hoUVVGaExFVkJRVVVzVjBGQlZ5eEZRVUZGTEc5Q1FVRnZRaXhGUVVGRkxFTkJRVU03U1VGRGJFWXNTMEZCU3l4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZET3pzMlEwRkRXRHRCUVV0b1FqdEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNVMEZCVXl4RlFVRkZMRmRCUVZjc1JVRkJSU3h4UTBGQmNVTXNSVUZCUlN4RFFVRkRPMGxCUXpWR0xFMUJRVTBzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1EwRkJRenM3SzBOQlExbzdRVUZVVUN4alFVRmpPMGxCYkVJeFFpeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVU3VVVGRGVFSXNTVUZCU1N4RlFVRkZMR3RDUVVGclFqdFJRVU40UWl4UlFVRlJMRVZCUVVVc1kwRkJZenRSUVVONFFpeExRVUZMTEVWQlFVVXNVMEZCVXp0UlFVTm9RaXhKUVVGSkxFVkJRVVVzYlVKQlFXMUNPMUZCUTNwQ0xFdEJRVXNzUlVGQlJTeEhRVUZITzFGQlExWXNUVUZCVFN4RlFVRkZMRWRCUVVjN1VVRkRXQ3hOUVVGTkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMR05CUVdNc1EwRkJRenRSUVVNeFF5eFJRVUZSTEVWQlFVVTdXVUZEVWl4TFFVRkxMRVZCUVVVc1VVRkJVVHRaUVVObUxGZEJRVmNzUlVGQlJTeHBSMEZCYVVjN1dVRkRPVWNzVFVGQlRTeEZRVUZGTzJkQ1FVTk9MRXRCUVVzc1JVRkJSU3hGUVVGRk8yZENRVU5VTEZkQlFWY3NSVUZCUlN4VFFVRlRPMkZCUTNaQ08xTkJRMFk3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc1kwRkJZeXhEUVhkRE1VSTdPMEZCUlVRN08wZEJSVWM3UVVGblFra3NTVUZCVFN4blFrRkJaMElzUjBGQmRFSXNUVUZCVFN4blFrRkJhVUlzVTBGQlVTeExRVUZMTzBOQlZURkRMRU5CUVVFN1FVRk9RenRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzWVVGQllTeEZRVUZGTEZkQlFWY3NSVUZCUlN4clFrRkJhMElzUlVGQlJTeERRVUZETzBsQlEyaEdMRXRCUVVzc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXpzN0swTkJRMWc3UVVGTGFFSTdTVUZJUXl4UlFVRlJMRVZCUVVVN1NVRkRWaXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMRlZCUVZVc1JVRkJSU3hYUVVGWExFVkJRVVVzTUVKQlFUQkNMRVZCUVVVc1EwRkJRenRKUVVOc1JpeE5RVUZOTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1ZVRkJWU3hGUVVGRkxFTkJRVU03TzJ0RVFVTldPMEZCVkZZc1owSkJRV2RDTzBsQlpqVkNMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNSVUZCUlR0UlFVTXhRaXhKUVVGSkxFVkJRVVVzYjBKQlFXOUNPMUZCUXpGQ0xGRkJRVkVzUlVGQlJTeGpRVUZqTzFGQlEzaENMRXRCUVVzc1JVRkJSU3hUUVVGVE8xRkJRMmhDTEVsQlFVa3NSVUZCUlN4dlFrRkJiMEk3VVVGRE1VSXNTMEZCU3l4RlFVRkZMRVZCUVVVN1VVRkRWQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdFJRVU5XTEUxQlFVMHNSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hWUVVGVkxFVkJRVVVzV1VGQldTeERRVUZETzFGQlF6RkRMRkZCUVZFc1JVRkJSVHRaUVVOU0xFdEJRVXNzUlVGQlJTeFZRVUZWTzFsQlEycENMRmRCUVZjc1JVRkJSU3h2UjBGQmIwYzdXVUZEYWtnc1YwRkJWeXhGUVVGRkxFTkJRVU03VTBGRFpqdExRVU5HTEVOQlFVTTdTVUZEUkN4TFFVRkxMRVZCUVVVN1IwRkRTeXhuUWtGQlowSXNRMEZWTlVJN08wRkJSVVE3TzBkQlJVYzdRVUZuUWtrc1NVRkJUU3hoUVVGaExFZEJRVzVDTEUxQlFVMHNZVUZCWXl4VFFVRlJMRXRCUVVzN1EwRlZka01zUTBGQlFUdEJRVTVETzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4blFrRkJaMElzUlVGQlJTeFhRVUZYTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzUTBGQlF6dEpRVU51Uml4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVOQlFVTTdPelpEUVVOVU8wRkJTMjVDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4bFFVRmxMRVZCUVVVc1YwRkJWeXhGUVVGRkxHVkJRV1VzUlVGQlJTeERRVUZETzBsQlF6VkZMRTFCUVUwc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFJRVUZSTEVWQlFVVXNRMEZCUXpzN05rTkJRMW83UVVGVVRpeGhRVUZoTzBsQlpucENMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlR0UlFVTjJRaXhKUVVGSkxFVkJRVVVzYVVKQlFXbENPMUZCUTNaQ0xGRkJRVkVzUlVGQlJTeFRRVUZUTzFGQlEyNUNMRXRCUVVzc1JVRkJSU3hUUVVGVE8xRkJRMmhDTEVsQlFVa3NSVUZCUlN4cFFrRkJhVUk3VVVGRGRrSXNTMEZCU3l4RlFVRkZMRVZCUVVVN1VVRkRWQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdFJRVU5XTEUxQlFVMHNSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzVFVGQlRTeERRVUZETzFGQlEycERMRkZCUVZFc1JVRkJSVHRaUVVOU0xFdEJRVXNzUlVGQlJTeFBRVUZQTzFsQlEyUXNWMEZCVnl4RlFVRkZMSGRGUVVGM1JUdFpRVU55Uml4UlFVRlJMRVZCUVVVc1VVRkJVVHRUUVVOdVFqdExRVU5HTEVOQlFVTTdTVUZEUkN4TFFVRkxMRVZCUVVVN1IwRkRTeXhoUVVGaExFTkJWWHBDT3p0QlFVVkVPenRIUVVWSE8wRkJaMEpKTEVsQlFVMHNWMEZCVnl4SFFVRnFRaXhOUVVGTkxGZEJRVmtzVTBGQlVTeExRVUZMTzBOQlZYSkRMRU5CUVVFN1FVRk9RenRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzWVVGQllTeEZRVUZGTEZkQlFWY3NSVUZCUlN4dlFrRkJiMElzUlVGQlJTeERRVUZETzBsQlEyeEdMRXRCUVVzc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXpzN01FTkJRMWc3UVVGTGFFSTdTVUZJUXl4UlFVRlJMRVZCUVVVN1NVRkRWaXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMRzlDUVVGdlFpeEZRVUZGTEZkQlFWY3NSVUZCUlN4bFFVRmxMRVZCUVVVc1EwRkJRenRKUVVOcVJpeE5RVUZOTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRkxFTkJRVU03T3pKRFFVTmFPMEZCVkU0c1YwRkJWenRKUVdaMlFpeEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZPMUZCUTNKQ0xFbEJRVWtzUlVGQlJTeGxRVUZsTzFGQlEzSkNMRkZCUVZFc1JVRkJSU3hUUVVGVE8xRkJRMjVDTEV0QlFVc3NSVUZCUlN4VFFVRlRPMUZCUTJoQ0xFbEJRVWtzUlVGQlJTeHpRa0ZCYzBJN1VVRkROVUlzUzBGQlN5eEZRVUZGTEVWQlFVVTdVVUZEVkN4TlFVRk5MRVZCUVVVc1JVRkJSVHRSUVVOV0xFMUJRVTBzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRVZCUVVVc1YwRkJWeXhEUVVGRE8xRkJRM0JETEZGQlFWRXNSVUZCUlR0WlFVTlNMRXRCUVVzc1JVRkJSU3hMUVVGTE8xbEJRMW9zVjBGQlZ5eEZRVUZGTEc5R1FVRnZSanRaUVVOcVJ5eE5RVUZOTEVWQlFVVXNSVUZCUlR0VFFVTllPMHRCUTBZc1EwRkJRenRKUVVORUxFdEJRVXNzUlVGQlJUdEhRVU5MTEZkQlFWY3NRMEZWZGtJN08wRkJSVVE3TzBkQlJVYzdRVUZuUWtrc1NVRkJUU3hoUVVGaExFZEJRVzVDTEUxQlFVMHNZVUZCWXl4VFFVRlJMRXRCUVVzN1EwRlZka01zUTBGQlFUdEJRVTVETzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4aFFVRmhMRVZCUVVVc1YwRkJWeXhGUVVGRkxEaENRVUU0UWl4RlFVRkZMRU5CUVVNN1NVRkROVVlzUzBGQlN5eERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRE96czBRMEZEV0R0QlFVdG9RanRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzWTBGQll5eEZRVUZGTEZkQlFWY3NSVUZCUlN4cFFrRkJhVUlzUlVGQlJTeERRVUZETzBsQlF6ZEZMRTFCUVUwc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXpzN0swTkJRMVE3UVVGVVVpeGhRVUZoTzBsQlpucENMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlR0UlFVTjJRaXhKUVVGSkxFVkJRVVVzYVVKQlFXbENPMUZCUTNaQ0xGRkJRVkVzUlVGQlJTeFRRVUZUTzFGQlEyNUNMRXRCUVVzc1JVRkJSU3hUUVVGVE8xRkJRMmhDTEVsQlFVa3NSVUZCUlN4cFFrRkJhVUk3VVVGRGRrSXNTMEZCU3l4RlFVRkZMRVZCUVVVN1VVRkRWQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdFJRVU5XTEUxQlFVMHNSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzVFVGQlRTeERRVUZETzFGQlEycERMRkZCUVZFc1JVRkJSVHRaUVVOU0xFdEJRVXNzUlVGQlJTeFBRVUZQTzFsQlEyUXNWMEZCVnl4RlFVRkZMRzlIUVVGdlJ6dFpRVU5xU0N4VlFVRlZMRVZCUVVVc1NVRkJTVHRUUVVOcVFqdExRVU5HTEVOQlFVTTdTVUZEUkN4TFFVRkxMRVZCUVVVN1IwRkRTeXhoUVVGaExFTkJWWHBDT3p0QlFVVkVPenRIUVVWSE8wRkJaMEpKTEVsQlFVMHNjVUpCUVhGQ0xFZEJRVE5DTEUxQlFVMHNjVUpCUVhOQ0xGTkJRVkVzUzBGQlN6dERRV1V2UXl4RFFVRkJPMEZCV0VNN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHRkJRV0VzUlVGQlJTeFhRVUZYTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzUTBGQlF6dEpRVU01UlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPMjlFUVVOWU8wRkJTMmhDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4UlFVRlJMRVZCUVVVc1YwRkJWeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRU5CUVVNN1NVRkRla1VzVFVGQlRTeERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRkZCUVZFc1JVRkJSU3hEUVVGRE96dHhSRUZEV2p0QlFVdHFRanRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEZkQlFWY3NSVUZCUlN4dFFrRkJiVUlzUlVGQlJTeERRVUZETzBsQlEzaEZMRTFCUVUwc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXpzN2IwUkJRMW83UVVGa1RDeHhRa0ZCY1VJN1NVRm1ha01zU1VGQlNTeERRVUZETEhsQ1FVRjVRaXhGUVVGRk8xRkJReTlDTEVsQlFVa3NSVUZCUlN4NVFrRkJlVUk3VVVGREwwSXNVVUZCVVN4RlFVRkZMR05CUVdNN1VVRkRlRUlzUzBGQlN5eEZRVUZGTEZOQlFWTTdVVUZEYUVJc1NVRkJTU3hGUVVGRkxHbENRVUZwUWp0UlFVTjJRaXhMUVVGTExFVkJRVVVzUlVGQlJUdFJRVU5VTEUxQlFVMHNSVUZCUlN4RlFVRkZPMUZCUTFZc1RVRkJUU3hGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4WFFVRlhMRU5CUVVNN1VVRkRkRU1zVVVGQlVTeEZRVUZGTzFsQlExSXNTMEZCU3l4RlFVRkZMR2RDUVVGblFqdFpRVU4yUWl4WFFVRlhMRVZCUVVVc0swWkJRU3RHTzFsQlF6VkhMRTlCUVU4c1JVRkJSU3hMUVVGTE8xTkJRMlk3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc2NVSkJRWEZDTEVOQlpXcERPenRCUVVWRU96dEhRVVZITzBGQmFVSkpMRWxCUVUwc2NVSkJRWEZDTEVkQlFUTkNMRTFCUVUwc2NVSkJRWE5DTEZOQlFWRXNTMEZCU3p0RFFXVXZReXhEUVVGQk8wRkJXRU03U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEdGQlFXRXNSVUZCUlN4WFFVRlhMRVZCUVVVc2QwSkJRWGRDTEVWQlFVVXNRMEZCUXp0SlFVTjBSaXhMUVVGTExFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNUMEZCVHl4RlFVRkZMRU5CUVVNN08yOUVRVU5ZTzBGQlMyaENPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hWUVVGVkxFVkJRVVVzVjBGQlZ5eEZRVUZGTEhOQ1FVRnpRaXhGUVVGRkxFTkJRVU03U1VGRE9VVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxGVkJRVlVzUlVGQlJTeERRVUZET3p0MVJFRkRXanRCUVV0dVFqdEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRmRCUVZjc1JVRkJSU3h6UWtGQmMwSXNSVUZCUlN4RFFVRkRPMGxCUXpsRkxFMUJRVTBzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4VlFVRlZMRVZCUVVVc1EwRkJRenM3ZFVSQlExbzdRVUZrVWl4eFFrRkJjVUk3U1VGb1FtcERMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNSVUZCUlR0UlFVTXZRaXhKUVVGSkxFVkJRVVVzZVVKQlFYbENPMUZCUXk5Q0xGRkJRVkVzUlVGQlJTeGpRVUZqTzFGQlEzaENMRXRCUVVzc1JVRkJSU3hUUVVGVE8xRkJRMmhDTEVsQlFVa3NSVUZCUlN4bFFVRmxPMUZCUTNKQ0xFdEJRVXNzUlVGQlJTeEZRVUZGTzFGQlExUXNUVUZCVFN4RlFVRkZMRVZCUVVVN1VVRkRWaXhOUVVGTkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNWVUZCVlN4RlFVRkZMRk5CUVZNc1EwRkJRenRSUVVOMlF5eFJRVUZSTEVWQlFVVTdXVUZEVWl4TFFVRkxMRVZCUVVVc1owSkJRV2RDTzFsQlEzWkNMRmRCUVZjc1JVRkJSU3huUjBGQlowYzdXVUZETjBjc1UwRkJVeXhGUVVGRkxFVkJRVVU3V1VGRFlpeFRRVUZUTEVWQlFVVXNVVUZCVVR0VFFVTndRanRMUVVOR0xFTkJRVU03U1VGRFJDeExRVUZMTEVWQlFVVTdSMEZEU3l4eFFrRkJjVUlzUTBGbGFrTTdPMEZCUlVRN08wZEJSVWM3UVVGblFra3NTVUZCVFN4alFVRmpMRWRCUVhCQ0xFMUJRVTBzWTBGQlpTeFRRVUZSTEV0QlFVczdRMEZWZUVNc1EwRkJRVHRCUVU1RE8wbEJTRU1zVVVGQlVTeEZRVUZGTzBsQlExWXNVMEZCVXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeGhRVUZoTEVWQlFVVXNWMEZCVnl4RlFVRkZMRzlDUVVGdlFpeEZRVUZGTEVOQlFVTTdTVUZEYkVZc1MwRkJTeXhEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4RFFVRkRPenMyUTBGRFdEdEJRVXRvUWp0SlFVaERMRkZCUVZFc1JVRkJSVHRKUVVOV0xGTkJRVk1zUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNWMEZCVnl4RlFVRkZMRzFDUVVGdFFpeEZRVUZGTEVOQlFVTTdTVUZEYkVZc1RVRkJUU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEZGQlFWRXNSVUZCUlN4RFFVRkRPenM0UTBGRFdqdEJRVlJPTEdOQlFXTTdTVUZtTVVJc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RlFVRkZPMUZCUTNoQ0xFbEJRVWtzUlVGQlJTeHJRa0ZCYTBJN1VVRkRlRUlzVVVGQlVTeEZRVUZGTEZOQlFWTTdVVUZEYmtJc1MwRkJTeXhGUVVGRkxGTkJRVk03VVVGRGFFSXNTVUZCU1N4RlFVRkZMR3RDUVVGclFqdFJRVU40UWl4TFFVRkxMRVZCUVVVc1JVRkJSVHRSUVVOVUxFMUJRVTBzUlVGQlJTeEZRVUZGTzFGQlExWXNUVUZCVFN4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFJRVUZSTEVOQlFVTTdVVUZEY0VNc1VVRkJVU3hGUVVGRk8xbEJRMUlzUzBGQlN5eEZRVUZGTEZGQlFWRTdXVUZEWml4WFFVRlhMRVZCUVVVc05rUkJRVFpFTzFsQlF6RkZMRmxCUVZrc1JVRkJSU3hGUVVGRk8xTkJRMnBDTzB0QlEwWXNRMEZCUXp0SlFVTkVMRXRCUVVzc1JVRkJSVHRIUVVOTExHTkJRV01zUTBGVk1VSTdPMEZCUlVRN096czdPenM3TzBkQlVVYzdRVUZwUWtrc1NVRkJUU3haUVVGWkxFZEJRV3hDTEUxQlFVMHNXVUZCWVN4VFFVRlJMRXRCUVVzN1EwRlZkRU1zUTBGQlFUdEJRVTVETzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVVVc1YwRkJWeXhGUVVGRkxIRkRRVUZ4UXl4RlFVRkZMRU5CUVVNN1NVRkROMFlzUzBGQlN5eERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRE96c3lRMEZEV0R0QlFVdG9RanRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzVVVGQlVTeEZRVUZGTEZkQlFWY3NSVUZCUlN4MVFrRkJkVUlzUlVGQlJTeERRVUZETzBsQlF6ZEZMRTFCUVUwc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFJRVUZSTEVWQlFVVXNRMEZCUXpzN05FTkJRMW83UVVGVVRpeFpRVUZaTzBsQmFFSjRRaXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVN1VVRkRkRUlzU1VGQlNTeEZRVUZGTEdkQ1FVRm5RanRSUVVOMFFpeFJRVUZSTEVWQlFVVXNVMEZCVXp0UlFVTnVRaXhMUVVGTExFVkJRVVVzVTBGQlV6dFJRVU5vUWl4SlFVRkpMRVZCUVVVc1UwRkJVenRSUVVObUxFdEJRVXNzUlVGQlJTeEZRVUZGTzFGQlExUXNUVUZCVFN4RlFVRkZMRVZCUVVVN1VVRkRWaXhOUVVGTkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSU3hYUVVGWExFTkJRVU03VVVGRGFFUXNVVUZCVVN4RlFVRkZPMWxCUTFJc1MwRkJTeXhGUVVGRkxFMUJRVTA3V1VGRFlpeFhRVUZYTEVWQlFVVXNaMGhCUVdkSU8xbEJRemRJTEVsQlFVa3NSVUZCUlN4RlFVRkZPMWxCUTFJc1VVRkJVU3hGUVVGRkxGbEJRVms3VTBGRGRrSTdTMEZEUml4RFFVRkRPMGxCUTBRc1MwRkJTeXhGUVVGRk8wZEJRMHNzV1VGQldTeERRVlY0UWpzN1FVRkZSRHM3UjBGRlJ6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MSGRDUVVGM1FpeEhRVUZITzBsQlEzUkRMRlZCUVZVN1NVRkRWaXhqUVVGak8wbEJRMlFzWjBKQlFXZENPMGxCUTJoQ0xHRkJRV0U3U1VGRFlpeFhRVUZYTzBsQlExZ3NZVUZCWVR0SlFVTmlMSEZDUVVGeFFqdEpRVU55UWl4eFFrRkJjVUk3U1VGRGNrSXNZMEZCWXp0SlFVTmtMRmxCUVZrN1EwRkRTaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkFiVzlrZFd4bElHbHVkR1ZuY21GMGFXOXVjeTluY21Gd2FDOXViMlJsY3k5bWJHOTNMV052Ym5SeWIyeGNiaUFxSUVCemRXMXRZWEo1SUZCeWIyUjFZM1JwYjI0Z1pteHZkeTFqYjI1MGNtOXNJRzV2WkdVZ2EybHVaQ0JrWldOc1lYSmhkR2x2Ym5NZ0tFUkZRMEZHTFRNeUlNS25Nakl1TWk0eUtTNWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkRZVzV2Ym1sallXd2dZRUJ1YjJSbFlDMWtaV052Y21GMFpXUWdZMnhoYzNObGN5Qm1iM0lnZEdobElIUmxiaUJCVEVaU1JVUXROVnh1SUNvZ1pteHZkeTFqYjI1MGNtOXNJR3RwYm1SekxpQlVhR1Z6WlNCaGNtVWdaM0poY0dndGJHVjJaV3dnYldGamNtOXpPaUIwYUdVZ1pXNW5hVzVsSjNNZ2NHeGhibTVsY2x4dUlDb2djbVZqYjJkdWFYTmxjeUIwYUdWdElHRnpJRzl5WkdsdVlYSjVJR1Y0WldOMWRHRmliR1VnYm05a1pYTWdLTUtuTlM0M0tTQmlkWFFnZEdobGVTQm9ZWFpsSUc1dlhHNGdLaUJpZFdsc2RDMXBiaUJsZUdWamRYUnZjbk1nNG9DVUlHUnZkMjV6ZEhKbFlXMGdjSEp2YW1WamRITWdLR1V1Wnk0Z1FVeEdVa1ZFS1NCeVpXZHBjM1JsY2lCamRYTjBiMjFjYmlBcUlHVjRaV04xZEc5eWN5QnZjaUJqYjIxd2FXeGxJSFJvWlcwZ2FXNTBieUJOWVhOMGNtRWdZMjl0Y0c5emFYUnBiMjRnUVZCSmN5QW93cWN5TWk0eUxqSXBMbHh1SUNwY2JpQXFJRlJvWlNCMGFISmxaU0JzYjI5d0lHdHBibVJ6SUNoZ1kyOXlaUzVzYjI5d0xtWnZjbVZoWTJndmQyaHBiR1V2ZFc1MGFXeGdLU0JoYkhKbFlXUjVJR2hoZG1VZ1luVnBiSFF0YVc1Y2JpQXFJR1Y0WldOMWRHOXljeUFvd3FjMUxqa3BJR0Z1WkNCaGNtVWdUazlVSUhKbFpHVmpiR0Z5WldRZ2FHVnlaUzVjYmlBcUwxeHVhVzF3YjNKMElIc2dUVzlrWld3c0lHMXZaR1ZzTENCeVpYRjFhWEpsWkNCOUlHWnliMjBnWENKQVpHVmpZV1l0ZEhNdlpHVmpiM0poZEc5eUxYWmhiR2xrWVhScGIyNWNJanRjYm1sdGNHOXlkQ0I3SUhWcFpXeGxiV1Z1ZENCOUlHWnliMjBnWENKQVpHVmpZV1l0ZEhNdmRXa3RaR1ZqYjNKaGRHOXljMXdpTzF4dWFXMXdiM0owSUh0Y2JpQWdaM0poY0doRVpXWnBibWwwYVc5dVQyWXNYRzRnSUdsdWNIVjBMRnh1SUNCdWIyUmxMRnh1SUNCdmRYUndkWFFzWEc0Z0lGQnZjblJFYVhKbFkzUnBiMjRzWEc0Z0lIUjVjR1VnUjNKaGNHaFFiM0owUkdWbWFXNXBkR2x2Yml4Y2JuMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OTFhUzFrWldOdmNtRjBiM0p6TDJkeVlYQm9YQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRTV2WkdWTlpYUmhaR0YwWVVOb1lXNW5aU3dnVTNkcGRHTm9UbTlrWlUxbGRHRmtZWFJoSUgwZ1puSnZiU0JjSWk0dUwzUjVjR1Z6WENJN1hHNXBiWEJ2Y25RZ2V5QkhjbUZ3YUU1dlpHVWdmU0JtY205dElGd2lMaTlpWVhObFhDSTdYRzVjYmk4cUtseHVJQ29nU1dZZzRvQ1VJR052Ym1ScGRHbHZibUZzSUdKeVlXNWphQzRnUlhaaGJIVmhkR1Z6SUdFZ1lFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNWdJQ2pDcHpJeUxqTXBJR0Z1WkZ4dUlDb2djbTkxZEdWeklIUm9aU0JwYm5CMWRDQjBieUIwYUdVZ1lIUm9aVzVnSUc5eUlHQmxiSE5sWUNCdmRYUndkWFF1WEc0Z0tpOWNia0J1YjJSbEtGd2lZMjl5WlM1bWJHOTNMbWxtWENJc0lIdGNiaUFnYTJsdVpEb2dYQ0pqYjNKbExtWnNiM2N1YVdaY0lpeGNiaUFnWTJGMFpXZHZjbms2SUZ3aVJteHZkeUJEYjI1MGNtOXNYQ0lzWEc0Z0lHTnZiRzl5T2lCY0lpTm1OVGxsTUdKY0lpeGNiaUFnYVdOdmJqb2dYQ0owYVMxaGNuSnZkM010YzNCc2FYUXRNbHdpTEZ4dUlDQjNhV1IwYURvZ09UWXNYRzRnSUdobGFXZG9kRG9nT1RZc1hHNGdJR3hoWW1Wc2N6b2dXMXdpWm14dmQxd2lMQ0JjSW1OdmJtUnBkR2x2Ym1Gc1hDSXNJRndpWW5KaGJtTm9YQ0pkTEZ4dUlDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lIUnBkR3hsT2lCY0lrbG1YQ0lzWEc0Z0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUZ3aVEyOXVaR2wwYVc5dVlXd2dZbkpoYm1Ob0xpQkZkbUZzZFdGMFpYTWdkR2hsSUdOdmJtWnBaM1Z5WldRZ1kyOXVaR2wwYVc5dUlHRnVaQ0J5YjNWMFpYTWdkR2hsSUdsdWNIVjBJSFJ2SUhSb1pTQnRZWFJqYUdsdVp5QnZkWFJ3ZFhRdVhDSXNYRzRnSUNBZ1kyOXVaR2wwYVc5dU9pQjdJRzl3T2lCY0ltVnhYQ0lzSUd4bFpuUTZJSHNnWTI5dWMzUTZJSFJ5ZFdVZ2ZTd2djbWxuYUhRNklIc2dZMjl1YzNRNklIUnlkV1VnZlNCOUxGeHVJQ0I5TEZ4dWZTbGNia0J0YjJSbGJDZ3BYRzVsZUhCdmNuUWdZMnhoYzNNZ1NXWkdiRzkzVG05a1pTQmxlSFJsYm1SeklFMXZaR1ZzSUh0Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJblJsZUhSaGNtVmhYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVNXNXdkWFFnZG1Gc2RXVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lWbUZzZFdVZ2RHOGdaWFpoYkhWaGRHVmNJaUI5S1Z4dUlDQkFhVzV3ZFhRb2V5Qm9ZVzVrYkdVNklGd2lkbUZzZFdWY0lpQjlLVnh1SUNCMllXeDFaU0U2SUhWdWEyNXZkMjQ3WEc1Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJbWx1Y0hWMFhDSXNJSHNnYkdGaVpXdzZJRndpVkdobGJsd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSlBkWFJ3ZFhRZ2QyaGxiaUJqYjI1a2FYUnBiMjRnYVhNZ2RISjFaVndpSUgwcFhHNGdJRUJ2ZFhSd2RYUW9leUJvWVc1a2JHVTZJRndpZEdobGJsd2lJSDBwWEc0Z0lIUm9aVzRoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWtWc2MyVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lUM1YwY0hWMElIZG9aVzRnWTI5dVpHbDBhVzl1SUdseklHWmhiSE5sWENJZ2ZTbGNiaUFnUUc5MWRIQjFkQ2g3SUdoaGJtUnNaVG9nWENKbGJITmxYQ0lnZlNsY2JpQWdaV3h6WlNFNklIVnVhMjV2ZDI0N1hHNTlYRzVjYmk4cUtseHVJQ29nVTNkcGRHTm9JT0tBbENCdGRXeDBhUzFpY21GdVkyZ3VJRkp2ZFhSbGN5QjBhR1VnYVc1d2RYUWdkRzhnYjI1bElHOW1JSFJvWlNCallYTmxJRzkxZEhCMWRDQndiM0owYzF4dUlDb2diM0lnWUdSbFptRjFiSFJnSUdKaGMyVmtJRzl1SUcxaGRHTm9hVzVuSUdOdmJtUnBkR2x2Ym5NdUlFVmhZMmdnWTJGelpTQmtaV1pwYm1WeklHRmNiaUFxSUh0QWJHbHVheUJUZDJsMFkyaERZWE5sUTI5dVpHbDBhVzl1ZlNBb1ozSmhjR2hwWTJGc0lHOXlJR052WkdVZ2JXOWtaU2tnWVc1a0lHRWdaR1ZrYVdOaGRHVmtYRzRnS2lCdmRYUndkWFFnY0c5eWRDNGdRMkZ6WlhNZ1lYSmxJSE4wYjNKbFpDQnBiaUJnYldWMFlXUmhkR0V1YzNkcGRHTm9MbU5oYzJWellDQmhibVFnZEdobFhHNGdLaUJ5Wlc1a1pYSmxjaUJqY21WaGRHVnpJR1I1Ym1GdGFXTWdiM1YwY0hWMElIQnZjblJ6SUdaeWIyMGdkR2hsYlNBb1JFVkRRVVl0TXpJZ3dxY3lNaTR5TGpJcExseHVJQ3BjYmlBcUlGUm9aU0J1YjJSbElHZHliM2R6SUdsdUlHaGxhV2RvZENCaGN5QmpZWE5sY3lCaGNtVWdZV1JrWldRdUlFVmhZMmdnWTJGelpTQm5aWFJ6SUdsMGN5QnZkMjVjYmlBcUlHOTFkSEIxZENCd2IzSjBJRzl1SUhSb1pTQnlhV2RvZENCemFXUmxMQ0JzWVdKbGJHVmtJSGRwZEdnZ2RHaGxJR05oYzJVZ2JHRmlaV3d1WEc0Z0tpOWNia0J1YjJSbEtGd2lZMjl5WlM1bWJHOTNMbk4zYVhSamFGd2lMQ0I3WEc0Z0lHdHBibVE2SUZ3aVkyOXlaUzVtYkc5M0xuTjNhWFJqYUZ3aUxGeHVJQ0JqWVhSbFoyOXllVG9nWENKR2JHOTNJRU52Ym5SeWIyeGNJaXhjYmlBZ1kyOXNiM0k2SUZ3aUkyWTVOek14Tmx3aUxGeHVJQ0JwWTI5dU9pQmNJblJwTFdGeWNtOTNjeTF6YUhWbVpteGxYQ0lzWEc0Z0lIZHBaSFJvT2lBeE1qQXNYRzRnSUdobGFXZG9kRG9nTVRRd0xGeHVJQ0JzWVdKbGJITTZJRnRjSW1ac2IzZGNJaXdnWENKemQybDBZMmhjSWl3Z1hDSnRkV3gwYVMxaWNtRnVZMmhjSWwwc1hHNGdJRzFsZEdGa1lYUmhPaUI3WEc0Z0lDQWdkR2wwYkdVNklGd2lVM2RwZEdOb1hDSXNYRzRnSUNBZ1pHVnpZM0pwY0hScGIyNDZJRndpVFhWc2RHa3RZbkpoYm1Ob0lITjNhWFJqYUM0Z1VtOTFkR1Z6SUhSb1pTQnBibkIxZENCMGJ5QjBhR1VnWm1seWMzUWdiV0YwWTJocGJtY2dZMkZ6WlNCdmRYUndkWFFzSUc5eUlIUm9aU0JrWldaaGRXeDBJRzkxZEhCMWRDNWNJaXhjYmlBZ0lDQnpkMmwwWTJnNklIdGNiaUFnSUNBZ0lHTmhjMlZ6T2lCYlhTeGNiaUFnSUNBZ0lHUmxabUYxYkhSUWIzSjBPaUJjSW1SbFptRjFiSFJjSWl4Y2JpQWdJQ0I5TEZ4dUlDQjlMRnh1ZlNsY2JrQnRiMlJsYkNncFhHNWxlSEJ2Y25RZ1kyeGhjM01nVTNkcGRHTm9SbXh2ZDA1dlpHVWdaWGgwWlc1a2N5QkhjbUZ3YUU1dlpHVWdlMXh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWRHVjRkR0Z5WldGY0lpd2dleUJzWVdKbGJEb2dYQ0pKYm5CMWRDQjJZV3gxWlZ3aUxDQndiR0ZqWldodmJHUmxjam9nWENKV1lXeDFaU0IwYnlCemQybDBZMmdnYjI1Y0lpQjlLVnh1SUNCQWFXNXdkWFFvZXlCb1lXNWtiR1U2SUZ3aWRtRnNkV1ZjSWlCOUtWeHVJQ0IyWVd4MVpTRTZJSFZ1YTI1dmQyNDdYRzVjYmlBZ1FISmxjWFZwY21Wa0tDbGNiaUFnUUhWcFpXeGxiV1Z1ZENoY0ltbHVjSFYwWENJc0lIc2diR0ZpWld3NklGd2lSR1ZtWVhWc2RGd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSkVaV1poZFd4MElHOTFkSEIxZENCM2FHVnVJRzV2SUdOaGMyVWdiV0YwWTJobGMxd2lJSDBwWEc0Z0lFQnZkWFJ3ZFhRb2V5Qm9ZVzVrYkdVNklGd2laR1ZtWVhWc2RGd2lJSDBwWEc0Z0lHUmxabUYxYkhRaE9pQjFibXR1YjNkdU8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGIyMXdkWFJsY3lCMGFHVWdibTlrWlNkeklIQnZjblJ6TENCemFYcGxMQ0JoYm1RZ1pHRjBZU0J3WVhSamFDQm1jbTl0SUhSb1pTQm5hWFpsYmlCemQybDBZMmhjYmlBZ0lDb2diV1YwWVdSaGRHRXVJRVZoWTJnZ1kyRnpaU0JuWlhSeklHbDBjeUJ2ZDI0Z2IzVjBjSFYwSUhCdmNuUWdiMjRnZEdobElISnBaMmgwSUhOcFpHVTdJSFJvWlZ4dUlDQWdLaUJ1YjJSbElHZHliM2R6SUdsdUlHaGxhV2RvZENCaGN5QmpZWE5sY3lCaGNtVWdZV1JrWldRdVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2IzWmxjbkpwWkdVZ1lYQndiSGxOWlhSaFpHRjBZU2h0WlhSaE9pQlRkMmwwWTJoT2IyUmxUV1YwWVdSaGRHRXBPaUJPYjJSbFRXVjBZV1JoZEdGRGFHRnVaMlVnZTF4dUlDQWdJR052Ym5OMElHUmxabWx1YVhScGIyNGdQU0JuY21Gd2FFUmxabWx1YVhScGIyNVBaaWgwYUdseklHRnpJRzVsZG1WeUtUdGNiaUFnSUNCamIyNXpkQ0JpWVhObFVHOXlkSE1nUFNCa1pXWnBibWwwYVc5dUxuQnZjblJ6TG1acGJIUmxjaWhjYmlBZ0lDQWdJQ2h3S1NBOVBpQWhiV1YwWVM1allYTmxjeTV6YjIxbEtDaGpLU0E5UGlCakxtOTFkSEIxZEZCdmNuUWdQVDA5SUhBdWNISnZjR1Z5ZEhrcFhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQmpZWE5sVUc5eWRITTZJRWR5WVhCb1VHOXlkRVJsWm1sdWFYUnBiMjViWFNBOUlHMWxkR0V1WTJGelpYTXViV0Z3S0NoaktTQTlQaUFvZTF4dUlDQWdJQ0FnY0hKdmNHVnlkSGs2SUdNdWIzVjBjSFYwVUc5eWRDeGNiaUFnSUNBZ0lHNWhiV1U2SUdNdWJHRmlaV3dzWEc0Z0lDQWdJQ0JrYVhKbFkzUnBiMjQ2SUZCdmNuUkVhWEpsWTNScGIyNHVUMVZVVUZWVUxGeHVJQ0FnSUNBZ2JHRmlaV3c2SUdNdWJHRmlaV3dzWEc0Z0lDQWdJQ0J5WlhGMWFYSmxaRG9nWm1Gc2MyVXNYRzRnSUNBZ0lDQm9hV1JrWlc0NklHWmhiSE5sTEZ4dUlDQWdJQ0FnY0dGMGFEb2dZeTV2ZFhSd2RYUlFiM0owTEZ4dUlDQWdJSDBwS1R0Y2JpQWdJQ0JqYjI1emRDQmpZWE5sUTI5MWJuUWdQU0J0WlhSaExtTmhjMlZ6TG14bGJtZDBhRHRjYmlBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ2NHOXlkSE02SUZzdUxpNWlZWE5sVUc5eWRITXNJQzR1TG1OaGMyVlFiM0owYzEwc1hHNGdJQ0FnSUNCemFYcGxPaUI3WEc0Z0lDQWdJQ0FnSUhkcFpIUm9PaUJrWldacGJtbDBhVzl1TG5kcFpIUm9JRDgvSURFeU1DeGNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQmpZWE5sUTI5MWJuUWdQaUF3SUQ4Z01UUXdJQ3NnWTJGelpVTnZkVzUwSUNvZ01qUWdPaUJrWldacGJtbDBhVzl1TG1obGFXZG9kQ0EvUHlBeE5EQXNYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdaR0YwWVZCaGRHTm9PaUI3SUhOM2FYUmphRTFsZEdGa1lYUmhPaUJ0WlhSaElIMHNYRzRnSUNBZ2ZUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRkJoY21Gc2JHVnNJT0tBbENCemNHeHBkSE1nWlhobFkzVjBhVzl1SUdsdWRHOGdZMjl1WTNWeWNtVnVkQ0JpY21GdVkyaGxjeTVjYmlBcUwxeHVRRzV2WkdVb1hDSmpiM0psTG1ac2IzY3VjR0Z5WVd4c1pXeGNJaXdnZTF4dUlDQnJhVzVrT2lCY0ltTnZjbVV1Wm14dmR5NXdZWEpoYkd4bGJGd2lMRnh1SUNCallYUmxaMjl5ZVRvZ1hDSkdiRzkzSUVOdmJuUnliMnhjSWl4Y2JpQWdZMjlzYjNJNklGd2lJekEyWWpaa05Gd2lMRnh1SUNCcFkyOXVPaUJjSW5ScExXRnljbTkzY3kxMlpYSjBhV05oYkZ3aUxGeHVJQ0IzYVdSMGFEb2dPVFlzWEc0Z0lHaGxhV2RvZERvZ09UWXNYRzRnSUd4aFltVnNjem9nVzF3aVpteHZkMXdpTENCY0luQmhjbUZzYkdWc1hDSXNJRndpWTI5dVkzVnljbVZ1ZEZ3aVhTeGNiaUFnYldWMFlXUmhkR0U2SUh0Y2JpQWdJQ0IwYVhSc1pUb2dYQ0pRWVhKaGJHeGxiRndpTEZ4dUlDQWdJR1JsYzJOeWFYQjBhVzl1T2lCY0lsTndiR2wwY3lCbGVHVmpkWFJwYjI0Z2FXNTBieUJqYjI1amRYSnlaVzUwSUdKeVlXNWphR1Z6TGlCQmJHd2dZbkpoYm1Ob1pYTWdjblZ1SUdsdUlIQmhjbUZzYkdWc0lHRnVaQ0J2ZFhSd2RYUnpJR0Z5WlNCamIyeHNaV04wWldRdVhDSXNYRzRnSUNBZ1luSmhibU5vUTI5MWJuUTZJRElzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJRWVhKaGJHeGxiRVpzYjNkT2IyUmxJR1Y0ZEdWdVpITWdUVzlrWld3Z2UxeHVJQ0JBY21WeGRXbHlaV1FvS1Z4dUlDQkFkV2xsYkdWdFpXNTBLRndpZEdWNGRHRnlaV0ZjSWl3Z2V5QnNZV0psYkRvZ1hDSkpibkIxZENCMllXeDFaVndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pXWVd4MVpTQjBieUJtWVc0Z2IzVjBYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbFhDSWdmU2xjYmlBZ2RtRnNkV1VoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWtKeVlXNWphR1Z6WENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWtOdmJHeGxZM1JsWkNCaWNtRnVZMmdnYjNWMGNIVjBjMXdpSUgwcFhHNGdJRUJ2ZFhSd2RYUW9leUJvWVc1a2JHVTZJRndpWW5KaGJtTm9aWE5jSWlCOUtWeHVJQ0JpY21GdVkyaGxjeUU2SUhWdWEyNXZkMjViWFR0Y2JuMWNibHh1THlvcVhHNGdLaUJOWlhKblpTRGlnSlFnYm05eWJXRnNhWE5sY3lCaWNtRnVZMmd2Y0dGeVlXeHNaV3dnYjNWMGNIVjBjeUJwYm5SdklHRWdjMmx1WjJ4bElHOTFkSEIxZEM1Y2JpQXFMMXh1UUc1dlpHVW9YQ0pqYjNKbExtWnNiM2N1YldWeVoyVmNJaXdnZTF4dUlDQnJhVzVrT2lCY0ltTnZjbVV1Wm14dmR5NXRaWEpuWlZ3aUxGeHVJQ0JqWVhSbFoyOXllVG9nWENKVmRHbHNhWFI1WENJc1hHNGdJR052Ykc5eU9pQmNJaU13WkRrME9EaGNJaXhjYmlBZ2FXTnZiam9nWENKMGFTMWhjbkp2ZDNNdGJXVnlaMlZjSWl4Y2JpQWdkMmxrZEdnNklEazJMRnh1SUNCb1pXbG5hSFE2SURrMkxGeHVJQ0JzWVdKbGJITTZJRnRjSW1ac2IzZGNJaXdnWENKdFpYSm5aVndpTENCY0ltcHZhVzVjSWwwc1hHNGdJRzFsZEdGa1lYUmhPaUI3WEc0Z0lDQWdkR2wwYkdVNklGd2lUV1Z5WjJWY0lpeGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pOWlhKblpYTWdiWFZzZEdsd2JHVWdZbkpoYm1Ob0lHOTFkSEIxZEhNZ2FXNTBieUJoSUhOcGJtZHNaU0J1YjNKdFlXeHBjMlZrSUc5MWRIQjFkQ0J2WW1wbFkzUXVYQ0lzWEc0Z0lDQWdjM1J5WVhSbFozazZJRndpWTI5dVkyRjBYQ0lzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJOWlhKblpVWnNiM2RPYjJSbElHVjRkR1Z1WkhNZ1RXOWtaV3dnZTF4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lkR1Y0ZEdGeVpXRmNJaXdnZXlCc1lXSmxiRG9nWENKQ2NtRnVZMmdnYjNWMGNIVjBjMXdpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pQZFhSd2RYUnpJSFJ2SUcxbGNtZGxYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbGMxd2lJSDBwWEc0Z0lIWmhiSFZsY3lFNklIVnVhMjV2ZDI1YlhUdGNibHh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWFXNXdkWFJjSWl3Z2V5QnNZV0psYkRvZ1hDSk5aWEpuWldRZ2IzVjBjSFYwWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWsxbGNtZGxaQ0J5WlhOMWJIUmNJaUI5S1Z4dUlDQkFiM1YwY0hWMEtIc2dhR0Z1Wkd4bE9pQmNJbTFsY21kbFpGd2lJSDBwWEc0Z0lHMWxjbWRsWkNFNklIVnVhMjV2ZDI0N1hHNTlYRzVjYmk4cUtseHVJQ29nVFdGd0lPS0FsQ0IwY21GdWMyWnZjbTF6SUhSb1pTQmpkWEp5Wlc1MElHbHVjSFYwSUdsdWRHOGdZU0J1WlhjZ2IzVjBjSFYwSUc5aWFtVmpkQzVjYmlBcUwxeHVRRzV2WkdVb1hDSmpiM0psTG1ac2IzY3ViV0Z3WENJc0lIdGNiaUFnYTJsdVpEb2dYQ0pqYjNKbExtWnNiM2N1YldGd1hDSXNYRzRnSUdOaGRHVm5iM0o1T2lCY0lsVjBhV3hwZEhsY0lpeGNiaUFnWTI5c2IzSTZJRndpSXpnMFkyTXhObHdpTEZ4dUlDQnBZMjl1T2lCY0luUnBMV0Z5Y205M2N5MXlhV2RvZEMxc1pXWjBYQ0lzWEc0Z0lIZHBaSFJvT2lBNU5peGNiaUFnYUdWcFoyaDBPaUE1Tml4Y2JpQWdiR0ZpWld4ek9pQmJYQ0ptYkc5M1hDSXNJRndpYldGd1hDSXNJRndpZEhKaGJuTm1iM0p0WENKZExGeHVJQ0J0WlhSaFpHRjBZVG9nZTF4dUlDQWdJSFJwZEd4bE9pQmNJazFoY0Z3aUxGeHVJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmNJbFJ5WVc1elptOXliWE1nZEdobElHTjFjbkpsYm5RZ2FXNXdkWFFnYVc1MGJ5QmhJRzVsZHlCdmRYUndkWFFnYjJKcVpXTjBJSFZ6YVc1bklIUm9aU0JqYjI1bWFXZDFjbVZrSUcxaGNIQmxjaTVjSWl4Y2JpQWdJQ0J0WVhCd1pYSTZJSHQ5TEZ4dUlDQjlMRnh1ZlNsY2JrQnRiMlJsYkNncFhHNWxlSEJ2Y25RZ1kyeGhjM01nVFdGd1JteHZkMDV2WkdVZ1pYaDBaVzVrY3lCTmIyUmxiQ0I3WEc0Z0lFQnlaWEYxYVhKbFpDZ3BYRzRnSUVCMWFXVnNaVzFsYm5Rb1hDSjBaWGgwWVhKbFlWd2lMQ0I3SUd4aFltVnNPaUJjSWtsdWNIVjBJSFpoYkhWbFhDSXNJSEJzWVdObGFHOXNaR1Z5T2lCY0lsWmhiSFZsSUhSdklIUnlZVzV6Wm05eWJWd2lJSDBwWEc0Z0lFQnBibkIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlZ3aUlIMHBYRzRnSUhaaGJIVmxJVG9nZFc1cmJtOTNianRjYmx4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lhVzV3ZFhSY0lpd2dleUJzWVdKbGJEb2dYQ0pVY21GdWMyWnZjbTFsWkNCdmRYUndkWFJjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVFdGd2NHVmtJSEpsYzNWc2RGd2lJSDBwWEc0Z0lFQnZkWFJ3ZFhRb2V5Qm9ZVzVrYkdVNklGd2ljbVZ6ZFd4MFhDSWdmU2xjYmlBZ2NtVnpkV3gwSVRvZ2RXNXJibTkzYmp0Y2JuMWNibHh1THlvcVhHNGdLaUJFWld4aGVTRGlnSlFnY0dGMWMyVnpJR1Y0WldOMWRHbHZiaUJtYjNJZ1lTQmpiMjVtYVdkMWNtVmtJR1IxY21GMGFXOXVMbHh1SUNvdlhHNUFibTlrWlNoY0ltTnZjbVV1Wm14dmR5NWtaV3hoZVZ3aUxDQjdYRzRnSUd0cGJtUTZJRndpWTI5eVpTNW1iRzkzTG1SbGJHRjVYQ0lzWEc0Z0lHTmhkR1ZuYjNKNU9pQmNJbFYwYVd4cGRIbGNJaXhjYmlBZ1kyOXNiM0k2SUZ3aUkyRXpZVE5oTTF3aUxGeHVJQ0JwWTI5dU9pQmNJblJwTFdOc2IyTnJMV2h2ZFhJdE5Gd2lMRnh1SUNCM2FXUjBhRG9nT1RZc1hHNGdJR2hsYVdkb2REb2dPVFlzWEc0Z0lHeGhZbVZzY3pvZ1cxd2labXh2ZDF3aUxDQmNJbVJsYkdGNVhDSXNJRndpZDJGcGRGd2lYU3hjYmlBZ2JXVjBZV1JoZEdFNklIdGNiaUFnSUNCMGFYUnNaVG9nWENKRVpXeGhlVndpTEZ4dUlDQWdJR1JsYzJOeWFYQjBhVzl1T2lCY0lsQmhkWE5sY3lCbGVHVmpkWFJwYjI0Z1ptOXlJSFJvWlNCamIyNW1hV2QxY21Wa0lHUjFjbUYwYVc5dUlDaHBiaUJ0YVd4c2FYTmxZMjl1WkhNcExDQjBhR1Z1SUdadmNuZGhjbVJ6SUhSb1pTQnBibkIxZENCMWJtTm9ZVzVuWldRdVhDSXNYRzRnSUNBZ1pIVnlZWFJwYjI1TmN6b2dNVEF3TUN4Y2JpQWdmU3hjYm4wcFhHNUFiVzlrWld3b0tWeHVaWGh3YjNKMElHTnNZWE56SUVSbGJHRjVSbXh2ZDA1dlpHVWdaWGgwWlc1a2N5Qk5iMlJsYkNCN1hHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0owWlhoMFlYSmxZVndpTENCN0lHeGhZbVZzT2lCY0lrbHVjSFYwSUhaaGJIVmxYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJbFpoYkhWbElIUnZJR1p2Y25kaGNtUWdZV1owWlhJZ1pHVnNZWGxjSWlCOUtWeHVJQ0JBYVc1d2RYUW9leUJvWVc1a2JHVTZJRndpZG1Gc2RXVmNJaUI5S1Z4dUlDQjJZV3gxWlNFNklIVnVhMjV2ZDI0N1hHNWNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW1sdWNIVjBYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVQzVjBjSFYwSUhaaGJIVmxYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJa1p2Y25kaGNtUmxaQ0IyWVd4MVpWd2lJSDBwWEc0Z0lFQnZkWFJ3ZFhRb2V5Qm9ZVzVrYkdVNklGd2lkbUZzZFdWY0lpQjlLVnh1SUNCMllXeDFaVTkxZENFNklIVnVhMjV2ZDI0N1hHNTlYRzVjYmk4cUtseHVJQ29nUlhKeWIzSWdZbTkxYm1SaGNua2c0b0NVSUhSeWVTOWpZWFJqYUM5bWFXNWhiR3g1SUhkdmNtdG1iRzkzSUdKbGFHRjJhVzkxY2k1Y2JpQXFMMXh1UUc1dlpHVW9YQ0pqYjNKbExtWnNiM2N1WlhKeWIzSkNiM1Z1WkdGeWVWd2lMQ0I3WEc0Z0lHdHBibVE2SUZ3aVkyOXlaUzVtYkc5M0xtVnljbTl5UW05MWJtUmhjbmxjSWl4Y2JpQWdZMkYwWldkdmNuazZJRndpUm14dmR5QkRiMjUwY205c1hDSXNYRzRnSUdOdmJHOXlPaUJjSWlObFpqUTBORFJjSWl4Y2JpQWdhV052YmpvZ1hDSjBhUzF6YUdsbGJHUXRZMmhsWTJ0Y0lpeGNiaUFnZDJsa2RHZzZJRGsyTEZ4dUlDQm9aV2xuYUhRNklEazJMRnh1SUNCc1lXSmxiSE02SUZ0Y0ltWnNiM2RjSWl3Z1hDSmxjbkp2Y2x3aUxDQmNJblJ5ZVMxallYUmphRndpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSkZjbkp2Y2lCaWIzVnVaR0Z5ZVZ3aUxGeHVJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmNJbGR5WVhCeklIUm9aU0JwYm5CMWRDQnBiaUJoSUhSeWVTOWpZWFJqYUM5bWFXNWhiR3g1TGlCRmJXbDBjeUIwYUdVZ2NtVnpkV3gwSUc5dUlITjFZMk5sYzNNc0lHOXlJSFJvWlNCbGNuSnZjaUJ2YmlCbVlXbHNkWEpsTGx3aUxGeHVJQ0FnSUdacGJtRnNiSGs2SUdaaGJITmxMRnh1SUNCOUxGeHVmU2xjYmtCdGIyUmxiQ2dwWEc1bGVIQnZjblFnWTJ4aGMzTWdSWEp5YjNKQ2IzVnVaR0Z5ZVVac2IzZE9iMlJsSUdWNGRHVnVaSE1nVFc5a1pXd2dlMXh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWRHVjRkR0Z5WldGY0lpd2dleUJzWVdKbGJEb2dYQ0pKYm5CMWRDQjJZV3gxWlZ3aUxDQndiR0ZqWldodmJHUmxjam9nWENKV1lXeDFaU0IwYnlCbmRXRnlaRndpSUgwcFhHNGdJRUJwYm5CMWRDaDdJR2hoYm1Sc1pUb2dYQ0oyWVd4MVpWd2lJSDBwWEc0Z0lIWmhiSFZsSVRvZ2RXNXJibTkzYmp0Y2JseHVJQ0JBY21WeGRXbHlaV1FvS1Z4dUlDQkFkV2xsYkdWdFpXNTBLRndpYVc1d2RYUmNJaXdnZXlCc1lXSmxiRG9nWENKU1pYTjFiSFJjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVDNWMGNIVjBJRzl1SUhOMVkyTmxjM05jSWlCOUtWeHVJQ0JBYjNWMGNIVjBLSHNnYUdGdVpHeGxPaUJjSW5KbGMzVnNkRndpSUgwcFhHNGdJSEpsYzNWc2RDRTZJSFZ1YTI1dmQyNDdYRzVjYmlBZ1FISmxjWFZwY21Wa0tDbGNiaUFnUUhWcFpXeGxiV1Z1ZENoY0ltbHVjSFYwWENJc0lIc2diR0ZpWld3NklGd2lSWEp5YjNKY0lpd2djR3hoWTJWb2IyeGtaWEk2SUZ3aVQzVjBjSFYwSUc5dUlHWmhhV3gxY21WY0lpQjlLVnh1SUNCQWIzVjBjSFYwS0hzZ2FHRnVaR3hsT2lCY0ltVnljbTl5WENJZ2ZTbGNiaUFnWlhKeWIzSWhPaUIxYm10dWIzZHVPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFaDFiV0Z1SUdGd2NISnZkbUZzSU9LQWxDQnpkWE53Wlc1a2N5QmxlR1ZqZFhScGIyNGdkVzUwYVd3Z1lTQm9kVzFoYmlCaGNIQnliM1psY3lCdmNpQnlaV3BsWTNSekxseHVJQ292WEc1QWJtOWtaU2hjSW1OdmNtVXVabXh2ZHk1b2RXMWhia0Z3Y0hKdmRtRnNYQ0lzSUh0Y2JpQWdhMmx1WkRvZ1hDSmpiM0psTG1ac2IzY3VhSFZ0WVc1QmNIQnliM1poYkZ3aUxGeHVJQ0JqWVhSbFoyOXllVG9nWENKR2JHOTNJRU52Ym5SeWIyeGNJaXhjYmlBZ1kyOXNiM0k2SUZ3aUkyUTVORFpsWmx3aUxGeHVJQ0JwWTI5dU9pQmNJblJwTFhWelpYSXRZMmhsWTJ0Y0lpeGNiaUFnZDJsa2RHZzZJRGsyTEZ4dUlDQm9aV2xuYUhRNklEazJMRnh1SUNCc1lXSmxiSE02SUZ0Y0ltWnNiM2RjSWl3Z1hDSmhjSEJ5YjNaaGJGd2lMQ0JjSW5OMWMzQmxibVJjSWwwc1hHNGdJRzFsZEdGa1lYUmhPaUI3WEc0Z0lDQWdkR2wwYkdVNklGd2lTSFZ0WVc0Z1lYQndjbTkyWVd4Y0lpeGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pUZFhOd1pXNWtjeUJsZUdWamRYUnBiMjRnZFc1MGFXd2dZU0JvZFcxaGJpQmhjSEJ5YjNabGN5QnZjaUJ5WldwbFkzUnpMaUJGYldsMGN5QjBhR1VnWVhCd2NtOTJaV1FnZG1Gc2RXVWdiM0lnWVNCeVpXcGxZM1JwYjI0dVhDSXNYRzRnSUNBZ1lYQndjbTkyWlhKek9pQmJYU3hjYmlBZ0lDQjBhVzFsYjNWMFRYTTZJRGcyTkRBd01EQXdMRnh1SUNCOUxGeHVmU2xjYmtCdGIyUmxiQ2dwWEc1bGVIQnZjblFnWTJ4aGMzTWdTSFZ0WVc1QmNIQnliM1poYkVac2IzZE9iMlJsSUdWNGRHVnVaSE1nVFc5a1pXd2dlMXh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWRHVjRkR0Z5WldGY0lpd2dleUJzWVdKbGJEb2dYQ0pKYm5CMWRDQjJZV3gxWlZ3aUxDQndiR0ZqWldodmJHUmxjam9nWENKV1lXeDFaU0J3Wlc1a2FXNW5JR0Z3Y0hKdmRtRnNYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbFhDSWdmU2xjYmlBZ2RtRnNkV1VoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWtGd2NISnZkbVZrWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWs5MWRIQjFkQ0IzYUdWdUlHRndjSEp2ZG1Wa1hDSWdmU2xjYmlBZ1FHOTFkSEIxZENoN0lHaGhibVJzWlRvZ1hDSmhjSEJ5YjNabFpGd2lJSDBwWEc0Z0lHRndjSEp2ZG1Wa0lUb2dkVzVyYm05M2JqdGNibHh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWFXNXdkWFJjSWl3Z2V5QnNZV0psYkRvZ1hDSlNaV3BsWTNSbFpGd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSlBkWFJ3ZFhRZ2QyaGxiaUJ5WldwbFkzUmxaRndpSUgwcFhHNGdJRUJ2ZFhSd2RYUW9leUJvWVc1a2JHVTZJRndpY21WcVpXTjBaV1JjSWlCOUtWeHVJQ0J5WldwbFkzUmxaQ0U2SUhWdWEyNXZkMjQ3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdUlPS0FsQ0JrWldacGJtVnpJR0Z1WkNCdWIzSnRZV3hwYzJWeklIUm9aU0JtYVc1aGJDQjNiM0pyWm14dmR5QnZkWFJ3ZFhRdVhHNGdLaTljYmtCdWIyUmxLRndpWTI5eVpTNW1iRzkzTG5KbGRIVnlibHdpTENCN1hHNGdJR3RwYm1RNklGd2lZMjl5WlM1bWJHOTNMbkpsZEhWeWJsd2lMRnh1SUNCallYUmxaMjl5ZVRvZ1hDSlZkR2xzYVhSNVhDSXNYRzRnSUdOdmJHOXlPaUJjSWlNeU1tTTFOV1ZjSWl4Y2JpQWdhV052YmpvZ1hDSjBhUzFoY25KdmR5MWlZV05yTFhWd1hDSXNYRzRnSUhkcFpIUm9PaUE1Tml4Y2JpQWdhR1ZwWjJoME9pQTVOaXhjYmlBZ2JHRmlaV3h6T2lCYlhDSm1iRzkzWENJc0lGd2ljbVYwZFhKdVhDSXNJRndpYjNWMGNIVjBYQ0pkTEZ4dUlDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lIUnBkR3hsT2lCY0lsSmxkSFZ5Ymx3aUxGeHVJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmNJazV2Y20xaGJHbHpaWE1nZEdobElHbHVjSFYwSUdsdWRHOGdkR2hsSUdacGJtRnNJSGR2Y210bWJHOTNJRzkxZEhCMWRDQnZZbXBsWTNRdVhDSXNYRzRnSUNBZ2IzVjBjSFYwVTJOb1pXMWhPaUI3ZlN4Y2JpQWdmU3hjYm4wcFhHNUFiVzlrWld3b0tWeHVaWGh3YjNKMElHTnNZWE56SUZKbGRIVnlia1pzYjNkT2IyUmxJR1Y0ZEdWdVpITWdUVzlrWld3Z2UxeHVJQ0JBY21WeGRXbHlaV1FvS1Z4dUlDQkFkV2xsYkdWdFpXNTBLRndpZEdWNGRHRnlaV0ZjSWl3Z2V5QnNZV0psYkRvZ1hDSkpibkIxZENCMllXeDFaVndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pXWVd4MVpTQjBieUJ1YjNKdFlXeHBjMlZjSWlCOUtWeHVJQ0JBYVc1d2RYUW9leUJvWVc1a2JHVTZJRndpZG1Gc2RXVmNJaUI5S1Z4dUlDQjJZV3gxWlNFNklIVnVhMjV2ZDI0N1hHNWNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW1sdWNIVjBYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVVtVjBkWEp1WldRZ2IzVjBjSFYwWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWs1dmNtMWhiR2x6WldRZ2IzVjBjSFYwWENJZ2ZTbGNiaUFnUUc5MWRIQjFkQ2g3SUdoaGJtUnNaVG9nWENKeVpYTjFiSFJjSWlCOUtWeHVJQ0J5WlhOMWJIUWhPaUIxYm10dWIzZHVPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnZaR1VnNG9DVUlITmhibVJpYjNobFpDQktVeTlVVXlCamIyUmxJR1Y0WldOMWRHbHZiaUFvUVV4R1VrVkVMVFVnd3FjM0tTNWNiaUFxWEc0Z0tpQlVhR1VnWlc1bmFXNWxJR1J2WlhNZ2JtOTBJR2x0Y0d4bGJXVnVkQ0IwYUdVZ2MyRnVaR0p2ZUNCa2FYSmxZM1JzZVNBb3dxY3lNaTQwS1M0Z1FTQm1kWFIxY21WY2JpQXFJR1Y0WldOMWRHOXlJRzFoZVNCM2NtRndJSFJvWlNCZ1EyOWtaVk5oYm1SaWIzaGdJR052Ym5SeVlXTjBJQ2hCVEVaU1JVUXROU0RDcHpjdU1UY3BJR0Z6SUdGY2JpQXFJSEJzZFdkbllXSnNaU0JsZUdWamRYUnZjaTRnVkdobElIQnNZV05sYUc5c1pHVnlJSE41Ym5SaGVDQW9ZSHQ3SUNScGJuQjFkQ0I5ZldBc0lHQjdleUFrYVhSbGJTQjlmV0FzWEc0Z0tpQmdlM3NnSkdsdVpHVjRJSDE5WUN3Z1lIdDdJQ1IyWVhKeklIMTlZQ3dnWUh0N0lDUnViMlJsVzF3aVRtRnRaVndpWFM1dmRYUndkWFFnZlgxZ0tTQnBjeUJOWVhOMGNtRXRYRzRnS2lCaFoyNXZjM1JwWXlCaGJtUWdiR2wyWlhNZ2FXNGdkR2hsSUdSdmQyNXpkSEpsWVcwZ2NISnZhbVZqZENkeklHQnRiMlIxYkdWekwyTnZjbVZnSUNoQlRFWlNSVVF0TmlrdVhHNGdLaTljYmtCdWIyUmxLRndpWTI5eVpTNW1iRzkzTG1OdlpHVmNJaXdnZTF4dUlDQnJhVzVrT2lCY0ltTnZjbVV1Wm14dmR5NWpiMlJsWENJc1hHNGdJR05oZEdWbmIzSjVPaUJjSWxWMGFXeHBkSGxjSWl4Y2JpQWdZMjlzYjNJNklGd2lJemRqTTJGbFpGd2lMRnh1SUNCcFkyOXVPaUJjSW5ScExXTnZaR1ZjSWl4Y2JpQWdkMmxrZEdnNklEazJMRnh1SUNCb1pXbG5hSFE2SURrMkxGeHVJQ0JzWVdKbGJITTZJRnRjSW1ac2IzZGNJaXdnWENKamIyUmxYQ0lzSUZ3aWMyRnVaR0p2ZUZ3aUxDQmNJblJ5WVc1elptOXliVndpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSkRiMlJsWENJc1hHNGdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lVblZ1Y3lCMWMyVnlMV0YxZEdodmNtVmtJRXBUTDFSVElHbHVJR0VnY21WemRISnBZM1JsWkNCV1RTQnpZVzVrWW05NExpQlRkWEJ3YjNKMGN5QndiR0ZqWldodmJHUmxjaUJ6ZVc1MFlYZ2dabTl5SUhkdmNtdG1iRzkzSUdSaGRHRWdjbVZtWlhKbGJtTmxjeTVjSWl4Y2JpQWdJQ0JqYjJSbE9pQmNJbHdpTEZ4dUlDQWdJR3hoYm1kMVlXZGxPaUJjSW1waGRtRnpZM0pwY0hSY0lpeGNiaUFnZlN4Y2JuMHBYRzVBYlc5a1pXd29LVnh1Wlhod2IzSjBJR05zWVhOeklFTnZaR1ZHYkc5M1RtOWtaU0JsZUhSbGJtUnpJRTF2WkdWc0lIdGNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW5SbGVIUmhjbVZoWENJc0lIc2diR0ZpWld3NklGd2lTVzV3ZFhSY0lpd2djR3hoWTJWb2IyeGtaWEk2SUZ3aVNXNXdkWFFnYjJKcVpXTjBJQ2hoWTJObGMzTnBZbXhsSUdGeklDUnBibkIxZENsY0lpQjlLVnh1SUNCQWFXNXdkWFFvZXlCb1lXNWtiR1U2SUZ3aWFXNXdkWFJjSWlCOUtWeHVJQ0JwYm5CMWRDRTZJSFZ1YTI1dmQyNDdYRzVjYmlBZ1FISmxjWFZwY21Wa0tDbGNiaUFnUUhWcFpXeGxiV1Z1ZENoY0ltbHVjSFYwWENJc0lIc2diR0ZpWld3NklGd2lVbVZ6ZFd4MFhDSXNJSEJzWVdObGFHOXNaR1Z5T2lCY0lrTnZaR1VnWlhobFkzVjBhVzl1SUhKbGMzVnNkRndpSUgwcFhHNGdJRUJ2ZFhSd2RYUW9leUJvWVc1a2JHVTZJRndpY21WemRXeDBYQ0lnZlNsY2JpQWdjbVZ6ZFd4MElUb2dkVzVyYm05M2JqdGNibjFjYmx4dUx5b3FYRzRnS2lCQmJHd2dZblZwYkhRdGFXNGdabXh2ZHkxamIyNTBjbTlzSUc1dlpHVWdZMjl1YzNSeWRXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1IxSkJVRWhmUmt4UFYxOURUMDVVVWs5TVgwNVBSRVZUSUQwZ1cxeHVJQ0JKWmtac2IzZE9iMlJsTEZ4dUlDQlRkMmwwWTJoR2JHOTNUbTlrWlN4Y2JpQWdVR0Z5WVd4c1pXeEdiRzkzVG05a1pTeGNiaUFnVFdWeVoyVkdiRzkzVG05a1pTeGNiaUFnVFdGd1JteHZkMDV2WkdVc1hHNGdJRVJsYkdGNVJteHZkMDV2WkdVc1hHNGdJRVZ5Y205eVFtOTFibVJoY25sR2JHOTNUbTlrWlN4Y2JpQWdTSFZ0WVc1QmNIQnliM1poYkVac2IzZE9iMlJsTEZ4dUlDQlNaWFIxY201R2JHOTNUbTlrWlN4Y2JpQWdRMjlrWlVac2IzZE9iMlJsTEZ4dVhTQmhjeUJqYjI1emREdGNiaUpkZlE9PSJdfQ==
|