@angular/compiler-cli 12.1.0 → 12.1.4
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/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
- package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
- package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
- package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
- package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
- package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
- package/ngcc/src/host/commonjs_host.js +1 -1
- package/ngcc/src/host/esm2015_host.js +1 -1
- package/ngcc/src/host/esm5_host.js +1 -1
- package/ngcc/src/host/umd_host.js +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/packages/entry_point_manifest.js +1 -1
- package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
- package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
- package/package.json +2 -2
- package/src/ngtsc/annotations/src/component.js +1 -1
- package/src/ngtsc/annotations/src/directive.js +1 -1
- package/src/ngtsc/annotations/src/ng_module.js +1 -1
- package/src/ngtsc/annotations/src/pipe.js +1 -1
- package/src/ngtsc/core/src/compiler.js +1 -1
- package/src/ngtsc/cycles/src/analyzer.d.ts +7 -0
- package/src/ngtsc/cycles/src/analyzer.js +89 -4
- package/src/ngtsc/cycles/src/imports.d.ts +1 -6
- package/src/ngtsc/cycles/src/imports.js +5 -23
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
- package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
- package/src/ngtsc/incremental/src/incremental.js +30 -4
- package/src/ngtsc/indexer/src/template.js +1 -1
- package/src/ngtsc/metadata/src/dts.js +4 -5
- package/src/ngtsc/metadata/src/util.d.ts +2 -2
- package/src/ngtsc/metadata/src/util.js +9 -6
- package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
- package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
- package/src/ngtsc/partial_evaluator/src/interpreter.js +53 -5
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
- package/src/ngtsc/program_driver/src/api.d.ts +20 -1
- package/src/ngtsc/program_driver/src/api.js +3 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
- package/src/ngtsc/reflection/src/typescript.js +4 -1
- package/src/ngtsc/transform/src/compilation.d.ts +5 -0
- package/src/ngtsc/transform/src/compilation.js +95 -72
- package/src/ngtsc/transform/src/transform.js +1 -1
- package/src/ngtsc/typecheck/src/context.d.ts +2 -1
- package/src/ngtsc/typecheck/src/context.js +11 -3
- package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
- package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
- package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
- package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
- package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.js +1 -8
- package/src/version.js +1 -1
- package/compiler-cli.externs.js +0 -0
- package/index.mjs +0 -20
- package/linker/babel/babel.externs.js +0 -0
- package/linker/babel/index.mjs +0 -11
- package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
- package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
- package/linker/babel/src/babel_declaration_scope.mjs +0 -52
- package/linker/babel/src/babel_plugin.mjs +0 -23
- package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
- package/linker/babel/src/linker_plugin_options.mjs +0 -2
- package/linker/index.mjs +0 -7
- package/linker/linker.externs.js +0 -0
- package/linker/src/ast/ast_host.mjs +0 -9
- package/linker/src/ast/ast_value.mjs +0 -256
- package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
- package/linker/src/ast/utils.mjs +0 -17
- package/linker/src/fatal_linker_error.mjs +0 -30
- package/linker/src/file_linker/declaration_scope.mjs +0 -9
- package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
- package/linker/src/file_linker/file_linker.mjs +0 -70
- package/linker/src/file_linker/get_source_file.mjs +0 -28
- package/linker/src/file_linker/linker_environment.mjs +0 -23
- package/linker/src/file_linker/linker_options.mjs +0 -16
- package/linker/src/file_linker/needs_linking.mjs +0 -27
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
- package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
- package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
- package/linker/src/file_linker/translator.mjs +0 -23
- package/linker/src/linker_import_generator.mjs +0 -28
- package/ngcc/index.mjs +0 -16
- package/ngcc/main-ivy-ngcc.mjs +0 -12
- package/ngcc/main-ngcc.mjs +0 -32
- package/ngcc/ngcc.externs.js +0 -0
- package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
- package/ngcc/src/analysis/migration_host.mjs +0 -80
- package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
- package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
- package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
- package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
- package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
- package/ngcc/src/analysis/types.mjs +0 -2
- package/ngcc/src/analysis/util.mjs +0 -19
- package/ngcc/src/command_line_options.mjs +0 -142
- package/ngcc/src/constants.mjs +0 -10
- package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
- package/ngcc/src/dependencies/dependency_host.mjs +0 -102
- package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
- package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
- package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
- package/ngcc/src/dependencies/module_resolver.mjs +0 -233
- package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
- package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
- package/ngcc/src/entry_point_finder/interface.mjs +0 -2
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
- package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
- package/ngcc/src/entry_point_finder/utils.mjs +0 -176
- package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
- package/ngcc/src/execution/api.mjs +0 -2
- package/ngcc/src/execution/cluster/api.mjs +0 -9
- package/ngcc/src/execution/cluster/executor.mjs +0 -27
- package/ngcc/src/execution/cluster/master.mjs +0 -261
- package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
- package/ngcc/src/execution/cluster/utils.mjs +0 -59
- package/ngcc/src/execution/cluster/worker.mjs +0 -81
- package/ngcc/src/execution/create_compile_function.mjs +0 -62
- package/ngcc/src/execution/single_process_executor.mjs +0 -57
- package/ngcc/src/execution/tasks/api.mjs +0 -22
- package/ngcc/src/execution/tasks/completion.mjs +0 -61
- package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
- package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
- package/ngcc/src/execution/tasks/utils.mjs +0 -114
- package/ngcc/src/host/commonjs_host.mjs +0 -220
- package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
- package/ngcc/src/host/delegating_host.mjs +0 -140
- package/ngcc/src/host/esm2015_host.mjs +0 -2293
- package/ngcc/src/host/esm5_host.mjs +0 -721
- package/ngcc/src/host/ngcc_host.mjs +0 -15
- package/ngcc/src/host/umd_host.mjs +0 -486
- package/ngcc/src/host/utils.mjs +0 -12
- package/ngcc/src/locking/async_locker.mjs +0 -76
- package/ngcc/src/locking/lock_file.mjs +0 -4
- package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
- package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
- package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
- package/ngcc/src/locking/sync_locker.mjs +0 -52
- package/ngcc/src/main.mjs +0 -134
- package/ngcc/src/migrations/migration.mjs +0 -2
- package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
- package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
- package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
- package/ngcc/src/migrations/utils.mjs +0 -117
- package/ngcc/src/ngcc_options.mjs +0 -119
- package/ngcc/src/packages/build_marker.mjs +0 -84
- package/ngcc/src/packages/bundle_program.mjs +0 -52
- package/ngcc/src/packages/configuration.mjs +0 -255
- package/ngcc/src/packages/entry_point.mjs +0 -239
- package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
- package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
- package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
- package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
- package/ngcc/src/packages/source_file_cache.mjs +0 -187
- package/ngcc/src/packages/transformer.mjs +0 -140
- package/ngcc/src/path_mappings.mjs +0 -13
- package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
- package/ngcc/src/rendering/dts_renderer.mjs +0 -139
- package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
- package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
- package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
- package/ngcc/src/rendering/renderer.mjs +0 -170
- package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
- package/ngcc/src/rendering/source_maps.mjs +0 -54
- package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
- package/ngcc/src/rendering/utils.mjs +0 -20
- package/ngcc/src/utils.mjs +0 -144
- package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
- package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
- package/ngcc/src/writing/cleaning/utils.mjs +0 -16
- package/ngcc/src/writing/file_writer.mjs +0 -2
- package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
- package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
- package/ngcc/src/writing/package_json_updater.mjs +0 -144
- package/src/diagnostics/translate_diagnostics.mjs +0 -47
- package/src/diagnostics/typescript_version.mjs +0 -79
- package/src/extract_i18n.mjs +0 -46
- package/src/language_services.mjs +0 -18
- package/src/main.mjs +0 -185
- package/src/metadata/bundle_index_host.mjs +0 -107
- package/src/metadata/bundler.mjs +0 -556
- package/src/metadata/collector.mjs +0 -701
- package/src/metadata/evaluator.mjs +0 -643
- package/src/metadata/index.mjs +0 -11
- package/src/metadata/index_writer.mjs +0 -44
- package/src/metadata/schema.mjs +0 -102
- package/src/metadata/symbols.mjs +0 -117
- package/src/ngtsc/annotations/annotations.externs.js +0 -0
- package/src/ngtsc/annotations/index.mjs +0 -15
- package/src/ngtsc/annotations/src/api.mjs +0 -9
- package/src/ngtsc/annotations/src/component.mjs +0 -1068
- package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
- package/src/ngtsc/annotations/src/directive.mjs +0 -692
- package/src/ngtsc/annotations/src/factory.mjs +0 -17
- package/src/ngtsc/annotations/src/injectable.mjs +0 -260
- package/src/ngtsc/annotations/src/metadata.mjs +0 -145
- package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
- package/src/ngtsc/annotations/src/pipe.mjs +0 -151
- package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
- package/src/ngtsc/annotations/src/util.mjs +0 -495
- package/src/ngtsc/core/api/index.mjs +0 -12
- package/src/ngtsc/core/api/src/adapter.mjs +0 -9
- package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
- package/src/ngtsc/core/api/src/options.mjs +0 -9
- package/src/ngtsc/core/api/src/public_options.mjs +0 -9
- package/src/ngtsc/core/api.externs.js +0 -0
- package/src/ngtsc/core/core.externs.js +0 -0
- package/src/ngtsc/core/index.mjs +0 -10
- package/src/ngtsc/core/src/compiler.mjs +0 -917
- package/src/ngtsc/core/src/config.mjs +0 -15
- package/src/ngtsc/core/src/host.mjs +0 -229
- package/src/ngtsc/cycles/cycles.externs.js +0 -0
- package/src/ngtsc/cycles/index.mjs +0 -10
- package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
- package/src/ngtsc/cycles/src/imports.mjs +0 -152
- package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/diagnostics/index.mjs +0 -11
- package/src/ngtsc/diagnostics/src/error.mjs +0 -51
- package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
- package/src/ngtsc/diagnostics/src/util.mjs +0 -21
- package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
- package/src/ngtsc/entry_point/index.mjs +0 -12
- package/src/ngtsc/entry_point/src/generator.mjs +0 -35
- package/src/ngtsc/entry_point/src/logic.mjs +0 -35
- package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
- package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
- package/src/ngtsc/file_system/file_system.externs.js +0 -0
- package/src/ngtsc/file_system/index.mjs +0 -13
- package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
- package/src/ngtsc/file_system/src/helpers.mjs +0 -99
- package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
- package/src/ngtsc/file_system/src/logical.mjs +0 -84
- package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
- package/src/ngtsc/file_system/src/types.mjs +0 -9
- package/src/ngtsc/file_system/src/util.mjs +0 -22
- package/src/ngtsc/file_system/testing/index.mjs +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
- package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
- package/src/ngtsc/imports/imports.externs.js +0 -0
- package/src/ngtsc/imports/index.mjs +0 -14
- package/src/ngtsc/imports/src/alias.mjs +0 -137
- package/src/ngtsc/imports/src/core.mjs +0 -78
- package/src/ngtsc/imports/src/default.mjs +0 -135
- package/src/ngtsc/imports/src/emitter.mjs +0 -266
- package/src/ngtsc/imports/src/find_export.mjs +0 -56
- package/src/ngtsc/imports/src/reexport.mjs +0 -9
- package/src/ngtsc/imports/src/references.mjs +0 -137
- package/src/ngtsc/imports/src/resolver.mjs +0 -24
- package/src/ngtsc/incremental/api.externs.js +0 -0
- package/src/ngtsc/incremental/api.mjs +0 -9
- package/src/ngtsc/incremental/incremental.externs.js +0 -0
- package/src/ngtsc/incremental/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
- package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
- package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
- package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
- package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
- package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
- package/src/ngtsc/incremental/src/incremental.mjs +0 -271
- package/src/ngtsc/incremental/src/noop.mjs +0 -13
- package/src/ngtsc/incremental/src/state.mjs +0 -17
- package/src/ngtsc/incremental/src/strategy.mjs +0 -76
- package/src/ngtsc/indexer/index.mjs +0 -11
- package/src/ngtsc/indexer/indexer.externs.js +0 -0
- package/src/ngtsc/indexer/src/api.mjs +0 -30
- package/src/ngtsc/indexer/src/context.mjs +0 -25
- package/src/ngtsc/indexer/src/template.mjs +0 -303
- package/src/ngtsc/indexer/src/transform.mjs +0 -51
- package/src/ngtsc/logging/index.mjs +0 -10
- package/src/ngtsc/logging/logging.externs.js +0 -0
- package/src/ngtsc/logging/src/console_logger.mjs +0 -43
- package/src/ngtsc/logging/src/logger.mjs +0 -15
- package/src/ngtsc/logging/testing/index.mjs +0 -9
- package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
- package/src/ngtsc/logging/testing/testing.externs.js +0 -0
- package/src/ngtsc/metadata/index.mjs +0 -15
- package/src/ngtsc/metadata/metadata.externs.js +0 -0
- package/src/ngtsc/metadata/src/api.mjs +0 -13
- package/src/ngtsc/metadata/src/dts.mjs +0 -143
- package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
- package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
- package/src/ngtsc/metadata/src/registry.mjs +0 -80
- package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
- package/src/ngtsc/metadata/src/util.mjs +0 -200
- package/src/ngtsc/partial_evaluator/index.mjs +0 -12
- package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
- package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
- package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
- package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
- package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
- package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
- package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
- package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
- package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
- package/src/ngtsc/perf/index.mjs +0 -11
- package/src/ngtsc/perf/perf.externs.js +0 -0
- package/src/ngtsc/perf/src/api.mjs +0 -278
- package/src/ngtsc/perf/src/clock.mjs +0 -15
- package/src/ngtsc/perf/src/noop.mjs +0 -21
- package/src/ngtsc/perf/src/recorder.mjs +0 -125
- package/src/ngtsc/program.mjs +0 -271
- package/src/ngtsc/program_driver/index.mjs +0 -10
- package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
- package/src/ngtsc/program_driver/src/api.mjs +0 -22
- package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
- package/src/ngtsc/reflection/index.mjs +0 -12
- package/src/ngtsc/reflection/reflection.externs.js +0 -0
- package/src/ngtsc/reflection/src/host.mjs +0 -73
- package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
- package/src/ngtsc/reflection/src/typescript.mjs +0 -608
- package/src/ngtsc/reflection/src/util.mjs +0 -21
- package/src/ngtsc/resource/index.mjs +0 -9
- package/src/ngtsc/resource/resource.externs.js +0 -0
- package/src/ngtsc/resource/src/loader.mjs +0 -242
- package/src/ngtsc/routing/index.mjs +0 -11
- package/src/ngtsc/routing/routing.externs.js +0 -0
- package/src/ngtsc/routing/src/analyzer.mjs +0 -69
- package/src/ngtsc/routing/src/lazy.mjs +0 -168
- package/src/ngtsc/routing/src/route.mjs +0 -51
- package/src/ngtsc/scope/index.mjs +0 -12
- package/src/ngtsc/scope/scope.externs.js +0 -0
- package/src/ngtsc/scope/src/api.mjs +0 -9
- package/src/ngtsc/scope/src/component_scope.mjs +0 -31
- package/src/ngtsc/scope/src/dependency.mjs +0 -134
- package/src/ngtsc/scope/src/local.mjs +0 -531
- package/src/ngtsc/scope/src/typecheck.mjs +0 -83
- package/src/ngtsc/shims/api.externs.js +0 -0
- package/src/ngtsc/shims/api.mjs +0 -2
- package/src/ngtsc/shims/index.mjs +0 -14
- package/src/ngtsc/shims/shims.externs.js +0 -0
- package/src/ngtsc/shims/src/adapter.mjs +0 -188
- package/src/ngtsc/shims/src/expando.mjs +0 -102
- package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
- package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
- package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
- package/src/ngtsc/shims/src/util.mjs +0 -26
- package/src/ngtsc/sourcemaps/index.mjs +0 -11
- package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
- package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
- package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
- package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
- package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
- package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
- package/src/ngtsc/switch/index.mjs +0 -9
- package/src/ngtsc/switch/src/switch.mjs +0 -115
- package/src/ngtsc/switch/switch.externs.js +0 -0
- package/src/ngtsc/transform/index.mjs +0 -14
- package/src/ngtsc/transform/src/alias.mjs +0 -30
- package/src/ngtsc/transform/src/api.mjs +0 -63
- package/src/ngtsc/transform/src/compilation.mjs +0 -514
- package/src/ngtsc/transform/src/declaration.mjs +0 -182
- package/src/ngtsc/transform/src/trait.mjs +0 -95
- package/src/ngtsc/transform/src/transform.mjs +0 -298
- package/src/ngtsc/transform/src/utils.mjs +0 -57
- package/src/ngtsc/transform/transform.externs.js +0 -0
- package/src/ngtsc/translator/index.mjs +0 -14
- package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
- package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
- package/src/ngtsc/translator/src/context.mjs +0 -24
- package/src/ngtsc/translator/src/import_manager.mjs +0 -48
- package/src/ngtsc/translator/src/translator.mjs +0 -317
- package/src/ngtsc/translator/src/type_translator.mjs +0 -204
- package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
- package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
- package/src/ngtsc/translator/translator.externs.js +0 -0
- package/src/ngtsc/tsc_plugin.mjs +0 -98
- package/src/ngtsc/typecheck/api/api.externs.js +0 -0
- package/src/ngtsc/typecheck/api/api.mjs +0 -9
- package/src/ngtsc/typecheck/api/checker.mjs +0 -31
- package/src/ngtsc/typecheck/api/completion.mjs +0 -16
- package/src/ngtsc/typecheck/api/context.mjs +0 -9
- package/src/ngtsc/typecheck/api/index.mjs +0 -14
- package/src/ngtsc/typecheck/api/scope.mjs +0 -9
- package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
- package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
- package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
- package/src/ngtsc/typecheck/index.mjs +0 -12
- package/src/ngtsc/typecheck/src/checker.mjs +0 -591
- package/src/ngtsc/typecheck/src/comments.mjs +0 -159
- package/src/ngtsc/typecheck/src/completion.mjs +0 -155
- package/src/ngtsc/typecheck/src/context.mjs +0 -350
- package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
- package/src/ngtsc/typecheck/src/dom.mjs +0 -68
- package/src/ngtsc/typecheck/src/environment.mjs +0 -146
- package/src/ngtsc/typecheck/src/expression.mjs +0 -412
- package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
- package/src/ngtsc/typecheck/src/oob.mjs +0 -112
- package/src/ngtsc/typecheck/src/shim.mjs +0 -37
- package/src/ngtsc/typecheck/src/source.mjs +0 -74
- package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
- package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
- package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
- package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
- package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
- package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
- package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
- package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
- package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
- package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
- package/src/ngtsc/util/src/path.mjs +0 -18
- package/src/ngtsc/util/src/typescript.mjs +0 -143
- package/src/ngtsc/util/src/visitor.mjs +0 -107
- package/src/ngtsc/util/util.externs.js +0 -0
- package/src/ngtsc/xi18n/index.mjs +0 -9
- package/src/ngtsc/xi18n/src/context.mjs +0 -9
- package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
- package/src/perform_compile.mjs +0 -275
- package/src/perform_watch.mjs +0 -247
- package/src/tooling.mjs +0 -32
- package/src/transformers/api.mjs +0 -27
- package/src/transformers/compiler_host.mjs +0 -593
- package/src/transformers/downlevel_decorators_transform.mjs +0 -507
- package/src/transformers/entry_points.mjs +0 -10
- package/src/transformers/i18n.mjs +0 -59
- package/src/transformers/inline_resources.mjs +0 -269
- package/src/transformers/lower_expressions.mjs +0 -336
- package/src/transformers/metadata_cache.mjs +0 -53
- package/src/transformers/metadata_reader.mjs +0 -104
- package/src/transformers/node_emitter.mjs +0 -606
- package/src/transformers/node_emitter_transform.mjs +0 -78
- package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
- package/src/transformers/program.mjs +0 -887
- package/src/transformers/r3_metadata_transform.mjs +0 -46
- package/src/transformers/r3_transform.mjs +0 -29
- package/src/transformers/util.mjs +0 -89
- package/src/typescript_support.mjs +0 -57
- package/src/version.mjs +0 -15
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ts from 'typescript';
|
|
9
|
-
import { copyFileShimData, retagAllTsFiles, ShimReferenceTagger, untagAllTsFiles } from '../../shims';
|
|
10
|
-
import { toUnredirectedSourceFile } from '../../util/src/typescript';
|
|
11
|
-
import { UpdateMode } from './api';
|
|
12
|
-
/**
|
|
13
|
-
* Delegates all methods of `ts.CompilerHost` to a delegate, with the exception of
|
|
14
|
-
* `getSourceFile`, `fileExists` and `writeFile` which are implemented in `TypeCheckProgramHost`.
|
|
15
|
-
*
|
|
16
|
-
* If a new method is added to `ts.CompilerHost` which is not delegated, a type error will be
|
|
17
|
-
* generated for this class.
|
|
18
|
-
*/
|
|
19
|
-
export class DelegatingCompilerHost {
|
|
20
|
-
constructor(delegate) {
|
|
21
|
-
this.delegate = delegate;
|
|
22
|
-
// Excluded are 'getSourceFile', 'fileExists' and 'writeFile', which are actually implemented by
|
|
23
|
-
// `TypeCheckProgramHost` below.
|
|
24
|
-
this.createHash = this.delegateMethod('createHash');
|
|
25
|
-
this.directoryExists = this.delegateMethod('directoryExists');
|
|
26
|
-
this.getCancellationToken = this.delegateMethod('getCancellationToken');
|
|
27
|
-
this.getCanonicalFileName = this.delegateMethod('getCanonicalFileName');
|
|
28
|
-
this.getCurrentDirectory = this.delegateMethod('getCurrentDirectory');
|
|
29
|
-
this.getDefaultLibFileName = this.delegateMethod('getDefaultLibFileName');
|
|
30
|
-
this.getDefaultLibLocation = this.delegateMethod('getDefaultLibLocation');
|
|
31
|
-
this.getDirectories = this.delegateMethod('getDirectories');
|
|
32
|
-
this.getEnvironmentVariable = this.delegateMethod('getEnvironmentVariable');
|
|
33
|
-
this.getNewLine = this.delegateMethod('getNewLine');
|
|
34
|
-
this.getParsedCommandLine = this.delegateMethod('getParsedCommandLine');
|
|
35
|
-
this.getSourceFileByPath = this.delegateMethod('getSourceFileByPath');
|
|
36
|
-
this.readDirectory = this.delegateMethod('readDirectory');
|
|
37
|
-
this.readFile = this.delegateMethod('readFile');
|
|
38
|
-
this.realpath = this.delegateMethod('realpath');
|
|
39
|
-
this.resolveModuleNames = this.delegateMethod('resolveModuleNames');
|
|
40
|
-
this.resolveTypeReferenceDirectives = this.delegateMethod('resolveTypeReferenceDirectives');
|
|
41
|
-
this.trace = this.delegateMethod('trace');
|
|
42
|
-
this.useCaseSensitiveFileNames = this.delegateMethod('useCaseSensitiveFileNames');
|
|
43
|
-
}
|
|
44
|
-
delegateMethod(name) {
|
|
45
|
-
return this.delegate[name] !== undefined ? this.delegate[name].bind(this.delegate) :
|
|
46
|
-
undefined;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* A `ts.CompilerHost` which augments source files.
|
|
51
|
-
*/
|
|
52
|
-
class UpdatedProgramHost extends DelegatingCompilerHost {
|
|
53
|
-
constructor(sfMap, originalProgram, delegate, shimExtensionPrefixes) {
|
|
54
|
-
super(delegate);
|
|
55
|
-
this.originalProgram = originalProgram;
|
|
56
|
-
this.shimExtensionPrefixes = shimExtensionPrefixes;
|
|
57
|
-
/**
|
|
58
|
-
* The `ShimReferenceTagger` responsible for tagging `ts.SourceFile`s loaded via this host.
|
|
59
|
-
*
|
|
60
|
-
* The `UpdatedProgramHost` is used in the creation of a new `ts.Program`. Even though this new
|
|
61
|
-
* program is based on a prior one, TypeScript will still start from the root files and enumerate
|
|
62
|
-
* all source files to include in the new program. This means that just like during the original
|
|
63
|
-
* program's creation, these source files must be tagged with references to per-file shims in
|
|
64
|
-
* order for those shims to be loaded, and then cleaned up afterwards. Thus the
|
|
65
|
-
* `UpdatedProgramHost` has its own `ShimReferenceTagger` to perform this function.
|
|
66
|
-
*/
|
|
67
|
-
this.shimTagger = new ShimReferenceTagger(this.shimExtensionPrefixes);
|
|
68
|
-
this.sfMap = sfMap;
|
|
69
|
-
}
|
|
70
|
-
getSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile) {
|
|
71
|
-
// Try to use the same `ts.SourceFile` as the original program, if possible. This guarantees
|
|
72
|
-
// that program reuse will be as efficient as possible.
|
|
73
|
-
let delegateSf = this.originalProgram.getSourceFile(fileName);
|
|
74
|
-
if (delegateSf === undefined) {
|
|
75
|
-
// Something went wrong and a source file is being requested that's not in the original
|
|
76
|
-
// program. Just in case, try to retrieve it from the delegate.
|
|
77
|
-
delegateSf = this.delegate.getSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
|
|
78
|
-
}
|
|
79
|
-
if (delegateSf === undefined) {
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
// Look for replacements.
|
|
83
|
-
let sf;
|
|
84
|
-
if (this.sfMap.has(fileName)) {
|
|
85
|
-
sf = this.sfMap.get(fileName);
|
|
86
|
-
copyFileShimData(delegateSf, sf);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
sf = delegateSf;
|
|
90
|
-
}
|
|
91
|
-
// TypeScript doesn't allow returning redirect source files. To avoid unforeseen errors we
|
|
92
|
-
// return the original source file instead of the redirect target.
|
|
93
|
-
sf = toUnredirectedSourceFile(sf);
|
|
94
|
-
this.shimTagger.tag(sf);
|
|
95
|
-
return sf;
|
|
96
|
-
}
|
|
97
|
-
postProgramCreationCleanup() {
|
|
98
|
-
this.shimTagger.finalize();
|
|
99
|
-
}
|
|
100
|
-
writeFile() {
|
|
101
|
-
throw new Error(`TypeCheckProgramHost should never write files`);
|
|
102
|
-
}
|
|
103
|
-
fileExists(fileName) {
|
|
104
|
-
return this.sfMap.has(fileName) || this.delegate.fileExists(fileName);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Updates a `ts.Program` instance with a new one that incorporates specific changes, using the
|
|
109
|
-
* TypeScript compiler APIs for incremental program creation.
|
|
110
|
-
*/
|
|
111
|
-
export class TsCreateProgramDriver {
|
|
112
|
-
constructor(originalProgram, originalHost, options, shimExtensionPrefixes) {
|
|
113
|
-
this.originalProgram = originalProgram;
|
|
114
|
-
this.originalHost = originalHost;
|
|
115
|
-
this.options = options;
|
|
116
|
-
this.shimExtensionPrefixes = shimExtensionPrefixes;
|
|
117
|
-
/**
|
|
118
|
-
* A map of source file paths to replacement `ts.SourceFile`s for those paths.
|
|
119
|
-
*
|
|
120
|
-
* Effectively, this tracks the delta between the user's program (represented by the
|
|
121
|
-
* `originalHost`) and the template type-checking program being managed.
|
|
122
|
-
*/
|
|
123
|
-
this.sfMap = new Map();
|
|
124
|
-
this.program = this.originalProgram;
|
|
125
|
-
this.supportsInlineOperations = true;
|
|
126
|
-
}
|
|
127
|
-
getProgram() {
|
|
128
|
-
return this.program;
|
|
129
|
-
}
|
|
130
|
-
updateFiles(contents, updateMode) {
|
|
131
|
-
if (contents.size === 0) {
|
|
132
|
-
// No changes have been requested. Is it safe to skip updating entirely?
|
|
133
|
-
// If UpdateMode is Incremental, then yes. If UpdateMode is Complete, then it's safe to skip
|
|
134
|
-
// only if there are no active changes already (that would be cleared by the update).
|
|
135
|
-
if (updateMode !== UpdateMode.Complete || this.sfMap.size === 0) {
|
|
136
|
-
// No changes would be made to the `ts.Program` anyway, so it's safe to do nothing here.
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (updateMode === UpdateMode.Complete) {
|
|
141
|
-
this.sfMap.clear();
|
|
142
|
-
}
|
|
143
|
-
for (const [filePath, text] of contents.entries()) {
|
|
144
|
-
this.sfMap.set(filePath, ts.createSourceFile(filePath, text, ts.ScriptTarget.Latest, true));
|
|
145
|
-
}
|
|
146
|
-
const host = new UpdatedProgramHost(this.sfMap, this.originalProgram, this.originalHost, this.shimExtensionPrefixes);
|
|
147
|
-
const oldProgram = this.program;
|
|
148
|
-
// Retag the old program's `ts.SourceFile`s with shim tags, to allow TypeScript to reuse the
|
|
149
|
-
// most data.
|
|
150
|
-
retagAllTsFiles(oldProgram);
|
|
151
|
-
this.program = ts.createProgram({
|
|
152
|
-
host,
|
|
153
|
-
rootNames: this.program.getRootFileNames(),
|
|
154
|
-
options: this.options,
|
|
155
|
-
oldProgram,
|
|
156
|
-
});
|
|
157
|
-
host.postProgramCreationCleanup();
|
|
158
|
-
// And untag them afterwards. We explicitly untag both programs here, because the oldProgram
|
|
159
|
-
// may still be used for emit and needs to not contain tags.
|
|
160
|
-
untagAllTsFiles(this.program);
|
|
161
|
-
untagAllTsFiles(oldProgram);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNfY3JlYXRlX3Byb2dyYW1fZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9wcm9ncmFtX2RyaXZlci9zcmMvdHNfY3JlYXRlX3Byb2dyYW1fZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR2pDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BHLE9BQU8sRUFBc0Isd0JBQXdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RixPQUFPLEVBQWdCLFVBQVUsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUVoRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBRWpDLFlBQXNCLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBTy9DLGdHQUFnRztRQUNoRyxnQ0FBZ0M7UUFDaEMsZUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0Msb0JBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekQseUJBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25FLHlCQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRSx3QkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDakUsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JFLDBCQUFxQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVC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OUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge2NvcHlGaWxlU2hpbURhdGEsIHJldGFnQWxsVHNGaWxlcywgU2hpbVJlZmVyZW5jZVRhZ2dlciwgdW50YWdBbGxUc0ZpbGVzfSBmcm9tICcuLi8uLi9zaGltcyc7XG5pbXBvcnQge1JlcXVpcmVkRGVsZWdhdGlvbnMsIHRvVW5yZWRpcmVjdGVkU291cmNlRmlsZX0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7UHJvZ3JhbURyaXZlciwgVXBkYXRlTW9kZX0gZnJvbSAnLi9hcGknO1xuXG4vKipcbiAqIERlbGVnYXRlcyBhbGwgbWV0aG9kcyBvZiBgdHMuQ29tcGlsZXJIb3N0YCB0byBhIGRlbGVnYXRlLCB3aXRoIHRoZSBleGNlcHRpb24gb2ZcbiAqIGBnZXRTb3VyY2VGaWxlYCwgYGZpbGVFeGlzdHNgIGFuZCBgd3JpdGVGaWxlYCB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gYFR5cGVDaGVja1Byb2dyYW1Ib3N0YC5cbiAqXG4gKiBJZiBhIG5ldyBtZXRob2QgaXMgYWRkZWQgdG8gYHRzLkNvbXBpbGVySG9zdGAgd2hpY2ggaXMgbm90IGRlbGVnYXRlZCwgYSB0eXBlIGVycm9yIHdpbGwgYmVcbiAqIGdlbmVyYXRlZCBmb3IgdGhpcyBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbGVnYXRpbmdDb21waWxlckhvc3QgaW1wbGVtZW50c1xuICAgIE9taXQ8UmVxdWlyZWREZWxlZ2F0aW9uczx0cy5Db21waWxlckhvc3Q+LCAnZ2V0U291cmNlRmlsZSd8J2ZpbGVFeGlzdHMnfCd3cml0ZUZpbGUnPiB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBkZWxlZ2F0ZTogdHMuQ29tcGlsZXJIb3N0KSB7fVxuXG4gIHByaXZhdGUgZGVsZWdhdGVNZXRob2Q8TSBleHRlbmRzIGtleW9mIHRzLkNvbXBpbGVySG9zdD4obmFtZTogTSk6IHRzLkNvbXBpbGVySG9zdFtNXSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVbbmFtZV0gIT09IHVuZGVmaW5lZCA/ICh0aGlzLmRlbGVnYXRlW25hbWVdIGFzIGFueSkuYmluZCh0aGlzLmRlbGVnYXRlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEV4Y2x1ZGVkIGFyZSAnZ2V0U291cmNlRmlsZScsICdmaWxlRXhpc3RzJyBhbmQgJ3dyaXRlRmlsZScsIHdoaWNoIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBieVxuICAvLyBgVHlwZUNoZWNrUHJvZ3JhbUhvc3RgIGJlbG93LlxuICBjcmVhdGVIYXNoID0gdGhpcy5kZWxlZ2F0ZU1ldGhvZCgnY3JlYXRlSGFzaCcpO1xuICBkaXJlY3RvcnlFeGlzdHMgPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdkaXJlY3RvcnlFeGlzdHMnKTtcbiAgZ2V0Q2FuY2VsbGF0aW9uVG9rZW4gPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdnZXRDYW5jZWxsYXRpb25Ub2tlbicpO1xuICBnZXRDYW5vbmljYWxGaWxlTmFtZSA9IHRoaXMuZGVsZWdhdGVNZXRob2QoJ2dldENhbm9uaWNhbEZpbGVOYW1lJyk7XG4gIGdldEN1cnJlbnREaXJlY3RvcnkgPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdnZXRDdXJyZW50RGlyZWN0b3J5Jyk7XG4gIGdldERlZmF1bHRMaWJGaWxlTmFtZSA9IHRoaXMuZGVsZWdhdGVNZXRob2QoJ2dldERlZmF1bHRMaWJGaWxlTmFtZScpO1xuICBnZXREZWZhdWx0TGliTG9jYXRpb24gPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdnZXREZWZhdWx0TGliTG9jYXRpb24nKTtcbiAgZ2V0RGlyZWN0b3JpZXMgPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdnZXREaXJlY3RvcmllcycpO1xuICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlID0gdGhpcy5kZWxlZ2F0ZU1ldGhvZCgnZ2V0RW52aXJvbm1lbnRWYXJpYWJsZScpO1xuICBnZXROZXdMaW5lID0gdGhpcy5kZWxlZ2F0ZU1ldGhvZCgnZ2V0TmV3TGluZScpO1xuICBnZXRQYXJzZWRDb21tYW5kTGluZSA9IHRoaXMuZGVsZWdhdGVNZXRob2QoJ2dldFBhcnNlZENvbW1hbmRMaW5lJyk7XG4gIGdldFNvdXJjZUZpbGVCeVBhdGggPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdnZXRTb3VyY2VGaWxlQnlQYXRoJyk7XG4gIHJlYWREaXJlY3RvcnkgPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdyZWFkRGlyZWN0b3J5Jyk7XG4gIHJlYWRGaWxlID0gdGhpcy5kZWxlZ2F0ZU1ldGhvZCgncmVhZEZpbGUnKTtcbiAgcmVhbHBhdGggPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdyZWFscGF0aCcpO1xuICByZXNvbHZlTW9kdWxlTmFtZXMgPSB0aGlzLmRlbGVnYXRlTWV0aG9kKCdyZXNvbHZlTW9kdWxlTmFtZXMnKTtcbiAgcmVzb2x2ZVR5cGVSZWZlcmVuY2VEaXJlY3RpdmVzID0gdGhpcy5kZWxlZ2F0ZU1ldGhvZCgncmVzb2x2ZVR5cGVSZWZlcmVuY2VEaXJlY3RpdmVzJyk7XG4gIHRyYWNlID0gdGhpcy5kZWxlZ2F0ZU1ldGhvZCgndHJhY2UnKTtcbiAgdXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lcyA9IHRoaXMuZGVsZWdhdGVNZXRob2QoJ3VzZUNhc2VTZW5zaXRpdmVGaWxlTmFtZXMnKTtcbn1cblxuLyoqXG4gKiBBIGB0cy5Db21waWxlckhvc3RgIHdoaWNoIGF1Z21lbnRzIHNvdXJjZSBmaWxlcy5cbiAqL1xuY2xhc3MgVXBkYXRlZFByb2dyYW1Ib3N0IGV4dGVuZHMgRGVsZWdhdGluZ0NvbXBpbGVySG9zdCB7XG4gIC8qKlxuICAgKiBNYXAgb2Ygc291cmNlIGZpbGUgbmFtZXMgdG8gYHRzLlNvdXJjZUZpbGVgIGluc3RhbmNlcy5cbiAgICovXG4gIHByaXZhdGUgc2ZNYXA6IE1hcDxzdHJpbmcsIHRzLlNvdXJjZUZpbGU+O1xuXG4gIC8qKlxuICAgKiBUaGUgYFNoaW1SZWZlcmVuY2VUYWdnZXJgIHJlc3BvbnNpYmxlIGZvciB0YWdnaW5nIGB0cy5Tb3VyY2VGaWxlYHMgbG9hZGVkIHZpYSB0aGlzIGhvc3QuXG4gICAqXG4gICAqIFRoZSBgVXBkYXRlZFByb2dyYW1Ib3N0YCBpcyB1c2VkIGluIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBgdHMuUHJvZ3JhbWAuIEV2ZW4gdGhvdWdoIHRoaXMgbmV3XG4gICAqIHByb2dyYW0gaXMgYmFzZWQgb24gYSBwcmlvciBvbmUsIFR5cGVTY3JpcHQgd2lsbCBzdGlsbCBzdGFydCBmcm9tIHRoZSByb290IGZpbGVzIGFuZCBlbnVtZXJhdGVcbiAgICogYWxsIHNvdXJjZSBmaWxlcyB0byBpbmNsdWRlIGluIHRoZSBuZXcgcHJvZ3JhbS4gIFRoaXMgbWVhbnMgdGhhdCBqdXN0IGxpa2UgZHVyaW5nIHRoZSBvcmlnaW5hbFxuICAgKiBwcm9ncmFtJ3MgY3JlYXRpb24sIHRoZXNlIHNvdXJjZSBmaWxlcyBtdXN0IGJlIHRhZ2dlZCB3aXRoIHJlZmVyZW5jZXMgdG8gcGVyLWZpbGUgc2hpbXMgaW5cbiAgICogb3JkZXIgZm9yIHRob3NlIHNoaW1zIHRvIGJlIGxvYWRlZCwgYW5kIHRoZW4gY2xlYW5lZCB1cCBhZnRlcndhcmRzLiBUaHVzIHRoZVxuICAgKiBgVXBkYXRlZFByb2dyYW1Ib3N0YCBoYXMgaXRzIG93biBgU2hpbVJlZmVyZW5jZVRhZ2dlcmAgdG8gcGVyZm9ybSB0aGlzIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBzaGltVGFnZ2VyID0gbmV3IFNoaW1SZWZlcmVuY2VUYWdnZXIodGhpcy5zaGltRXh0ZW5zaW9uUHJlZml4ZXMpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgc2ZNYXA6IE1hcDxzdHJpbmcsIHRzLlNvdXJjZUZpbGU+LCBwcml2YXRlIG9yaWdpbmFsUHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgICAgIGRlbGVnYXRlOiB0cy5Db21waWxlckhvc3QsIHByaXZhdGUgc2hpbUV4dGVuc2lvblByZWZpeGVzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKGRlbGVnYXRlKTtcbiAgICB0aGlzLnNmTWFwID0gc2ZNYXA7XG4gIH1cblxuICBnZXRTb3VyY2VGaWxlKFxuICAgICAgZmlsZU5hbWU6IHN0cmluZywgbGFuZ3VhZ2VWZXJzaW9uOiB0cy5TY3JpcHRUYXJnZXQsXG4gICAgICBvbkVycm9yPzogKChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpfHVuZGVmaW5lZCxcbiAgICAgIHNob3VsZENyZWF0ZU5ld1NvdXJjZUZpbGU/OiBib29sZWFufHVuZGVmaW5lZCk6IHRzLlNvdXJjZUZpbGV8dW5kZWZpbmVkIHtcbiAgICAvLyBUcnkgdG8gdXNlIHRoZSBzYW1lIGB0cy5Tb3VyY2VGaWxlYCBhcyB0aGUgb3JpZ2luYWwgcHJvZ3JhbSwgaWYgcG9zc2libGUuIFRoaXMgZ3VhcmFudGVlc1xuICAgIC8vIHRoYXQgcHJvZ3JhbSByZXVzZSB3aWxsIGJlIGFzIGVmZmljaWVudCBhcyBwb3NzaWJsZS5cbiAgICBsZXQgZGVsZWdhdGVTZjogdHMuU291cmNlRmlsZXx1bmRlZmluZWQgPSB0aGlzLm9yaWdpbmFsUHJvZ3JhbS5nZXRTb3VyY2VGaWxlKGZpbGVOYW1lKTtcbiAgICBpZiAoZGVsZWdhdGVTZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgYSBzb3VyY2UgZmlsZSBpcyBiZWluZyByZXF1ZXN0ZWQgdGhhdCdzIG5vdCBpbiB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIHByb2dyYW0uIEp1c3QgaW4gY2FzZSwgdHJ5IHRvIHJldHJpZXZlIGl0IGZyb20gdGhlIGRlbGVnYXRlLlxuICAgICAgZGVsZWdhdGVTZiA9IHRoaXMuZGVsZWdhdGUuZ2V0U291cmNlRmlsZShcbiAgICAgICAgICBmaWxlTmFtZSwgbGFuZ3VhZ2VWZXJzaW9uLCBvbkVycm9yLCBzaG91bGRDcmVhdGVOZXdTb3VyY2VGaWxlKSE7XG4gICAgfVxuICAgIGlmIChkZWxlZ2F0ZVNmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTG9vayBmb3IgcmVwbGFjZW1lbnRzLlxuICAgIGxldCBzZjogdHMuU291cmNlRmlsZTtcbiAgICBpZiAodGhpcy5zZk1hcC5oYXMoZmlsZU5hbWUpKSB7XG4gICAgICBzZiA9IHRoaXMuc2ZNYXAuZ2V0KGZpbGVOYW1lKSE7XG4gICAgICBjb3B5RmlsZVNoaW1EYXRhKGRlbGVnYXRlU2YsIHNmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2YgPSBkZWxlZ2F0ZVNmO1xuICAgIH1cbiAgICAvLyBUeXBlU2NyaXB0IGRvZXNuJ3QgYWxsb3cgcmV0dXJuaW5nIHJlZGlyZWN0IHNvdXJjZSBmaWxlcy4gVG8gYXZvaWQgdW5mb3Jlc2VlbiBlcnJvcnMgd2VcbiAgICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIGluc3RlYWQgb2YgdGhlIHJlZGlyZWN0IHRhcmdldC5cbiAgICBzZiA9IHRvVW5yZWRpcmVjdGVkU291cmNlRmlsZShzZik7XG5cbiAgICB0aGlzLnNoaW1UYWdnZXIudGFnKHNmKTtcbiAgICByZXR1cm4gc2Y7XG4gIH1cblxuICBwb3N0UHJvZ3JhbUNyZWF0aW9uQ2xlYW51cCgpOiB2b2lkIHtcbiAgICB0aGlzLnNoaW1UYWdnZXIuZmluYWxpemUoKTtcbiAgfVxuXG4gIHdyaXRlRmlsZSgpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUeXBlQ2hlY2tQcm9ncmFtSG9zdCBzaG91bGQgbmV2ZXIgd3JpdGUgZmlsZXNgKTtcbiAgfVxuXG4gIGZpbGVFeGlzdHMoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNmTWFwLmhhcyhmaWxlTmFtZSkgfHwgdGhpcy5kZWxlZ2F0ZS5maWxlRXhpc3RzKGZpbGVOYW1lKTtcbiAgfVxufVxuXG5cbi8qKlxuICogVXBkYXRlcyBhIGB0cy5Qcm9ncmFtYCBpbnN0YW5jZSB3aXRoIGEgbmV3IG9uZSB0aGF0IGluY29ycG9yYXRlcyBzcGVjaWZpYyBjaGFuZ2VzLCB1c2luZyB0aGVcbiAqIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJcyBmb3IgaW5jcmVtZW50YWwgcHJvZ3JhbSBjcmVhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRzQ3JlYXRlUHJvZ3JhbURyaXZlciBpbXBsZW1lbnRzIFByb2dyYW1Ecml2ZXIge1xuICAvKipcbiAgICogQSBtYXAgb2Ygc291cmNlIGZpbGUgcGF0aHMgdG8gcmVwbGFjZW1lbnQgYHRzLlNvdXJjZUZpbGVgcyBmb3IgdGhvc2UgcGF0aHMuXG4gICAqXG4gICAqIEVmZmVjdGl2ZWx5LCB0aGlzIHRyYWNrcyB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgdXNlcidzIHByb2dyYW0gKHJlcHJlc2VudGVkIGJ5IHRoZVxuICAgKiBgb3JpZ2luYWxIb3N0YCkgYW5kIHRoZSB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIHByb2dyYW0gYmVpbmcgbWFuYWdlZC5cbiAgICovXG4gIHByaXZhdGUgc2ZNYXAgPSBuZXcgTWFwPHN0cmluZywgdHMuU291cmNlRmlsZT4oKTtcblxuICBwcml2YXRlIHByb2dyYW06IHRzLlByb2dyYW0gPSB0aGlzLm9yaWdpbmFsUHJvZ3JhbTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgb3JpZ2luYWxQcm9ncmFtOiB0cy5Qcm9ncmFtLCBwcml2YXRlIG9yaWdpbmFsSG9zdDogdHMuQ29tcGlsZXJIb3N0LFxuICAgICAgcHJpdmF0ZSBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMsIHByaXZhdGUgc2hpbUV4dGVuc2lvblByZWZpeGVzOiBzdHJpbmdbXSkge31cblxuICByZWFkb25seSBzdXBwb3J0c0lubGluZU9wZXJhdGlvbnMgPSB0cnVlO1xuXG4gIGdldFByb2dyYW0oKTogdHMuUHJvZ3JhbSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbTtcbiAgfVxuXG4gIHVwZGF0ZUZpbGVzKGNvbnRlbnRzOiBNYXA8QWJzb2x1dGVGc1BhdGgsIHN0cmluZz4sIHVwZGF0ZU1vZGU6IFVwZGF0ZU1vZGUpOiB2b2lkIHtcbiAgICBpZiAoY29udGVudHMuc2l6ZSA9PT0gMCkge1xuICAgICAgLy8gTm8gY2hhbmdlcyBoYXZlIGJlZW4gcmVxdWVzdGVkLiBJcyBpdCBzYWZlIHRvIHNraXAgdXBkYXRpbmcgZW50aXJlbHk/XG4gICAgICAvLyBJZiBVcGRhdGVNb2RlIGlzIEluY3JlbWVudGFsLCB0aGVuIHllcy4gSWYgVXBkYXRlTW9kZSBpcyBDb21wbGV0ZSwgdGhlbiBpdCdzIHNhZmUgdG8gc2tpcFxuICAgICAgLy8gb25seSBpZiB0aGVyZSBhcmUgbm8gYWN0aXZlIGNoYW5nZXMgYWxyZWFkeSAodGhhdCB3b3VsZCBiZSBjbGVhcmVkIGJ5IHRoZSB1cGRhdGUpLlxuXG4gICAgICBpZiAodXBkYXRlTW9kZSAhPT0gVXBkYXRlTW9kZS5Db21wbGV0ZSB8fCB0aGlzLnNmTWFwLnNpemUgPT09IDApIHtcbiAgICAgICAgLy8gTm8gY2hhbmdlcyB3b3VsZCBiZSBtYWRlIHRvIHRoZSBgdHMuUHJvZ3JhbWAgYW55d2F5LCBzbyBpdCdzIHNhZmUgdG8gZG8gbm90aGluZyBoZXJlLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZU1vZGUgPT09IFVwZGF0ZU1vZGUuQ29tcGxldGUpIHtcbiAgICAgIHRoaXMuc2ZNYXAuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdGV4dF0gb2YgY29udGVudHMuZW50cmllcygpKSB7XG4gICAgICB0aGlzLnNmTWFwLnNldChmaWxlUGF0aCwgdHMuY3JlYXRlU291cmNlRmlsZShmaWxlUGF0aCwgdGV4dCwgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGhvc3QgPSBuZXcgVXBkYXRlZFByb2dyYW1Ib3N0KFxuICAgICAgICB0aGlzLnNmTWFwLCB0aGlzLm9yaWdpbmFsUHJvZ3JhbSwgdGhpcy5vcmlnaW5hbEhvc3QsIHRoaXMuc2hpbUV4dGVuc2lvblByZWZpeGVzKTtcbiAgICBjb25zdCBvbGRQcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xuXG4gICAgLy8gUmV0YWcgdGhlIG9sZCBwcm9ncmFtJ3MgYHRzLlNvdXJjZUZpbGVgcyB3aXRoIHNoaW0gdGFncywgdG8gYWxsb3cgVHlwZVNjcmlwdCB0byByZXVzZSB0aGVcbiAgICAvLyBtb3N0IGRhdGEuXG4gICAgcmV0YWdBbGxUc0ZpbGVzKG9sZFByb2dyYW0pO1xuXG4gICAgdGhpcy5wcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbSh7XG4gICAgICBob3N0LFxuICAgICAgcm9vdE5hbWVzOiB0aGlzLnByb2dyYW0uZ2V0Um9vdEZpbGVOYW1lcygpLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgb2xkUHJvZ3JhbSxcbiAgICB9KTtcbiAgICBob3N0LnBvc3RQcm9ncmFtQ3JlYXRpb25DbGVhbnVwKCk7XG5cbiAgICAvLyBBbmQgdW50YWcgdGhlbSBhZnRlcndhcmRzLiBXZSBleHBsaWNpdGx5IHVudGFnIGJvdGggcHJvZ3JhbXMgaGVyZSwgYmVjYXVzZSB0aGUgb2xkUHJvZ3JhbVxuICAgIC8vIG1heSBzdGlsbCBiZSB1c2VkIGZvciBlbWl0IGFuZCBuZWVkcyB0byBub3QgY29udGFpbiB0YWdzLlxuICAgIHVudGFnQWxsVHNGaWxlcyh0aGlzLnByb2dyYW0pO1xuICAgIHVudGFnQWxsVHNGaWxlcyhvbGRQcm9ncmFtKTtcbiAgfVxufVxuIl19
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
export * from './src/host';
|
|
9
|
-
export { typeNodeToValueExpr } from './src/type_to_value';
|
|
10
|
-
export { TypeScriptReflectionHost, filterToMembersWithDecorator, reflectIdentifierOfDeclaration, reflectNameOfDeclaration, reflectObjectLiteral, reflectTypeEntityToDeclaration } from './src/typescript';
|
|
11
|
-
export { isNamedClassDeclaration, isNamedFunctionDeclaration, isNamedVariableDeclaration } from './src/util';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3JlZmxlY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLDhCQUE4QixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLDhCQUE4QixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDeE0sT0FBTyxFQUFDLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFDLE1BQU0sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL2hvc3QnO1xuZXhwb3J0IHt0eXBlTm9kZVRvVmFsdWVFeHByfSBmcm9tICcuL3NyYy90eXBlX3RvX3ZhbHVlJztcbmV4cG9ydCB7VHlwZVNjcmlwdFJlZmxlY3Rpb25Ib3N0LCBmaWx0ZXJUb01lbWJlcnNXaXRoRGVjb3JhdG9yLCByZWZsZWN0SWRlbnRpZmllck9mRGVjbGFyYXRpb24sIHJlZmxlY3ROYW1lT2ZEZWNsYXJhdGlvbiwgcmVmbGVjdE9iamVjdExpdGVyYWwsIHJlZmxlY3RUeXBlRW50aXR5VG9EZWNsYXJhdGlvbn0gZnJvbSAnLi9zcmMvdHlwZXNjcmlwdCc7XG5leHBvcnQge2lzTmFtZWRDbGFzc0RlY2xhcmF0aW9uLCBpc05hbWVkRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYW1lZFZhcmlhYmxlRGVjbGFyYXRpb259IGZyb20gJy4vc3JjL3V0aWwnO1xuIl19
|
|
File without changes
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ts from 'typescript';
|
|
9
|
-
export const Decorator = {
|
|
10
|
-
nodeForError: (decorator) => {
|
|
11
|
-
if (decorator.node !== null) {
|
|
12
|
-
return decorator.node;
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
// TODO(alxhub): we can't rely on narrowing until TS 3.6 is in g3.
|
|
16
|
-
return decorator.synthesizedFor;
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
export function isDecoratorIdentifier(exp) {
|
|
21
|
-
return ts.isIdentifier(exp) ||
|
|
22
|
-
ts.isPropertyAccessExpression(exp) && ts.isIdentifier(exp.expression) &&
|
|
23
|
-
ts.isIdentifier(exp.name);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* An enumeration of possible kinds of class members.
|
|
27
|
-
*/
|
|
28
|
-
export var ClassMemberKind;
|
|
29
|
-
(function (ClassMemberKind) {
|
|
30
|
-
ClassMemberKind[ClassMemberKind["Constructor"] = 0] = "Constructor";
|
|
31
|
-
ClassMemberKind[ClassMemberKind["Getter"] = 1] = "Getter";
|
|
32
|
-
ClassMemberKind[ClassMemberKind["Setter"] = 2] = "Setter";
|
|
33
|
-
ClassMemberKind[ClassMemberKind["Property"] = 3] = "Property";
|
|
34
|
-
ClassMemberKind[ClassMemberKind["Method"] = 4] = "Method";
|
|
35
|
-
})(ClassMemberKind || (ClassMemberKind = {}));
|
|
36
|
-
/**
|
|
37
|
-
* Possible declarations of known values, such as built-in objects/functions or TypeScript helpers.
|
|
38
|
-
*/
|
|
39
|
-
export var KnownDeclaration;
|
|
40
|
-
(function (KnownDeclaration) {
|
|
41
|
-
/**
|
|
42
|
-
* Indicates the JavaScript global `Object` class.
|
|
43
|
-
*/
|
|
44
|
-
KnownDeclaration[KnownDeclaration["JsGlobalObject"] = 0] = "JsGlobalObject";
|
|
45
|
-
/**
|
|
46
|
-
* Indicates the `__assign` TypeScript helper function.
|
|
47
|
-
*/
|
|
48
|
-
KnownDeclaration[KnownDeclaration["TsHelperAssign"] = 1] = "TsHelperAssign";
|
|
49
|
-
/**
|
|
50
|
-
* Indicates the `__spread` TypeScript helper function.
|
|
51
|
-
*/
|
|
52
|
-
KnownDeclaration[KnownDeclaration["TsHelperSpread"] = 2] = "TsHelperSpread";
|
|
53
|
-
/**
|
|
54
|
-
* Indicates the `__spreadArrays` TypeScript helper function.
|
|
55
|
-
*/
|
|
56
|
-
KnownDeclaration[KnownDeclaration["TsHelperSpreadArrays"] = 3] = "TsHelperSpreadArrays";
|
|
57
|
-
/**
|
|
58
|
-
* Indicates the `__spreadArray` TypeScript helper function.
|
|
59
|
-
*/
|
|
60
|
-
KnownDeclaration[KnownDeclaration["TsHelperSpreadArray"] = 4] = "TsHelperSpreadArray";
|
|
61
|
-
/**
|
|
62
|
-
* Indicates the `__read` TypeScript helper function.
|
|
63
|
-
*/
|
|
64
|
-
KnownDeclaration[KnownDeclaration["TsHelperRead"] = 5] = "TsHelperRead";
|
|
65
|
-
})(KnownDeclaration || (KnownDeclaration = {}));
|
|
66
|
-
/**
|
|
67
|
-
* Returns true if the `decl` is a `ConcreteDeclaration` (ie. that its `node` property is a
|
|
68
|
-
* `ts.Declaration`).
|
|
69
|
-
*/
|
|
70
|
-
export function isConcreteDeclaration(decl) {
|
|
71
|
-
return decl.kind === 0 /* Concrete */;
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQWtFakMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCLFlBQVksRUFBRSxDQUFDLFNBQW9CLEVBQVcsRUFBRTtRQUM5QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztTQUN2QjthQUFNO1lBQ0wsa0VBQWtFO1lBQ2xFLE9BQVEsU0FBZ0MsQ0FBQyxjQUFjLENBQUM7U0FDekQ7SUFDSCxDQUFDO0NBQ0YsQ0FBQztBQVdGLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFrQjtJQUN0RCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQW1CRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGVBTVg7QUFORCxXQUFZLGVBQWU7SUFDekIsbUVBQVcsQ0FBQTtJQUNYLHlEQUFNLENBQUE7SUFDTix5REFBTSxDQUFBO0lBQ04sNkRBQVEsQ0FBQTtJQUNSLHlEQUFNLENBQUE7QUFDUixDQUFDLEVBTlcsZUFBZSxLQUFmLGVBQWUsUUFNMUI7QUF1VUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkE4Qlg7QUE5QkQsV0FBWSxnQkFBZ0I7SUFDMUI7O09BRUc7SUFDSCwyRUFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwyRUFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwyRUFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCx1RkFBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILHFGQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsdUVBQVksQ0FBQTtBQUNkLENBQUMsRUE5QlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQThCM0I7QUEwR0Q7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWlCO0lBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUkscUJBQTZCLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCBvciBzeW50aGVzaXplZCBmcm9tXG4gKiBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIGNsYXNzLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3IgPSBDb25jcmV0ZURlY29yYXRvcnxTeW50aGV0aWNEZWNvcmF0b3I7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlY29yYXRvciB7XG4gIC8qKlxuICAgKiBOYW1lIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGludm9rZWQgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKlxuICAgKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gdGhlIG5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW1wb3J0ZWQgKHRob3VnaCBpbiBwcmFjdGljZSB0aGV5XG4gICAqIHdpbGwgdXN1YWxseSBiZSB0aGUgc2FtZSkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgd2hpY2ggcmVmZXJzIHRvIHRoZSBkZWNvcmF0b3IgaW4gdGhlIHVzZXIncyBjb2RlLlxuICAgKi9cbiAgaWRlbnRpZmllcjogRGVjb3JhdG9ySWRlbnRpZmllcnxudWxsO1xuXG4vKipcbiAqIGBJbXBvcnRgIGJ5IHdoaWNoIHRoZSBkZWNvcmF0b3Igd2FzIGJyb3VnaHQgaW50byB0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhcyBpbnZva2VkLCBvciBgbnVsbGBcbiAqIGlmIHRoZSBkZWNvcmF0b3Igd2FzIGRlY2xhcmVkIGluIHRoZSBzYW1lIG1vZHVsZSBhbmQgbm90IGltcG9ydGVkLlxuICovXG5pbXBvcnQ6IEltcG9ydHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgZGVjb3JhdG9yIGl0c2VsZiwgb3IgYG51bGxgIGlmIHRoZSBkZWNvcmF0b3IgaXMgc3ludGhlc2l6ZWQgKGUuZy5cbiAgICogaW4gbmdjYykuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBvZiB0aGUgaW52b2NhdGlvbiBvZiB0aGUgZGVjb3JhdG9yLCBpZiB0aGUgZGVjb3JhdG9yIGlzIGludm9rZWQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBhcmdzOiB0cy5FeHByZXNzaW9uW118bnVsbDtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBhIGRlY29yYXRvciBvbiBhbm90aGVyIGRlY2xhcmF0aW9uLCB3aGljaCB3YXMgYWN0dWFsbHlcbiAqIHByZXNlbnQgaW4gYSBmaWxlLlxuICpcbiAqIENvbmNyZXRlIGRlY29yYXRvcnMgYWx3YXlzIGhhdmUgYW4gYGlkZW50aWZpZXJgIGFuZCBhIGBub2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyO1xuICBub2RlOiB0cy5Ob2RlO1xufVxuXG4vKipcbiAqIFN5bnRoZXRpYyBkZWNvcmF0b3JzIG5ldmVyIGhhdmUgYW4gYGlkZW50aWZpZXJgIG9yIGEgYG5vZGVgLCBidXQga25vdyB0aGUgbm9kZSBmb3Igd2hpY2ggdGhleVxuICogd2VyZSBzeW50aGVzaXplZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGV0aWNEZWNvcmF0b3IgZXh0ZW5kcyBCYXNlRGVjb3JhdG9yIHtcbiAgaWRlbnRpZmllcjogbnVsbDtcbiAgbm9kZTogbnVsbDtcblxuICAvKipcbiAgICogVGhlIGB0cy5Ob2RlYCBmb3Igd2hpY2ggdGhpcyBkZWNvcmF0b3Igd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBzeW50aGVzaXplZEZvcjogdHMuTm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IERlY29yYXRvciA9IHtcbiAgbm9kZUZvckVycm9yOiAoZGVjb3JhdG9yOiBEZWNvcmF0b3IpOiB0cy5Ob2RlID0+IHtcbiAgICBpZiAoZGVjb3JhdG9yLm5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWNvcmF0b3Iubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyhhbHhodWIpOiB3ZSBjYW4ndCByZWx5IG9uIG5hcnJvd2luZyB1bnRpbCBUUyAzLjYgaXMgaW4gZzMuXG4gICAgICByZXR1cm4gKGRlY29yYXRvciBhcyBTeW50aGV0aWNEZWNvcmF0b3IpLnN5bnRoZXNpemVkRm9yO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQSBkZWNvcmF0b3IgaXMgaWRlbnRpZmllZCBieSBlaXRoZXIgYSBzaW1wbGUgaWRlbnRpZmllciAoZS5nLiBgRGVjb3JhdG9yYCkgb3IsIGluIHNvbWUgY2FzZXMsXG4gKiBhIG5hbWVzcGFjZWQgcHJvcGVydHkgYWNjZXNzIChlLmcuIGBjb3JlLkRlY29yYXRvcmApLlxuICovXG5leHBvcnQgdHlwZSBEZWNvcmF0b3JJZGVudGlmaWVyID0gdHMuSWRlbnRpZmllcnxOYW1lc3BhY2VkSWRlbnRpZmllcjtcbmV4cG9ydCB0eXBlIE5hbWVzcGFjZWRJZGVudGlmaWVyID0gdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJntcbiAgZXhwcmVzc2lvbjogdHMuSWRlbnRpZmllcjtcbiAgbmFtZTogdHMuSWRlbnRpZmllclxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0RlY29yYXRvcklkZW50aWZpZXIoZXhwOiB0cy5FeHByZXNzaW9uKTogZXhwIGlzIERlY29yYXRvcklkZW50aWZpZXIge1xuICByZXR1cm4gdHMuaXNJZGVudGlmaWVyKGV4cCkgfHxcbiAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGV4cCkgJiYgdHMuaXNJZGVudGlmaWVyKGV4cC5leHByZXNzaW9uKSAmJlxuICAgICAgdHMuaXNJZGVudGlmaWVyKGV4cC5uYW1lKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRzLkRlY2xhcmF0aW9uYCBvZiBhIFwiY2xhc3NcIi5cbiAqXG4gKiBDbGFzc2VzIGFyZSByZXByZXNlbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgY29kZSBmb3JtYXRzOlxuICogLSBJbiBUUyBjb2RlLCB0aGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCB1c2luZyB0aGUgYGNsYXNzYCBrZXl3b3JkLlxuICogLSBJbiBFUzIwMTUgY29kZSwgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlXG4gKiAgIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIGEgY2xhc3MgZXhwcmVzc2lvbiAoZS5nLlxuICogICBgbGV0IEZvbyA9IEZvbzEgPSBjbGFzcyBGb28ge31gKS5cbiAqIC0gSW4gRVM1IGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIGFzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBiZWluZyBhc3NpZ25lZCB0aGUgcmV0dXJuXG4gKiAgIHZhbHVlIG9mIGFuIElJRkUuIFRoZSBhY3R1YWwgXCJjbGFzc1wiIGlzIGltcGxlbWVudGVkIGFzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24gaW5zaWRlIHRoZSBJSUZFLFxuICogICBidXQgdGhlIG91dGVyIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHJlcHJlc2VudHMgdGhlIFwiY2xhc3NcIiB0byB0aGUgcmVzdCBvZiB0aGUgcHJvZ3JhbS5cbiAqXG4gKiBGb3IgYFJlZmxlY3Rpb25Ib3N0YCBwdXJwb3NlcywgYSBjbGFzcyBkZWNsYXJhdGlvbiBzaG91bGQgYWx3YXlzIGhhdmUgYSBgbmFtZWAgaWRlbnRpZmllcixcbiAqIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlZmVyZW5jZSBpdCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgcHJvZ3JhbS5cbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3NEZWNsYXJhdGlvbjxUIGV4dGVuZHMgRGVjbGFyYXRpb25Ob2RlID0gRGVjbGFyYXRpb25Ob2RlPiA9IFQme25hbWU6IHRzLklkZW50aWZpZXJ9O1xuXG4vKipcbiAqIEFuIGVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIGtpbmRzIG9mIGNsYXNzIG1lbWJlcnMuXG4gKi9cbmV4cG9ydCBlbnVtIENsYXNzTWVtYmVyS2luZCB7XG4gIENvbnN0cnVjdG9yLFxuICBHZXR0ZXIsXG4gIFNldHRlcixcbiAgUHJvcGVydHksXG4gIE1ldGhvZCxcbn1cblxuLyoqXG4gKiBBIG1lbWJlciBvZiBhIGNsYXNzLCBzdWNoIGFzIGEgcHJvcGVydHksIG1ldGhvZCwgb3IgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NNZW1iZXIge1xuICAvKipcbiAgICogVHlwZVNjcmlwdCByZWZlcmVuY2UgdG8gdGhlIGNsYXNzIG1lbWJlciBpdHNlbGYsIG9yIG51bGwgaWYgaXQgaXMgbm90IGFwcGxpY2FibGUuXG4gICAqL1xuICBub2RlOiB0cy5Ob2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEluZGljYXRpb24gb2Ygd2hpY2ggdHlwZSBvZiBtZW1iZXIgdGhpcyBpcyAocHJvcGVydHksIG1ldGhvZCwgZXRjKS5cbiAgICovXG4gIGtpbmQ6IENsYXNzTWVtYmVyS2luZDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuVHlwZU5vZGVgIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiB0aGUgbWVtYmVyLCBvciBgbnVsbGAgaWYgbm90IHByZXNlbnQgb3JcbiAgICogYXBwbGljYWJsZS5cbiAgICovXG4gIHR5cGU6IHRzLlR5cGVOb2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNsYXNzIG1lbWJlci5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmllcmAgb3IgYHRzLlN0cmluZ0xpdGVyYWxgIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyLCBvciBgbnVsbGBcbiAgICogaWYgbm8gc3VjaCBub2RlIGlzIHByZXNlbnQuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLklkZW50aWZpZXJ8dHMuU3RyaW5nTGl0ZXJhbHxudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5FeHByZXNzaW9uYCB3aGljaCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZiB0aGUgbWVtYmVyLlxuICAgKlxuICAgKiBJZiB0aGUgbWVtYmVyIGlzIGEgcHJvcGVydHksIHRoaXMgd2lsbCBiZSB0aGUgcHJvcGVydHkgaW5pdGlhbGl6ZXIgaWYgdGhlcmUgaXMgb25lLCBvciBudWxsXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIHZhbHVlOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCB3aGljaCByZXByZXNlbnRzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWVtYmVyLlxuICAgKlxuICAgKiBJbiBUeXBlU2NyaXB0IGNvZGUgdGhpcyBpcyBpZGVudGljYWwgdG8gdGhlIG5vZGUsIGJ1dCBpbiBkb3dubGV2ZWxlZCBjb2RlIHRoaXMgc2hvdWxkIGFsd2F5cyBiZVxuICAgKiB0aGUgRGVjbGFyYXRpb24gd2hpY2ggYWN0dWFsbHkgcmVwcmVzZW50cyB0aGUgbWVtYmVyJ3MgcnVudGltZSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHRoZSBUUyBjb2RlOlxuICAgKlxuICAgKiBgYGBcbiAgICogY2xhc3MgQ2xhenoge1xuICAgKiAgIHN0YXRpYyBnZXQgcHJvcGVydHkoKTogc3RyaW5nIHtcbiAgICogICAgIHJldHVybiAndmFsdWUnO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogRG93bmxldmVscyB0bzpcbiAgICpcbiAgICogYGBgXG4gICAqIHZhciBDbGF6eiA9IChmdW5jdGlvbiAoKSB7XG4gICAqICAgZnVuY3Rpb24gQ2xhenooKSB7XG4gICAqICAgfVxuICAgKiAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDbGF6eiwgXCJwcm9wZXJ0eVwiLCB7XG4gICAqICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgKiAgICAgICAgICAgcmV0dXJuICd2YWx1ZSc7XG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAqICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgKiAgIH0pO1xuICAgKiAgIHJldHVybiBDbGF6ejtcbiAgICogfSgpKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEluIHRoaXMgZXhhbXBsZSwgZm9yIHRoZSBwcm9wZXJ0eSBcInByb3BlcnR5XCIsIHRoZSBub2RlIHdvdWxkIGJlIHRoZSBlbnRpcmVcbiAgICogT2JqZWN0LmRlZmluZVByb3BlcnR5IEV4cHJlc3Npb25TdGF0ZW1lbnQsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgYmUgdGhpc1xuICAgKiBGdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgKlxuICAgKiBgYGBcbiAgICogZnVuY3Rpb24gKCkge1xuICAgKiAgIHJldHVybiAndmFsdWUnO1xuICAgKiB9LFxuICAgKiBgYGBcbiAgICovXG4gIGltcGxlbWVudGF0aW9uOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtZW1iZXIgaXMgc3RhdGljIG9yIG5vdC5cbiAgICovXG4gIGlzU3RhdGljOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbnkgYERlY29yYXRvcmBzIHdoaWNoIGFyZSBwcmVzZW50IG9uIHRoZSBtZW1iZXIsIG9yIGBudWxsYCBpZiBub25lIGFyZSBwcmVzZW50LlxuICAgKi9cbiAgZGVjb3JhdG9yczogRGVjb3JhdG9yW118bnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gVHlwZVZhbHVlUmVmZXJlbmNlS2luZCB7XG4gIExPQ0FMLFxuICBJTVBPUlRFRCxcbiAgVU5BVkFJTEFCTEUsXG59XG5cbi8qKlxuICogQSB0eXBlIHJlZmVyZW5jZSB0aGF0IHJlZmVycyB0byBhbnkgdHlwZSB2aWEgYSBgdHMuRXhwcmVzc2lvbmAgdGhhdCdzIHZhbGlkIHdpdGhpbiB0aGUgbG9jYWwgZmlsZVxuICogd2hlcmUgdGhlIHR5cGUgd2FzIHJlZmVyZW5jZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLkxPQ0FMO1xuXG4gIC8qKlxuICAgKiBUaGUgc3ludGhlc2l6ZWQgZXhwcmVzc2lvbiB0byByZWZlcmVuY2UgdGhlIHR5cGUgaW4gYSB2YWx1ZSBwb3NpdGlvbi5cbiAgICovXG4gIGV4cHJlc3Npb246IHRzLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0eXBlIG9yaWdpbmF0ZXMgZnJvbSBhIGRlZmF1bHQgaW1wb3J0LCB0aGUgaW1wb3J0IHN0YXRlbWVudCBpcyBjYXB0dXJlZCBoZXJlIHRvIGJlIGFibGVcbiAgICogdG8gdHJhY2sgaXRzIHVzYWdlcywgcHJldmVudGluZyB0aGUgaW1wb3J0IGZyb20gYmVpbmcgZWxpZGVkIGlmIGl0IHdhcyBvcmlnaW5hbGx5IG9ubHkgdXNlZCBpblxuICAgKiBhIHR5cGUtcG9zaXRpb24uIFNlZSBgRGVmYXVsdEltcG9ydFRyYWNrZXJgIGZvciBkZXRhaWxzLlxuICAgKi9cbiAgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogdHMuSW1wb3J0RGVjbGFyYXRpb258bnVsbDtcbn1cblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0aGF0IHJlZmVycyB0byBhIHR5cGUgdGhhdCB3YXMgaW1wb3J0ZWQsIGFuZCBnaXZlcyB0aGUgc3ltYm9sIGBuYW1lYCBhbmQgdGhlXG4gKiBgbW9kdWxlTmFtZWAgb2YgdGhlIGltcG9ydC4gTm90ZSB0aGF0IHRoaXMgYG1vZHVsZU5hbWVgIG1heSBiZSBhIHJlbGF0aXZlIHBhdGgsIGFuZCB0aHVzIGlzXG4gKiBsaWtlbHkgb25seSB2YWxpZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpbGUgd2hpY2ggY29udGFpbmVkIHRoZSBvcmlnaW5hbCB0eXBlIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRlZFR5cGVWYWx1ZVJlZmVyZW5jZSB7XG4gIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuSU1QT1JURUQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2R1bGUgc3BlY2lmaWVyIGZyb20gd2hpY2ggdGhlIGBpbXBvcnRlZE5hbWVgIHN5bWJvbCBzaG91bGQgYmUgaW1wb3J0ZWQuXG4gICAqL1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgc3ltYm9sIHRoYXQgaXMgaW1wb3J0ZWQgZnJvbSBgbW9kdWxlTmFtZWAuIElmIGBuZXN0ZWRQYXRoYCBpcyBhbHNvXG4gICAqIHByZXNlbnQsIGEgbmVzdGVkIG9iamVjdCBpcyBiZWluZyByZWZlcmVuY2VkIGZyb20gdGhlIHRvcC1sZXZlbCBzeW1ib2wuXG4gICAqL1xuICBpbXBvcnRlZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgcHJlc2VudCwgcmVwcmVzZW50cyB0aGUgc3ltYm9sIG5hbWVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgdG9wLWxldmVsIGltcG9ydC5cbiAgICogV2hlbiBgbnVsbGAgb3IgZW1wdHksIHRoZSBgaW1wb3J0ZWROYW1lYCBpdHNlbGYgaXMgdGhlIHN5bWJvbCBiZWluZyByZWZlcmVuY2VkLlxuICAgKi9cbiAgbmVzdGVkUGF0aDogc3RyaW5nW118bnVsbDtcblxuICB2YWx1ZURlY2xhcmF0aW9uOiBEZWNsYXJhdGlvbk5vZGU7XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBmb3IgYSB0eXBlIHZhbHVlIHJlZmVyZW5jZSB0aGF0IGlzIHVzZWQgd2hlbiBubyB2YWx1ZSBpcyBhdmFpbGFibGUuIFRoaXMgY2FuXG4gKiBvY2N1ciBkdWUgdG8gdmFyaW91cyByZWFzb25zLCB3aGljaCBpcyBpbmRpY2F0ZWQgaW4gdGhlIGByZWFzb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuYXZhaWxhYmxlVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5VTkFWQUlMQUJMRTtcblxuICAvKipcbiAgICogVGhlIHJlYXNvbiB3aHkgbm8gdmFsdWUgcmVmZXJlbmNlIGNvdWxkIGJlIGRldGVybWluZWQgZm9yIGEgdHlwZS5cbiAgICovXG4gIHJlYXNvbjogVW5hdmFpbGFibGVWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgdmFyaW91cyByZWFzb25zIHdoeSB0aGUgY29tcGlsZXIgbWF5IGJlIHVuYWJsZSB0byBzeW50aGVzaXplIGEgdmFsdWUgZnJvbSBhIHR5cGUgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgY29uc3QgZW51bSBWYWx1ZVVuYXZhaWxhYmxlS2luZCB7XG4gIC8qKlxuICAgKiBObyB0eXBlIG5vZGUgd2FzIGF2YWlsYWJsZS5cbiAgICovXG4gIE1JU1NJTkdfVFlQRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGRlY2xhcmF0aW9uLCBlLmcuIGFuIGludGVyZmFjZS5cbiAgICovXG4gIE5PX1ZBTFVFX0RFQ0xBUkFUSU9OLFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBpcyBpbXBvcnRlZCB1c2luZyBhIHR5cGUtb25seSBpbXBvcnRzLCBzbyBpdCBpcyBub3Qgc3VpdGFibGUgdG8gYmUgdXNlZCBpbiBhXG4gICAqIHZhbHVlLXBvc2l0aW9uLlxuICAgKi9cbiAgVFlQRV9PTkxZX0lNUE9SVCxcblxuICAvKipcbiAgICogVGhlIHR5cGUgcmVmZXJlbmNlIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgVU5LTk9XTl9SRUZFUkVOQ0UsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGNvcnJlc3BvbmRzIHdpdGggYSBuYW1lc3BhY2UuXG4gICAqL1xuICBOQU1FU1BBQ0UsXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGNvbXBpbGVyLCBmb3IgZXhhbXBsZSB1bmlvbiB0eXBlcy5cbiAgICovXG4gIFVOU1VQUE9SVEVELFxufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdXBwb3J0ZWRUeXBlIHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVU5TVVBQT1JURUQ7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb1ZhbHVlRGVjbGFyYXRpb24ge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5OT19WQUxVRV9ERUNMQVJBVElPTjtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBkZWNsOiB0cy5EZWNsYXJhdGlvbnxudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVPbmx5SW1wb3J0IHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVFlQRV9PTkxZX0lNUE9SVDtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBpbXBvcnRDbGF1c2U6IHRzLkltcG9ydENsYXVzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VJbXBvcnQge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5OQU1FU1BBQ0U7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbiAgaW1wb3J0Q2xhdXNlOiB0cy5JbXBvcnRDbGF1c2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5rbm93blJlZmVyZW5jZSB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLlVOS05PV05fUkVGRVJFTkNFO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlzc2luZ1R5cGUge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5NSVNTSU5HX1RZUEU7XG59XG5cbi8qKlxuICogVGhlIHZhcmlvdXMgcmVhc29ucyB3aHkgYSB0eXBlIG5vZGUgbWF5IG5vdCBiZSByZWZlcnJlZCB0byBhcyBhIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBVbmF2YWlsYWJsZVZhbHVlID1cbiAgICBVbnN1cHBvcnRlZFR5cGV8Tm9WYWx1ZURlY2xhcmF0aW9ufFR5cGVPbmx5SW1wb3J0fE5hbWVzcGFjZUltcG9ydHxVbmtub3duUmVmZXJlbmNlfE1pc3NpbmdUeXBlO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGEgdmFsdWUgdGhhdCBvcmlnaW5hdGVkIGZyb20gYSB0eXBlIHBvc2l0aW9uLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBjb3VsZCBiZSBkZWNsYXJlZCBhcyBgZm9vOiBGb29gLiBBIGBUeXBlVmFsdWVSZWZlcmVuY2VgXG4gKiBleHRyYWN0ZWQgZnJvbSB0aGlzIHdvdWxkIHJlZmVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgY2xhc3MgYEZvb2AgKGFzc3VtaW5nIGl0IHdhcyBhY3R1YWxseSBhXG4gKiB0eXBlKS5cbiAqXG4gKiBTZWUgdGhlIGluZGl2aWR1YWwgdHlwZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFR5cGVWYWx1ZVJlZmVyZW5jZSA9XG4gICAgTG9jYWxUeXBlVmFsdWVSZWZlcmVuY2V8SW1wb3J0ZWRUeXBlVmFsdWVSZWZlcmVuY2V8VW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2U7XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdG9yUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBTb21lIHBhcmFtZXRlcnMgZG9uJ3QgaGF2ZSBhIHNpbXBsZSBzdHJpbmcgbmFtZSAoZm9yIGV4YW1wbGUsIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGRlc3RydWN0dXJlZFxuICAgKiBpbnRvIG11bHRpcGxlIHZhcmlhYmxlcykuIEluIHRoZXNlIGNhc2VzLCBgbmFtZWAgY2FuIGJlIGBudWxsYC5cbiAgICovXG4gIG5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5CaW5kaW5nTmFtZWAgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIFRoZSBgbmFtZU5vZGVgIGlzIHVzZWZ1bCBpbiB3cml0aW5nIHJlZmVyZW5jZXMgdG8gdGhpcyBtZW1iZXIgdGhhdCB3aWxsIGJlIGNvcnJlY3RseSBzb3VyY2UtXG4gICAqIG1hcHBlZCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxlLlxuICAgKi9cbiAgbmFtZU5vZGU6IHRzLkJpbmRpbmdOYW1lO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIncyB0eXBlIGFubm90YXRpb24sIGlmIGl0J3MgcG9zc2libGUgdG8gcmVmZXIgdG8gdGhlXG4gICAqIHBhcmFtZXRlcidzIHR5cGUgYXMgYSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBjYW4gZWl0aGVyIGJlIGEgcmVmZXJlbmNlIHRvIGEgbG9jYWwgdmFsdWUsIGEgcmVmZXJlbmNlIHRvIGFuIGltcG9ydGVkIHZhbHVlLCBvciBub1xuICAgKiB2YWx1ZSBpZiBubyBpcyBwcmVzZW50IG9yIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhbiBleHByZXNzaW9uLlxuICAgKi9cbiAgdHlwZVZhbHVlUmVmZXJlbmNlOiBUeXBlVmFsdWVSZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLlR5cGVOb2RlYCByZXByZXNlbnRpbmcgdGhlIHR5cGUgbm9kZSBmb3VuZCBpbiB0aGUgdHlwZSBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhpcyBmaWVsZCBjYW4gYmUgdXNlZCBmb3IgZGlhZ25vc3RpY3MgcmVwb3J0aW5nIGlmIGB0eXBlVmFsdWVSZWZlcmVuY2VgIGlzIGBudWxsYC5cbiAgICpcbiAgICogQ2FuIGJlIG51bGwsIGlmIHRoZSBwYXJhbSBoYXMgbm8gdHlwZSBkZWNsYXJlZC5cbiAgICovXG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZXxudWxsO1xuXG4gIC8qKlxuICAgKiBBbnkgYERlY29yYXRvcmBzIHdoaWNoIGFyZSBwcmVzZW50IG9uIHRoZSBwYXJhbWV0ZXIsIG9yIGBudWxsYCBpZiBub25lIGFyZSBwcmVzZW50LlxuICAgKi9cbiAgZGVjb3JhdG9yczogRGVjb3JhdG9yW118bnVsbDtcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kLCBpbmNsdWRpbmcgaXRzIGJvZHkgaWYgcHJlc2VudCBhbmQgYW55IHBhcmFtZXRlcnMuXG4gKlxuICogSW4gVHlwZVNjcmlwdCBjb2RlIHRoaXMgbWV0YWRhdGEgd2lsbCBiZSBhIHNpbXBsZSByZWZsZWN0aW9uIG9mIHRoZSBkZWNsYXJhdGlvbnMgaW4gdGhlIG5vZGVcbiAqIGl0c2VsZi4gSW4gRVM1IGNvZGUgdGhpcyBjYW4gYmUgbW9yZSBjb21wbGljYXRlZCwgYXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIG1heVxuICogYmUgZXh0cmFjdGVkIGZyb20gY2VydGFpbiBib2R5IHN0YXRlbWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25EZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdoaWNoIGRlY2xhcmVzIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIG5vZGU6IHRzLk1ldGhvZERlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRGVjbGFyYXRpb258dHMuRnVuY3Rpb25FeHByZXNzaW9ufHRzLlZhcmlhYmxlRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudHMgb2YgdGhlIGZ1bmN0aW9uIGJvZHksIGlmIGEgYm9keSBpcyBwcmVzZW50LCBvciBudWxsIGlmIG5vIGJvZHkgaXMgcHJlc2VudCBvciB0aGVcbiAgICogZnVuY3Rpb24gaXMgaWRlbnRpZmllZCB0byByZXByZXNlbnQgYSB0c2xpYiBoZWxwZXIgZnVuY3Rpb24sIGluIHdoaWNoIGNhc2UgYGhlbHBlcmAgd2lsbFxuICAgKiBpbmRpY2F0ZSB3aGljaCBoZWxwZXIgdGhpcyBmdW5jdGlvbiByZXByZXNlbnRzLlxuICAgKlxuICAgKiBUaGlzIGxpc3QgbWF5IGhhdmUgYmVlbiBmaWx0ZXJlZCB0byBleGNsdWRlIHN0YXRlbWVudHMgd2hpY2ggcGVyZm9ybSBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZVxuICAgKiBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIGJvZHk6IHRzLlN0YXRlbWVudFtdfG51bGw7XG5cbiAgLyoqXG4gICAqIE1ldGFkYXRhIHJlZ2FyZGluZyB0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgcG9zc2libGUgZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9ucy5cbiAgICovXG4gIHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdO1xufVxuXG4vKipcbiAqIFBvc3NpYmxlIGRlY2xhcmF0aW9ucyBvZiBrbm93biB2YWx1ZXMsIHN1Y2ggYXMgYnVpbHQtaW4gb2JqZWN0cy9mdW5jdGlvbnMgb3IgVHlwZVNjcmlwdCBoZWxwZXJzLlxuICovXG5leHBvcnQgZW51bSBLbm93bkRlY2xhcmF0aW9uIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgSmF2YVNjcmlwdCBnbG9iYWwgYE9iamVjdGAgY2xhc3MuXG4gICAqL1xuICBKc0dsb2JhbE9iamVjdCxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19hc3NpZ25gIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJBc3NpZ24sXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fc3ByZWFkYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZEFycmF5c2AgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclNwcmVhZEFycmF5cyxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19zcHJlYWRBcnJheWAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclNwcmVhZEFycmF5LFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3JlYWRgIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJSZWFkLFxufVxuXG4vKipcbiAqIEEgcGFyYW1ldGVyIHRvIGEgZnVuY3Rpb24gb3IgbWV0aG9kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlciB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwYXJhbWV0ZXIsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIG5hbWU6IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBEZWNsYXJhdGlvbiB3aGljaCBjcmVhdGVkIHRoaXMgcGFyYW1ldGVyLlxuICAgKi9cbiAgbm9kZTogdHMuUGFyYW1ldGVyRGVjbGFyYXRpb247XG5cbiAgLyoqXG4gICAqIEV4cHJlc3Npb24gd2hpY2ggcmVwcmVzZW50cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhbnkuXG4gICAqL1xuICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbnxudWxsO1xufVxuXG4vKipcbiAqIFRoZSBzb3VyY2Ugb2YgYW4gaW1wb3J0ZWQgc3ltYm9sLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHN5bWJvbCBuYW1lIGFuZCB0aGUgbW9kdWxlIGZyb20gd2hpY2ggaXRcbiAqIHdhcyBpbXBvcnRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbXBvcnQge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltcG9ydGVkIHN5bWJvbCB1bmRlciB3aGljaCBpdCB3YXMgZXhwb3J0ZWQgKG5vdCBpbXBvcnRlZCkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2R1bGUgZnJvbSB3aGljaCB0aGUgc3ltYm9sIHdhcyBpbXBvcnRlZC5cbiAgICpcbiAgICogVGhpcyBjb3VsZCBlaXRoZXIgYmUgYW4gYWJzb2x1dGUgbW9kdWxlIG5hbWUgKEBhbmd1bGFyL2NvcmUgZm9yIGV4YW1wbGUpIG9yIGEgcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIGZyb206IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBlbnVtIG1lbWJlciBleHRyYWN0ZWQgZnJvbSBKYXZhU2NyaXB0IHdoZW4gbm8gYHRzLkVudW1EZWNsYXJhdGlvbmAgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudW1NZW1iZXIge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVudW0gbWVtYmVyLlxuICAgKi9cbiAgbmFtZTogdHMuUHJvcGVydHlOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBvZiB0aGUgZW51bSBtZW1iZXIuIFVubGlrZSBpbiBUeXBlU2NyaXB0LCB0aGlzIGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICogaW4gZW1pdHRlZCBKYXZhU2NyaXB0LlxuICAgKi9cbiAgaW5pdGlhbGl6ZXI6IHRzLkV4cHJlc3Npb247XG59XG5cbi8qKlxuICogQSB0eXBlIHRoYXQgaXMgdXNlZCB0byBpZGVudGlmeSBhIGRlY2xhcmF0aW9uLlxuICpcbiAqIERlY2xhcmF0aW9ucyBhcmUgbm9ybWFsbHkgYHRzLkRlY2xhcmF0aW9uYCB0eXBlcyBzdWNoIGFzIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgY2xhc3NcbiAqIGRlY2xhcmF0aW9ucywgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGV0Yy5cbiAqIEJ1dCBpbiBzb21lIGNhc2VzIHRoZXJlIGlzIG5vIGB0cy5EZWNsYXJhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYSBkZWNsYXJhdGlvbiwgc3VjaFxuICogYXMgd2hlbiB0aGV5IGFyZSBkZWNsYXJlZCBpbmxpbmUgYXMgcGFydCBvZiBhbiBleHBvcnRlZCBleHByZXNzaW9uLiBUaGVuIHdlIG11c3QgdXNlIGFcbiAqIGB0cy5FeHByZXNzaW9uYCBhcyB0aGUgZGVjbGFyYXRpb24uXG4gKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgYGV4cG9ydHMuc29tZVZhciA9IDQyYCB3aGVyZSB0aGUgZGVjbGFyYXRpb24gZXhwcmVzc2lvbiB3b3VsZCBiZVxuICogYGV4cG9ydHMuc29tZVZhcmAuXG4gKi9cbmV4cG9ydCB0eXBlIERlY2xhcmF0aW9uTm9kZSA9IHRzLkRlY2xhcmF0aW9ufHRzLkV4cHJlc3Npb247XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSBEZWNsYXJhdGlvbiAtIHdoZXRoZXIgaXRzIG5vZGUgaXMgY29uY3JldGUgKHRzLkRlY2xhcmF0aW9uKSBvciBpbmxpbmVcbiAqICh0cy5FeHByZXNzaW9uKS4gU2VlIGBDb25jcmV0ZURlY2xhcmF0aW9uYCwgYElubGluZURlY2xhcmF0aW9uYCBhbmQgYERlY2xhcmF0aW9uTm9kZWAgZm9yIG1vcmVcbiAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIERlY2xhcmF0aW9uS2luZCB7XG4gIENvbmNyZXRlLFxuICBJbmxpbmUsXG59XG5cbi8qKlxuICogQmFzZSB0eXBlIGZvciBhbGwgYERlY2xhcmF0aW9uYHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURlY2xhcmF0aW9uPFQgZXh0ZW5kcyBEZWNsYXJhdGlvbk5vZGU+IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIGBub2RlYC5cbiAgICovXG4gIGtpbmQ6IERlY2xhcmF0aW9uS2luZDtcblxuICAvKipcbiAgICogVGhlIGFic29sdXRlIG1vZHVsZSBwYXRoIGZyb20gd2hpY2ggdGhlIHN5bWJvbCB3YXMgaW1wb3J0ZWQgaW50byB0aGUgYXBwbGljYXRpb24sIGlmIHRoZSBzeW1ib2xcbiAgICogd2FzIGltcG9ydGVkIHZpYSBhbiBhYnNvbHV0ZSBtb2R1bGUgKGV2ZW4gdGhyb3VnaCBhIGNoYWluIG9mIHJlLWV4cG9ydHMpLiBJZiB0aGUgc3ltYm9sIGlzIHBhcnRcbiAgICogb2YgdGhlIGFwcGxpY2F0aW9uIGFuZCB3YXMgbm90IGltcG9ydGVkIGZyb20gYW4gYWJzb2x1dGUgcGF0aCwgdGhpcyB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHZpYU1vZHVsZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBkZWNsYXJhdGlvbiBpdHNlbGYsIGlmIG9uZSBleGlzdHMuXG4gICAqL1xuICBub2RlOiBUO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQsIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUga25vd24gZGVjbGFyYXRpb24gdGhpcyBkZWNsYXJhdGlvbiByZXNvbHZlcyB0by5cbiAgICovXG4gIGtub3duOiBLbm93bkRlY2xhcmF0aW9ufG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBgZGVjbGAgaXMgYSBgQ29uY3JldGVEZWNsYXJhdGlvbmAgKGllLiB0aGF0IGl0cyBgbm9kZWAgcHJvcGVydHkgaXMgYVxuICogYHRzLkRlY2xhcmF0aW9uYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmNyZXRlRGVjbGFyYXRpb24oZGVjbDogRGVjbGFyYXRpb24pOiBkZWNsIGlzIENvbmNyZXRlRGVjbGFyYXRpb24ge1xuICByZXR1cm4gZGVjbC5raW5kID09PSBEZWNsYXJhdGlvbktpbmQuQ29uY3JldGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uY3JldGVEZWNsYXJhdGlvbjxUIGV4dGVuZHMgdHMuRGVjbGFyYXRpb24gPSB0cy5EZWNsYXJhdGlvbj4gZXh0ZW5kc1xuICAgIEJhc2VEZWNsYXJhdGlvbjxUPiB7XG4gIGtpbmQ6IERlY2xhcmF0aW9uS2luZC5Db25jcmV0ZTtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSByZXByZXNlbnRzIGEgc3BlY2lhbCBpZGVudGl0eSBvZiB0aGUgZGVjbGFyYXRpb24sIG9yIGBudWxsYCBpZiB0aGUgZGVjbGFyYXRpb25cbiAgICogZG9lcyBub3QgaGF2ZSBhIHNwZWNpYWwgaWRlbnRpdHkuXG4gICAqL1xuICBpZGVudGl0eTogU3BlY2lhbERlY2xhcmF0aW9uSWRlbnRpdHl8bnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgU3BlY2lhbERlY2xhcmF0aW9uSWRlbnRpdHkgPSBEb3dubGV2ZWxlZEVudW07XG5cbmV4cG9ydCBjb25zdCBlbnVtIFNwZWNpYWxEZWNsYXJhdGlvbktpbmQge1xuICBEb3dubGV2ZWxlZEVudW0sXG59XG5cbi8qKlxuICogQSBzcGVjaWFsIGRlY2xhcmF0aW9uIGlkZW50aXR5IHRoYXQgcmVwcmVzZW50cyBhbiBlbnVtLiBUaGlzIGlzIHVzZWQgaW4gZG93bmxldmVsZWQgZm9ybXMgd2hlcmVcbiAqIGEgYHRzLkVudW1EZWNsYXJhdGlvbmAgaXMgZW1pdHRlZCBpbiBhbiBhbHRlcm5hdGl2ZSBmb3JtLCBlLmcuIGFuIElJRkUgY2FsbCB0aGF0IGRlY2xhcmVzIGFsbFxuICogbWVtYmVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3dubGV2ZWxlZEVudW0ge1xuICBraW5kOiBTcGVjaWFsRGVjbGFyYXRpb25LaW5kLkRvd25sZXZlbGVkRW51bTtcbiAgZW51bU1lbWJlcnM6IEVudW1NZW1iZXJbXTtcbn1cblxuLyoqXG4gKiBBIGRlY2xhcmF0aW9uIHRoYXQgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYC5cbiAqXG4gKiBUaGlzIGNhbiBvY2N1ciBpbiBzb21lIGRvd25sZXZlbGluZ3Mgd2hlbiBhbiBgZXhwb3J0IGNvbnN0IFZBUiA9IC4uLjtgIChhIGB0cy5EZWNsYXJhdGlvbmApIGlzXG4gKiB0cmFuc3BpbGVkIHRvIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IChlLmcuIGBleHBvcnRzLlZBUiA9IC4uLjtgKS4gVGhlcmUgaXMgbm8gYHRzLkRlY2xhcmF0aW9uYFxuICogYXNzb2NpYXRlZCB3aXRoIGBWQVJgIGluIHRoYXQgY2FzZSwgb25seSBhbiBleHByZXNzaW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElubGluZURlY2xhcmF0aW9uIGV4dGVuZHNcbiAgICBCYXNlRGVjbGFyYXRpb248RXhjbHVkZTxEZWNsYXJhdGlvbk5vZGUsIHRzLkRlY2xhcmF0aW9uPj4ge1xuICBraW5kOiBEZWNsYXJhdGlvbktpbmQuSW5saW5lO1xuICBpbXBsZW1lbnRhdGlvbj86IERlY2xhcmF0aW9uTm9kZTtcbn1cblxuLyoqXG4gKiBUaGUgZGVjbGFyYXRpb24gb2YgYSBzeW1ib2wsIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgaG93IGl0IHdhcyBpbXBvcnRlZCBpbnRvIHRoZVxuICogYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIERlY2xhcmF0aW9uPFQgZXh0ZW5kcyB0cy5EZWNsYXJhdGlvbiA9IHRzLkRlY2xhcmF0aW9uPiA9XG4gICAgQ29uY3JldGVEZWNsYXJhdGlvbjxUPnxJbmxpbmVEZWNsYXJhdGlvbjtcblxuLyoqXG4gKiBBYnN0cmFjdHMgcmVmbGVjdGlvbiBvcGVyYXRpb25zIG9uIGEgVHlwZVNjcmlwdCBBU1QuXG4gKlxuICogRGVwZW5kaW5nIG9uIHRoZSBmb3JtYXQgb2YgdGhlIGNvZGUgYmVpbmcgaW50ZXJwcmV0ZWQsIGRpZmZlcmVudCBjb25jZXB0cyBhcmUgcmVwcmVzZW50ZWRcbiAqIHdpdGggZGlmZmVyZW50IHN5bnRhY3RpY2FsIHN0cnVjdHVyZXMuIFRoZSBgUmVmbGVjdGlvbkhvc3RgIGFic3RyYWN0cyBvdmVyIHRob3NlIGRpZmZlcmVuY2VzIGFuZFxuICogcHJlc2VudHMgYSBzaW5nbGUgQVBJIGJ5IHdoaWNoIHRoZSBjb21waWxlciBjYW4gcXVlcnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFTVC5cbiAqXG4gKiBBbGwgb3BlcmF0aW9ucyBvbiB0aGUgYFJlZmxlY3Rpb25Ib3N0YCByZXF1aXJlIHRoZSB1c2Ugb2YgVHlwZVNjcmlwdCBgdHMuTm9kZWBzIHdpdGggYmluZGluZ1xuICogaW5mb3JtYXRpb24gYWxyZWFkeSBhdmFpbGFibGUgKHRoYXQgaXMsIG5vZGVzIHRoYXQgY29tZSBmcm9tIGEgYHRzLlByb2dyYW1gIHRoYXQgaGFzIGJlZW5cbiAqIHR5cGUtY2hlY2tlZCwgYW5kIGFyZSBub3Qgc3ludGhldGljYWxseSBjcmVhdGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZsZWN0aW9uSG9zdCB7XG4gIC8qKlxuICAgKiBFeGFtaW5lIGEgZGVjbGFyYXRpb24gKGZvciBleGFtcGxlLCBvZiBhIGNsYXNzIG9yIGZ1bmN0aW9uKSBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGFueVxuICAgKiBkZWNvcmF0b3JzIHByZXNlbnQgb24gdGhlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGVjbGFyYXRpb24gYSBUeXBlU2NyaXB0IGB0cy5EZWNsYXJhdGlvbmAgbm9kZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG9yIGZ1bmN0aW9uIG92ZXJcbiAgICogd2hpY2ggdG8gcmVmbGVjdC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnRlbnQgaXMgdG8gcmVmbGVjdCB0aGUgZGVjb3JhdG9ycyBvZiBhIGNsYXNzIGFuZCB0aGVcbiAgICogc291cmNlIGlzIGluIEVTNiBmb3JtYXQsIHRoaXMgd2lsbCBiZSBhIGB0cy5DbGFzc0RlY2xhcmF0aW9uYCBub2RlLiBJZiB0aGUgc291cmNlIGlzIGluIEVTNVxuICAgKiBmb3JtYXQsIHRoaXMgbWlnaHQgYmUgYSBgdHMuVmFyaWFibGVEZWNsYXJhdGlvbmAgYXMgY2xhc3NlcyBpbiBFUzUgYXJlIHJlcHJlc2VudGVkIGFzIHRoZVxuICAgKiByZXN1bHQgb2YgYW4gSUlGRSBleGVjdXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBEZWNvcmF0b3JgIG1ldGFkYXRhIGlmIGRlY29yYXRvcnMgYXJlIHByZXNlbnQgb24gdGhlIGRlY2xhcmF0aW9uLCBvclxuICAgKiBgbnVsbGAgaWYgZWl0aGVyIG5vIGRlY29yYXRvcnMgd2VyZSBwcmVzZW50IG9yIGlmIHRoZSBkZWNsYXJhdGlvbiBpcyBub3Qgb2YgYSBkZWNvcmF0YWJsZSB0eXBlLlxuICAgKi9cbiAgZ2V0RGVjb3JhdG9yc09mRGVjbGFyYXRpb24oZGVjbGFyYXRpb246IERlY2xhcmF0aW9uTm9kZSk6IERlY29yYXRvcltdfG51bGw7XG5cbiAgLyoqXG4gICAqIEV4YW1pbmUgYSBkZWNsYXJhdGlvbiB3aGljaCBzaG91bGQgYmUgb2YgYSBjbGFzcywgYW5kIHJldHVybiBtZXRhZGF0YSBhYm91dCB0aGUgbWVtYmVycyBvZiB0aGVcbiAgICogY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYENsYXNzTWVtYmVyYCBtZXRhZGF0YSByZXByZXNlbnRpbmcgdGhlIG1lbWJlcnMgb2YgdGhlIGNsYXNzLlxuICAgKlxuICAgKiBAdGhyb3dzIGlmIGBkZWNsYXJhdGlvbmAgZG9lcyBub3QgcmVzb2x2ZSB0byBhIGNsYXNzIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgZ2V0TWVtYmVyc09mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDbGFzc01lbWJlcltdO1xuXG4gIC8qKlxuICAgKiBSZWZsZWN0IG92ZXIgdGhlIGNvbnN0cnVjdG9yIG9mIGEgY2xhc3MgYW5kIHJldHVybiBtZXRhZGF0YSBhYm91dCBpdHMgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgb25seSBsb29rcyBhdCB0aGUgY29uc3RydWN0b3Igb2YgYSBjbGFzcyBkaXJlY3RseSBhbmQgbm90IGF0IGFueSBpbmhlcml0ZWRcbiAgICogY29uc3RydWN0b3JzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBQYXJhbWV0ZXJgIG1ldGFkYXRhIHJlcHJlc2VudGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgY29uc3RydWN0b3IsIGlmXG4gICAqIGEgY29uc3RydWN0b3IgZXhpc3RzLiBJZiB0aGUgY29uc3RydWN0b3IgZXhpc3RzIGFuZCBoYXMgMCBwYXJhbWV0ZXJzLCB0aGlzIGFycmF5IHdpbGwgYmUgZW1wdHkuXG4gICAqIElmIHRoZSBjbGFzcyBoYXMgbm8gY29uc3RydWN0b3IsIHRoaXMgbWV0aG9kIHJldHVybnMgYG51bGxgLlxuICAgKi9cbiAgZ2V0Q29uc3RydWN0b3JQYXJhbWV0ZXJzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogQ3RvclBhcmFtZXRlcltdfG51bGw7XG5cbiAgLyoqXG4gICAqIFJlZmxlY3Qgb3ZlciBhIGZ1bmN0aW9uIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgaXRzIHBhcmFtZXRlcnMgYW5kIGJvZHkuXG4gICAqXG4gICAqIEZ1bmN0aW9ucyBpbiBUeXBlU2NyaXB0IGFuZCBFUzUgY29kZSBoYXZlIGRpZmZlcmVudCBBU1QgcmVwcmVzZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGFyb3VuZFxuICAgKiBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycy4gQSBUeXBlU2NyaXB0IGZ1bmN0aW9uIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBhcyB0aGUgaW5pdGlhbGl6ZXJcbiAgICogb24gdGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbiwgd2hlcmVhcyBhbiBFUzUgZnVuY3Rpb24gaGFzIGl0cyBkZWZhdWx0IHZhbHVlIHNldCBpbiBhIHN0YXRlbWVudFxuICAgKiBvZiB0aGUgZm9ybTpcbiAgICpcbiAgICogaWYgKHBhcmFtID09PSB2b2lkIDApIHsgcGFyYW0gPSAzOyB9XG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGFic3RyYWN0cyBvdmVyIHRoZXNlIGRldGFpbHMsIGFuZCBpbnRlcnByZXRzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgYm9keSB0b1xuICAgKiBleHRyYWN0IHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcyBhbmQgdGhlIFwicmVhbFwiIGJvZHkuXG4gICAqXG4gICAqIEEgY3VycmVudCBsaW1pdGF0aW9uIGlzIHRoYXQgdGhpcyBtZXRhZGF0YSBoYXMgbm8gcmVwcmVzZW50YXRpb24gZm9yIHNob3J0aGFuZCBhc3NpZ25tZW50IG9mXG4gICAqIHBhcmFtZXRlciBvYmplY3RzIGluIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBhIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCBub2RlIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhIGBGdW5jdGlvbkRlZmluaXRpb25gIGdpdmluZyBtZXRhZGF0YSBhYm91dCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi5cbiAgICovXG4gIGdldERlZmluaXRpb25PZkZ1bmN0aW9uKGZuOiB0cy5Ob2RlKTogRnVuY3Rpb25EZWZpbml0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiBhbiBpZGVudGlmaWVyIHdhcyBpbXBvcnRlZCBmcm9tIGFub3RoZXIgbW9kdWxlIGFuZCByZXR1cm4gYEltcG9ydGAgbWV0YWRhdGFcbiAgICogZGVzY3JpYmluZyBpdHMgb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgYSBUeXBlU2NyaXB0IGB0cy5JZGVudGlmZXJgIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIG1ldGFkYXRhIGFib3V0IHRoZSBgSW1wb3J0YCBpZiB0aGUgaWRlbnRpZmllciB3YXMgaW1wb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZSwgb3JcbiAgICogYG51bGxgIGlmIHRoZSBpZGVudGlmaWVyIGRvZXNuJ3QgcmVzb2x2ZSB0byBhbiBpbXBvcnQgYnV0IGluc3RlYWQgaXMgbG9jYWxseSBkZWZpbmVkLlxuICAgKi9cbiAgZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKGlkOiB0cy5JZGVudGlmaWVyKTogSW1wb3J0fG51bGw7XG5cbiAgLyoqXG4gICAqIFRyYWNlIGFuIGlkZW50aWZpZXIgdG8gaXRzIGRlY2xhcmF0aW9uLCBpZiBwb3NzaWJsZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGdpdmVuIGlkZW50aWZpZXIsIHRyYWNpbmcgYmFjayB0aHJvdWdoXG4gICAqIGltcG9ydHMgYW5kIHJlLWV4cG9ydHMgdW50aWwgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIHN0YXRlbWVudCBpcyBmb3VuZC4gQSBgRGVjbGFyYXRpb25gXG4gICAqIG9iamVjdCBpcyByZXR1cm5lZCBpZiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gaXMgZm91bmQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIElmIHRoZSBkZWNsYXJhdGlvbiBpcyBpbiBhIGRpZmZlcmVudCBtb2R1bGUsIGFuZCB0aGF0IG1vZHVsZSBpcyBpbXBvcnRlZCB2aWEgYW4gYWJzb2x1dGUgcGF0aCxcbiAgICogdGhpcyBtZXRob2QgYWxzbyByZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBpbXBvcnRlZCBtb2R1bGUuIEZvciBleGFtcGxlLCBpZiB0aGUgY29kZSBpczpcbiAgICpcbiAgICogYGBgXG4gICAqIGltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAgICpcbiAgICogZXhwb3J0IGNvbnN0IFJPVVRFUyA9IFJvdXRlck1vZHVsZS5mb3JSb290KFsuLi5dKTtcbiAgICogYGBgXG4gICAqXG4gICAqIGFuZCBpZiBgZ2V0RGVjbGFyYXRpb25PZklkZW50aWZpZXJgIGlzIGNhbGxlZCBvbiBgUm91dGVyTW9kdWxlYCBpbiB0aGUgYFJPVVRFU2AgZXhwcmVzc2lvbixcbiAgICogdGhlbiBpdCB3b3VsZCB0cmFjZSBgUm91dGVyTW9kdWxlYCB2aWEgaXRzIGltcG9ydCBmcm9tIGBAYW5ndWxhci9jb3JlYCwgYW5kIG5vdGUgdGhhdCB0aGVcbiAgICogZGVmaW5pdGlvbiB3YXMgaW1wb3J0ZWQgZnJvbSBgQGFuZ3VsYXIvY29yZWAgaW50byB0aGUgYXBwbGljYXRpb24gd2hlcmUgaXQgd2FzIHJlZmVyZW5jZWQuXG4gICAqXG4gICAqIElmIHRoZSBkZWZpbml0aW9uIGlzIHJlLWV4cG9ydGVkIHNldmVyYWwgdGltZXMgZnJvbSBkaWZmZXJlbnQgYWJzb2x1dGUgbW9kdWxlIG5hbWVzLCBvbmx5XG4gICAqIHRoZSBmaXJzdCBvbmUgKHRoZSBvbmUgYnkgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIHJlZmVycyB0byB0aGUgbW9kdWxlKSBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogVGhpcyBtb2R1bGUgbmFtZSBpcyByZXR1cm5lZCBpbiB0aGUgYHZpYU1vZHVsZWAgZmllbGQgb2YgdGhlIGBEZWNsYXJhdGlvbmAuIElmIFRoZSBkZWNsYXJhdGlvblxuICAgKiBpcyByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24gaXRzZWxmIGFuZCB0aGVyZSB3YXMgbm8gaW1wb3J0IHRocm91Z2ggYW4gYWJzb2x1dGUgcGF0aCwgdGhlblxuICAgKiBgdmlhTW9kdWxlYCBpcyBgbnVsbGAuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBhIFR5cGVTY3JpcHQgYHRzLklkZW50aWZpZXJgIHRvIHRyYWNlIGJhY2sgdG8gYSBkZWNsYXJhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGBEZWNsYXJhdGlvbmAgaWYgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIGlzIGZvdW5kLCBvciBgbnVsbGBcbiAgICogb3RoZXJ3aXNlLlxuICAgKi9cbiAgZ2V0RGVjbGFyYXRpb25PZklkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIpOiBEZWNsYXJhdGlvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBDb2xsZWN0IHRoZSBkZWNsYXJhdGlvbnMgZXhwb3J0ZWQgZnJvbSBhIG1vZHVsZSBieSBuYW1lLlxuICAgKlxuICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBleHBvcnRzIG9mIGEgbW9kdWxlIChpbmNsdWRpbmcgcmUtZXhwb3J0cykgYW5kIHJldHVybnMgYSBtYXAgb2YgZXhwb3J0XG4gICAqIG5hbWUgdG8gaXRzIGBEZWNsYXJhdGlvbmAuIElmIGFuIGV4cG9ydGVkIHZhbHVlIGlzIGl0c2VsZiByZS1leHBvcnRlZCBmcm9tIGFub3RoZXIgbW9kdWxlLFxuICAgKiB0aGUgYERlY2xhcmF0aW9uYCdzIGB2aWFNb2R1bGVgIHdpbGwgcmVmbGVjdCB0aGF0LlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBhIFR5cGVTY3JpcHQgYHRzLk5vZGVgIHJlcHJlc2VudGluZyB0aGUgbW9kdWxlIChmb3IgZXhhbXBsZSBhIGB0cy5Tb3VyY2VGaWxlYCkgZm9yXG4gICAqIHdoaWNoIHRvIGNvbGxlY3QgZXhwb3J0cy5cbiAgICpcbiAgICogQHJldHVybnMgYSBtYXAgb2YgYERlY2xhcmF0aW9uYHMgZm9yIHRoZSBtb2R1bGUncyBleHBvcnRzLCBieSBuYW1lLlxuICAgKi9cbiAgZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZTogdHMuTm9kZSk6IE1hcDxzdHJpbmcsIERlY2xhcmF0aW9uPnxudWxsO1xuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGFjdHVhbGx5IHJlcHJlc2VudHMgYSBjbGFzcy5cbiAgICovXG4gIGlzQ2xhc3Mobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgQ2xhc3NEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBkZWNsYXJhdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGEgY2xhc3MsIGhhcyBhIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICovXG4gIGhhc0Jhc2VDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEdldCBhbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgYmFzZSBjbGFzcyAoaWYgYW55KSBvZiB0aGUgZ2l2ZW4gYGNsYXp6YC5cbiAgICpcbiAgICogVGhpcyBleHByZXNzaW9uIGlzIG1vc3QgY29tbW9ubHkgYW4gSWRlbnRpZmllciwgYnV0IGlzIHBvc3NpYmxlIHRvIGluaGVyaXQgZnJvbSBhIG1vcmUgZHluYW1pY1xuICAgKiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogdGhlIGNsYXNzIHdob3NlIGJhc2Ugd2Ugd2FudCB0byBnZXQuXG4gICAqL1xuICBnZXRCYXNlQ2xhc3NFeHByZXNzaW9uKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogdHMuRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiBnZW5lcmljIHR5cGUgcGFyYW1ldGVycyBvZiBhIGdpdmVuIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhenogYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBjbGFzcyBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBjbGFzcywgaWYga25vd24sIG9yIGBudWxsYCBpZiB0aGUgZGVjbGFyYXRpb25cbiAgICogaXMgbm90IGEgY2xhc3Mgb3IgaGFzIGFuIHVua25vd24gbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycy5cbiAgICovXG4gIGdldEdlbmVyaWNBcml0eU9mQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBudW1iZXJ8bnVsbDtcblxuICAvKipcbiAgICogRmluZCB0aGUgYXNzaWduZWQgdmFsdWUgb2YgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbi5cbiAgICpcbiAgICogTm9ybWFsbHkgdGhpcyB3aWxsIGJlIHRoZSBpbml0aWFsaXplciBvZiB0aGUgZGVjbGFyYXRpb24sIGJ1dCB3aGVyZSB0aGUgdmFyaWFibGUgaXNcbiAgICogbm90IGEgYGNvbnN0YCB3ZSBtYXkgbmVlZCB0byBsb29rIGVsc2V3aGVyZSBmb3IgdGhlIHZhcmlhYmxlJ3MgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSBkZWNsYXJhdGlvbiBhIFR5cGVTY3JpcHQgdmFyaWFibGUgZGVjbGFyYXRpb24sIHdob3NlIHZhbHVlIHdlIHdhbnQuXG4gICAqIEByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGFzIGEgVHlwZVNjcmlwdCBleHByZXNzaW9uIG5vZGUsIG9yIGB1bmRlZmluZWRgXG4gICAqIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29tcHV0ZWQuXG4gICAqL1xuICBnZXRWYXJpYWJsZVZhbHVlKGRlY2xhcmF0aW9uOiB0cy5WYXJpYWJsZURlY2xhcmF0aW9uKTogdHMuRXhwcmVzc2lvbnxudWxsO1xuXG4gIC8qKlxuICAgKiBUYWtlIGFuIGV4cG9ydGVkIGRlY2xhcmF0aW9uIChtYXliZSBhIGNsYXNzIGRvd24tbGV2ZWxlZCB0byBhIHZhcmlhYmxlKSBhbmQgbG9vayB1cCB0aGVcbiAgICogZGVjbGFyYXRpb24gb2YgaXRzIHR5cGUgaW4gYSBzZXBhcmF0ZSAuZC50cyB0cmVlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGBudWxsYCBpZiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IGRvZXMgbm90IGhhdmUgYVxuICAgKiBzZXBhcmF0ZSAuZC50cyB0cmVlLiBXaGVuIGNvbXBpbGluZyBUeXBlU2NyaXB0IGNvZGUgdGhpcyBpcyBhbHdheXMgdGhlIGNhc2UsIHNpbmNlIC5kLnRzIGZpbGVzXG4gICAqIGFyZSBwcm9kdWNlZCBvbmx5IGR1cmluZyB0aGUgZW1pdCBvZiBzdWNoIGEgY29tcGlsYXRpb24uIFdoZW4gY29tcGlsaW5nIC5qcyBjb2RlLCBob3dldmVyLFxuICAgKiB0aGVyZSBpcyBmcmVxdWVudGx5IGEgcGFyYWxsZWwgLmQudHMgdHJlZSB3aGljaCB0aGlzIG1ldGhvZCBleHBvc2VzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGB0cy5EZWNsYXJhdGlvbmAgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgZnJvbSB0aGUgc2FtZVxuICAgKiBgdHMuUHJvZ3JhbWAgYXMgdGhlIGlucHV0IGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgZ2V0RHRzRGVjbGFyYXRpb24oZGVjbGFyYXRpb246IERlY2xhcmF0aW9uTm9kZSk6IHRzLkRlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBhIGB0cy5JZGVudGlmaWVyYCBmb3IgYSBnaXZlbiBgQ2xhc3NEZWNsYXJhdGlvbmAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAqIHdpdGhpbiBpdHMgZGVmaW5pdGlvbiAoc3VjaCBhcyBpbiBzdGF0aWMgZmllbGRzKS5cbiAgICpcbiAgICogVGhpcyBjYW4gZGlmZmVyIGZyb20gYGNsYXp6Lm5hbWVgIHdoZW4gbmdjYyBydW5zIG92ZXIgRVM1IGNvZGUsIHNpbmNlIHRoZSBjbGFzcyBtYXkgaGF2ZSBhXG4gICAqIGRpZmZlcmVudCBuYW1lIHdpdGhpbiBpdHMgSUlGRSB3cmFwcGVyIHRoYW4gaXQgZG9lcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIEdldCBhIGB0cy5JZGVudGlmaWVyYCBmb3IgYSBnaXZlbiBgQ2xhc3NEZWNsYXJhdGlvbmAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGNsYXNzXG4gICAqIGZyb20gc3RhdGVtZW50cyB0aGF0IGFyZSBcImFkamFjZW50XCIsIGFuZCBjb25jZXB0dWFsbHkgdGlnaHRseSBib3VuZCwgdG8gdGhlIGNsYXNzIGJ1dCBub3RcbiAgICogYWN0dWFsbHkgaW5zaWRlIGl0LlxuICAgKlxuICAgKiBTaW1pbGFyIHRvIGBnZXRJbnRlcm5hbE5hbWVPZkNsYXNzKClgLCB0aGlzIG5hbWUgY2FuIGRpZmZlciBmcm9tIGBjbGF6ei5uYW1lYCB3aGVuIG5nY2MgcnVuc1xuICAgKiBvdmVyIEVTNSBjb2RlLCBzaW5jZSB0aGVzZSBcImFkamFjZW50XCIgc3RhdGVtZW50cyBuZWVkIHRvIGV4aXN0IGluIHRoZSBJSUZFIHdoZXJlIHRoZSBjbGFzcyBtYXlcbiAgICogaGF2ZSBhIGRpZmZlcmVudCBuYW1lIHRoYW4gaXQgZG9lcyBleHRlcm5hbGx5LlxuICAgKi9cbiAgZ2V0QWRqYWNlbnROYW1lT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgY2xhc3MgaXMgZXhwb3J0ZWQgZnJvbSB0aGUgbW9kdWxlIGluIHdoaWNoIGl0J3MgZGVmaW5lZC5cbiAgICpcbiAgICogTm90IGFsbCBtZWNoYW5pc21zIGJ5IHdoaWNoIGEgY2xhc3MgaXMgZXhwb3J0ZWQgY2FuIGJlIHN0YXRpY2FsbHkgZGV0ZWN0ZWQsIGVzcGVjaWFsbHkgd2hlblxuICAgKiBwcm9jZXNzaW5nIGFscmVhZHkgY29tcGlsZWQgSmF2YVNjcmlwdC4gQSBgZmFsc2VgIHJlc3VsdCBkb2VzIG5vdCBpbmRpY2F0ZSB0aGF0IHRoZSBjbGFzcyBpc1xuICAgKiBuZXZlciB2aXNpYmxlIG91dHNpZGUgaXRzIG1vZHVsZSwgb25seSB0aGF0IGl0IHdhcyBub3QgZXhwb3J0ZWQgdmlhIG9uZSBvZiB0aGUgZXhwb3J0XG4gICAqIG1lY2hhbmlzbXMgdGhhdCB0aGUgYFJlZmxlY3Rpb25Ib3N0YCBpcyBjYXBhYmxlIG9mIHN0YXRpY2FsbHkgY2hlY2tpbmcuXG4gICAqL1xuICBpc1N0YXRpY2FsbHlFeHBvcnRlZChjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IGJvb2xlYW47XG59XG4iXX0=
|