@angular/core 13.0.0-next.7 → 13.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.d.ts +599 -963
- package/esm2020/core.mjs +5 -0
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/esm2020/src/application_init.mjs +140 -0
- package/esm2020/src/application_module.mjs +135 -0
- package/esm2020/src/application_ref.mjs +738 -0
- package/{esm2015/src/application_tokens.js → esm2020/src/application_tokens.mjs} +0 -0
- package/esm2020/src/change_detection/change_detection.mjs +31 -0
- package/esm2020/src/change_detection/change_detection_util.mjs +64 -0
- package/esm2020/src/change_detection/change_detector_ref.mjs +89 -0
- package/{esm2015/src/change_detection/constants.js → esm2020/src/change_detection/constants.mjs} +0 -0
- package/esm2020/src/change_detection/differs/default_iterable_differ.mjs +666 -0
- package/{esm2015/src/change_detection/differs/default_keyvalue_differ.js → esm2020/src/change_detection/differs/default_keyvalue_differ.mjs} +0 -0
- package/{esm2015/src/change_detection/differs/iterable_differs.js → esm2020/src/change_detection/differs/iterable_differs.mjs} +0 -0
- package/{esm2015/src/change_detection/differs/keyvalue_differs.js → esm2020/src/change_detection/differs/keyvalue_differs.mjs} +0 -0
- package/{esm2015/src/change_detection/pipe_transform.js → esm2020/src/change_detection/pipe_transform.mjs} +0 -0
- package/esm2020/src/change_detection.mjs +14 -0
- package/esm2020/src/codegen_private_exports.mjs +11 -0
- package/{esm2015/src/compiler/compiler_facade.js → esm2020/src/compiler/compiler_facade.mjs} +0 -0
- package/{esm2015/src/compiler/compiler_facade_interface.js → esm2020/src/compiler/compiler_facade_interface.mjs} +1 -1
- package/esm2020/src/console.mjs +26 -0
- package/esm2020/src/core.mjs +52 -0
- package/esm2020/src/core_private_export.mjs +34 -0
- package/esm2020/src/core_render3_private_export.mjs +46 -0
- package/esm2020/src/debug/debug_node.mjs +625 -0
- package/{esm2015/src/debug/proxy.js → esm2020/src/debug/proxy.mjs} +0 -0
- package/{esm2015/src/di/forward_ref.js → esm2020/src/di/forward_ref.mjs} +0 -0
- package/{esm2015/src/di/index.js → esm2020/src/di/index.mjs} +0 -0
- package/{esm2015/src/di/inject_switch.js → esm2020/src/di/inject_switch.mjs} +0 -0
- package/esm2020/src/di/injectable.mjs +27 -0
- package/esm2020/src/di/injection_token.mjs +82 -0
- package/esm2020/src/di/injector.mjs +323 -0
- package/esm2020/src/di/injector_compatibility.mjs +185 -0
- package/{esm2015/src/di/injector_marker.js → esm2020/src/di/injector_marker.mjs} +0 -0
- package/{esm2015/src/di/injector_token.js → esm2020/src/di/injector_token.mjs} +0 -0
- package/{esm2015/src/di/interface/defs.js → esm2020/src/di/interface/defs.mjs} +0 -0
- package/{esm2015/src/di/interface/injector.js → esm2020/src/di/interface/injector.mjs} +0 -0
- package/{esm2015/src/di/interface/provider.js → esm2020/src/di/interface/provider.mjs} +0 -0
- package/{esm2015/src/di/jit/environment.js → esm2020/src/di/jit/environment.mjs} +0 -0
- package/esm2020/src/di/jit/injectable.mjs +94 -0
- package/{esm2015/src/di/jit/util.js → esm2020/src/di/jit/util.mjs} +0 -0
- package/esm2020/src/di/metadata.mjs +60 -0
- package/esm2020/src/di/metadata_attr.mjs +24 -0
- package/{esm2015/src/di/null_injector.js → esm2020/src/di/null_injector.mjs} +0 -0
- package/{esm2015/src/di/provider_token.js → esm2020/src/di/provider_token.mjs} +0 -0
- package/{esm2015/src/di/r3_injector.js → esm2020/src/di/r3_injector.mjs} +0 -0
- package/{esm2015/src/di/reflective_errors.js → esm2020/src/di/reflective_errors.mjs} +0 -0
- package/{esm2015/src/di/reflective_injector.js → esm2020/src/di/reflective_injector.mjs} +0 -0
- package/{esm2015/src/di/reflective_key.js → esm2020/src/di/reflective_key.mjs} +0 -0
- package/{esm2015/src/di/reflective_provider.js → esm2020/src/di/reflective_provider.mjs} +0 -0
- package/{esm2015/src/di/scope.js → esm2020/src/di/scope.mjs} +0 -0
- package/esm2020/src/di/util.mjs +51 -0
- package/{esm2015/src/di.js → esm2020/src/di.mjs} +0 -0
- package/{esm2015/src/error_handler.js → esm2020/src/error_handler.mjs} +0 -0
- package/{esm2015/src/errors.js → esm2020/src/errors.mjs} +0 -0
- package/esm2020/src/event_emitter.mjs +53 -0
- package/esm2020/src/i18n/locale_data_api.mjs +132 -0
- package/esm2020/src/i18n/locale_en.mjs +17 -0
- package/{esm2015/src/i18n/localization.js → esm2020/src/i18n/localization.mjs} +0 -0
- package/{esm2015/src/i18n/tokens.js → esm2020/src/i18n/tokens.mjs} +6 -6
- package/{esm2015/src/interface/lifecycle_hooks.js → esm2020/src/interface/lifecycle_hooks.mjs} +0 -0
- package/{esm2015/src/interface/simple_change.js → esm2020/src/interface/simple_change.mjs} +0 -0
- package/{esm2015/src/interface/type.js → esm2020/src/interface/type.mjs} +0 -0
- package/{esm2015/src/ivy_switch.js → esm2020/src/ivy_switch.mjs} +2 -2
- package/esm2020/src/linker/compiler.mjs +136 -0
- package/{esm2015/src/linker/component_factory.js → esm2020/src/linker/component_factory.mjs} +0 -0
- package/{esm2015/src/linker/component_factory_resolver.js → esm2020/src/linker/component_factory_resolver.mjs} +0 -0
- package/esm2020/src/linker/element_ref.mjs +59 -0
- package/esm2020/src/linker/ng_module_factory.mjs +29 -0
- package/esm2020/src/linker/ng_module_factory_loader.mjs +42 -0
- package/esm2020/src/linker/ng_module_factory_loader_impl.mjs +10 -0
- package/{esm2015/src/linker/ng_module_factory_registration.js → esm2020/src/linker/ng_module_factory_registration.mjs} +2 -2
- package/{esm2015/src/linker/query_list.js → esm2020/src/linker/query_list.mjs} +0 -0
- package/{esm2015/src/linker/template_ref.js → esm2020/src/linker/template_ref.mjs} +2 -2
- package/esm2020/src/linker/view_container_ref.mjs +283 -0
- package/{esm2015/src/linker/view_ref.js → esm2020/src/linker/view_ref.mjs} +0 -0
- package/esm2020/src/linker.mjs +19 -0
- package/esm2020/src/metadata/di.mjs +108 -0
- package/esm2020/src/metadata/directives.mjs +112 -0
- package/{esm2015/src/metadata/do_boostrap.js → esm2020/src/metadata/do_boostrap.mjs} +0 -0
- package/esm2020/src/metadata/ng_module.mjs +42 -0
- package/{esm2015/src/metadata/ng_module_def.js → esm2020/src/metadata/ng_module_def.mjs} +0 -0
- package/{esm2015/src/metadata/resource_loading.js → esm2020/src/metadata/resource_loading.mjs} +0 -0
- package/{esm2015/src/metadata/schema.js → esm2020/src/metadata/schema.mjs} +0 -0
- package/{esm2015/src/metadata/view.js → esm2020/src/metadata/view.mjs} +0 -0
- package/{esm2015/src/metadata.js → esm2020/src/metadata.mjs} +0 -0
- package/{esm2015/src/platform_core_providers.js → esm2020/src/platform_core_providers.mjs} +0 -0
- package/{esm2015/src/r3_symbols.js → esm2020/src/r3_symbols.mjs} +0 -0
- package/{esm2015/src/reflection/platform_reflection_capabilities.js → esm2020/src/reflection/platform_reflection_capabilities.mjs} +0 -0
- package/{esm2015/src/reflection/reflection.js → esm2020/src/reflection/reflection.mjs} +0 -0
- package/{esm2015/src/reflection/reflection_capabilities.js → esm2020/src/reflection/reflection_capabilities.mjs} +3 -3
- package/{esm2015/src/reflection/reflector.js → esm2020/src/reflection/reflector.mjs} +0 -0
- package/{esm2015/src/reflection/types.js → esm2020/src/reflection/types.mjs} +0 -0
- package/{esm2015/src/render/api.js → esm2020/src/render/api.mjs} +2 -2
- package/{esm2015/src/render/api_flags.js → esm2020/src/render/api_flags.mjs} +0 -0
- package/{esm2015/src/render.js → esm2020/src/render.mjs} +0 -0
- package/{esm2015/src/render3/assert.js → esm2020/src/render3/assert.mjs} +0 -0
- package/{esm2015/src/render3/bindings.js → esm2020/src/render3/bindings.mjs} +0 -0
- package/{esm2015/src/render3/collect_native_nodes.js → esm2020/src/render3/collect_native_nodes.mjs} +0 -0
- package/esm2020/src/render3/component.mjs +204 -0
- package/{esm2015/src/render3/component_ref.js → esm2020/src/render3/component_ref.mjs} +2 -2
- package/{esm2015/src/render3/context_discovery.js → esm2020/src/render3/context_discovery.mjs} +0 -0
- package/{esm2015/src/render3/definition.js → esm2020/src/render3/definition.mjs} +0 -0
- package/{esm2015/src/render3/definition_factory.js → esm2020/src/render3/definition_factory.mjs} +0 -0
- package/{esm2015/src/render3/di.js → esm2020/src/render3/di.mjs} +0 -0
- package/{esm2015/src/render3/di_setup.js → esm2020/src/render3/di_setup.mjs} +0 -0
- package/{esm2015/src/render3/error_code.js → esm2020/src/render3/error_code.mjs} +0 -0
- package/{esm2015/src/render3/errors.js → esm2020/src/render3/errors.mjs} +0 -0
- package/{esm2015/src/render3/errors_di.js → esm2020/src/render3/errors_di.mjs} +0 -0
- package/{esm2015/src/render3/features/copy_definition_feature.js → esm2020/src/render3/features/copy_definition_feature.mjs} +0 -0
- package/{esm2015/src/render3/features/inherit_definition_feature.js → esm2020/src/render3/features/inherit_definition_feature.mjs} +0 -0
- package/esm2020/src/render3/features/ng_onchanges_feature.mjs +92 -0
- package/{esm2015/src/render3/features/providers_feature.js → esm2020/src/render3/features/providers_feature.mjs} +0 -0
- package/{esm2015/src/render3/fields.js → esm2020/src/render3/fields.mjs} +0 -0
- package/{esm2015/src/render3/global_utils_api.js → esm2020/src/render3/global_utils_api.mjs} +0 -0
- package/{esm2015/src/render3/hooks.js → esm2020/src/render3/hooks.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_apply.js → esm2020/src/render3/i18n/i18n_apply.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_debug.js → esm2020/src/render3/i18n/i18n_debug.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_insert_before_index.js → esm2020/src/render3/i18n/i18n_insert_before_index.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_locale_id.js → esm2020/src/render3/i18n/i18n_locale_id.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_parse.js → esm2020/src/render3/i18n/i18n_parse.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_postprocess.js → esm2020/src/render3/i18n/i18n_postprocess.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_tree_shaking.js → esm2020/src/render3/i18n/i18n_tree_shaking.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_util.js → esm2020/src/render3/i18n/i18n_util.mjs} +0 -0
- package/{esm2015/src/render3/index.js → esm2020/src/render3/index.mjs} +0 -0
- package/{esm2015/src/render3/instructions/advance.js → esm2020/src/render3/instructions/advance.mjs} +0 -0
- package/{esm2015/src/render3/instructions/all.js → esm2020/src/render3/instructions/all.mjs} +0 -0
- package/{esm2015/src/render3/instructions/attribute.js → esm2020/src/render3/instructions/attribute.mjs} +0 -0
- package/{esm2015/src/render3/instructions/attribute_interpolation.js → esm2020/src/render3/instructions/attribute_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/change_detection.js → esm2020/src/render3/instructions/change_detection.mjs} +0 -0
- package/{esm2015/src/render3/instructions/class_map_interpolation.js → esm2020/src/render3/instructions/class_map_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/di.js → esm2020/src/render3/instructions/di.mjs} +0 -0
- package/{esm2015/src/render3/instructions/di_attr.js → esm2020/src/render3/instructions/di_attr.mjs} +0 -0
- package/{esm2015/src/render3/instructions/element.js → esm2020/src/render3/instructions/element.mjs} +0 -0
- package/{esm2015/src/render3/instructions/element_container.js → esm2020/src/render3/instructions/element_container.mjs} +0 -0
- package/{esm2015/src/render3/instructions/get_current_view.js → esm2020/src/render3/instructions/get_current_view.mjs} +0 -0
- package/{esm2015/src/render3/instructions/host_property.js → esm2020/src/render3/instructions/host_property.mjs} +0 -0
- package/{esm2015/src/render3/instructions/i18n.js → esm2020/src/render3/instructions/i18n.mjs} +0 -0
- package/{esm2015/src/render3/instructions/i18n_icu_container_visitor.js → esm2020/src/render3/instructions/i18n_icu_container_visitor.mjs} +0 -0
- package/{esm2015/src/render3/instructions/interpolation.js → esm2020/src/render3/instructions/interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/listener.js → esm2020/src/render3/instructions/listener.mjs} +0 -0
- package/{esm2015/src/render3/instructions/lview_debug.js → esm2020/src/render3/instructions/lview_debug.mjs} +0 -0
- package/{esm2015/src/render3/instructions/namespace.js → esm2020/src/render3/instructions/namespace.mjs} +0 -0
- package/{esm2015/src/render3/instructions/next_context.js → esm2020/src/render3/instructions/next_context.mjs} +0 -0
- package/{esm2015/src/render3/instructions/projection.js → esm2020/src/render3/instructions/projection.mjs} +0 -0
- package/{esm2015/src/render3/instructions/property.js → esm2020/src/render3/instructions/property.mjs} +0 -0
- package/{esm2015/src/render3/instructions/property_interpolation.js → esm2020/src/render3/instructions/property_interpolation.mjs} +0 -0
- package/esm2020/src/render3/instructions/shared.mjs +1811 -0
- package/{esm2015/src/render3/instructions/storage.js → esm2020/src/render3/instructions/storage.mjs} +0 -0
- package/{esm2015/src/render3/instructions/style_map_interpolation.js → esm2020/src/render3/instructions/style_map_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/style_prop_interpolation.js → esm2020/src/render3/instructions/style_prop_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/styling.js → esm2020/src/render3/instructions/styling.mjs} +0 -0
- package/{esm2015/src/render3/instructions/template.js → esm2020/src/render3/instructions/template.mjs} +0 -0
- package/{esm2015/src/render3/instructions/text.js → esm2020/src/render3/instructions/text.mjs} +0 -0
- package/{esm2015/src/render3/instructions/text_interpolation.js → esm2020/src/render3/instructions/text_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/container.js → esm2020/src/render3/interfaces/container.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/context.js → esm2020/src/render3/interfaces/context.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/definition.js → esm2020/src/render3/interfaces/definition.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/document.js → esm2020/src/render3/interfaces/document.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/i18n.js → esm2020/src/render3/interfaces/i18n.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/injector.js → esm2020/src/render3/interfaces/injector.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/node.js → esm2020/src/render3/interfaces/node.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/player.js → esm2020/src/render3/interfaces/player.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/projection.js → esm2020/src/render3/interfaces/projection.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/public_definitions.js → esm2020/src/render3/interfaces/public_definitions.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/query.js → esm2020/src/render3/interfaces/query.mjs} +0 -0
- package/esm2020/src/render3/interfaces/renderer.mjs +27 -0
- package/{esm2015/src/render3/interfaces/renderer_dom.js → esm2020/src/render3/interfaces/renderer_dom.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/sanitization.js → esm2020/src/render3/interfaces/sanitization.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/styling.js → esm2020/src/render3/interfaces/styling.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/type_checks.js → esm2020/src/render3/interfaces/type_checks.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/view.js → esm2020/src/render3/interfaces/view.mjs} +0 -0
- package/esm2020/src/render3/jit/directive.mjs +325 -0
- package/esm2020/src/render3/jit/environment.mjs +165 -0
- package/{esm2015/src/render3/jit/jit_options.js → esm2020/src/render3/jit/jit_options.mjs} +0 -0
- package/{esm2015/src/render3/jit/module.js → esm2020/src/render3/jit/module.mjs} +0 -0
- package/esm2020/src/render3/jit/partial.mjs +104 -0
- package/{esm2015/src/render3/jit/pipe.js → esm2020/src/render3/jit/pipe.mjs} +0 -0
- package/esm2020/src/render3/metadata.mjs +49 -0
- package/{esm2015/src/render3/namespaces.js → esm2020/src/render3/namespaces.mjs} +0 -0
- package/esm2020/src/render3/ng_module_ref.mjs +122 -0
- package/{esm2015/src/render3/node_assert.js → esm2020/src/render3/node_assert.mjs} +0 -0
- package/{esm2015/src/render3/node_manipulation.js → esm2020/src/render3/node_manipulation.mjs} +0 -0
- package/{esm2015/src/render3/node_manipulation_i18n.js → esm2020/src/render3/node_manipulation_i18n.mjs} +0 -0
- package/{esm2015/src/render3/node_selector_matcher.js → esm2020/src/render3/node_selector_matcher.mjs} +0 -0
- package/esm2020/src/render3/pipe.mjs +184 -0
- package/{esm2015/src/render3/profiler.js → esm2020/src/render3/profiler.mjs} +0 -0
- package/{esm2015/src/render3/pure_function.js → esm2020/src/render3/pure_function.mjs} +0 -0
- package/{esm2015/src/render3/query.js → esm2020/src/render3/query.mjs} +0 -0
- package/{esm2015/src/render3/state.js → esm2020/src/render3/state.mjs} +0 -0
- package/{esm2015/src/render3/styling/class_differ.js → esm2020/src/render3/styling/class_differ.mjs} +0 -0
- package/{esm2015/src/render3/styling/static_styling.js → esm2020/src/render3/styling/static_styling.mjs} +0 -0
- package/{esm2015/src/render3/styling/style_binding_list.js → esm2020/src/render3/styling/style_binding_list.mjs} +0 -0
- package/{esm2015/src/render3/styling/styling_parser.js → esm2020/src/render3/styling/styling_parser.mjs} +0 -0
- package/{esm2015/src/render3/tokens.js → esm2020/src/render3/tokens.mjs} +0 -0
- package/{esm2015/src/render3/util/attrs_utils.js → esm2020/src/render3/util/attrs_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/change_detection_utils.js → esm2020/src/render3/util/change_detection_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/debug_utils.js → esm2020/src/render3/util/debug_utils.mjs} +0 -0
- package/esm2020/src/render3/util/discovery_utils.mjs +411 -0
- package/esm2020/src/render3/util/global_utils.mjs +77 -0
- package/{esm2015/src/render3/util/injector_utils.js → esm2020/src/render3/util/injector_utils.mjs} +0 -0
- package/esm2020/src/render3/util/misc_utils.mjs +61 -0
- package/{esm2015/src/render3/util/stringify_utils.js → esm2020/src/render3/util/stringify_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/view_traversal_utils.js → esm2020/src/render3/util/view_traversal_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/view_utils.js → esm2020/src/render3/util/view_utils.mjs} +0 -0
- package/{esm2015/src/render3/view_engine_compatibility_prebound.js → esm2020/src/render3/view_engine_compatibility_prebound.mjs} +1 -1
- package/{esm2015/src/render3/view_ref.js → esm2020/src/render3/view_ref.mjs} +0 -0
- package/{esm2015/src/sanitization/bypass.js → esm2020/src/sanitization/bypass.mjs} +0 -0
- package/{esm2015/src/sanitization/html_sanitizer.js → esm2020/src/sanitization/html_sanitizer.mjs} +0 -0
- package/{esm2015/src/sanitization/inert_body.js → esm2020/src/sanitization/inert_body.mjs} +3 -3
- package/{esm2015/src/sanitization/sanitization.js → esm2020/src/sanitization/sanitization.mjs} +0 -0
- package/{esm2015/src/sanitization/sanitizer.js → esm2020/src/sanitization/sanitizer.mjs} +0 -0
- package/{esm2015/src/sanitization/security.js → esm2020/src/sanitization/security.mjs} +0 -0
- package/{esm2015/src/sanitization/url_sanitizer.js → esm2020/src/sanitization/url_sanitizer.mjs} +0 -0
- package/esm2020/src/testability/testability.mjs +258 -0
- package/{esm2015/src/util/array_utils.js → esm2020/src/util/array_utils.mjs} +0 -0
- package/{esm2015/src/util/assert.js → esm2020/src/util/assert.mjs} +0 -0
- package/{esm2015/src/util/char_code.js → esm2020/src/util/char_code.mjs} +0 -0
- package/{esm2015/src/util/closure.js → esm2020/src/util/closure.mjs} +0 -0
- package/{esm2015/src/util/comparison.js → esm2020/src/util/comparison.mjs} +0 -0
- package/{esm2015/src/util/decorators.js → esm2020/src/util/decorators.mjs} +0 -0
- package/{esm2015/src/util/dom.js → esm2020/src/util/dom.mjs} +0 -0
- package/{esm2015/src/util/empty.js → esm2020/src/util/empty.mjs} +0 -0
- package/{esm2015/src/util/errors.js → esm2020/src/util/errors.mjs} +0 -0
- package/{esm2015/src/util/global.js → esm2020/src/util/global.mjs} +0 -0
- package/{esm2015/src/util/is_dev_mode.js → esm2020/src/util/is_dev_mode.mjs} +0 -0
- package/{esm2015/src/util/iterable.js → esm2020/src/util/iterable.mjs} +0 -0
- package/{esm2015/src/util/lang.js → esm2020/src/util/lang.mjs} +0 -0
- package/{esm2015/src/util/microtask.js → esm2020/src/util/microtask.mjs} +0 -0
- package/{esm2015/src/util/named_array_type.js → esm2020/src/util/named_array_type.mjs} +0 -0
- package/{esm2015/src/util/ng_dev_mode.js → esm2020/src/util/ng_dev_mode.mjs} +0 -0
- package/{esm2015/src/util/ng_i18n_closure_mode.js → esm2020/src/util/ng_i18n_closure_mode.mjs} +0 -0
- package/{esm2015/src/util/ng_jit_mode.js → esm2020/src/util/ng_jit_mode.mjs} +0 -0
- package/{esm2015/src/util/ng_reflect.js → esm2020/src/util/ng_reflect.mjs} +0 -0
- package/{esm2015/src/util/noop.js → esm2020/src/util/noop.mjs} +0 -0
- package/{esm2015/src/util/property.js → esm2020/src/util/property.mjs} +0 -0
- package/{esm2015/src/util/raf.js → esm2020/src/util/raf.mjs} +0 -0
- package/{esm2015/src/util/security/trusted_type_defs.js → esm2020/src/util/security/trusted_type_defs.mjs} +0 -0
- package/esm2020/src/util/security/trusted_types.mjs +130 -0
- package/esm2020/src/util/security/trusted_types_bypass.mjs +83 -0
- package/{esm2015/src/util/stringify.js → esm2020/src/util/stringify.mjs} +0 -0
- package/{esm2015/src/util/symbol.js → esm2020/src/util/symbol.mjs} +0 -0
- package/{esm2015/src/version.js → esm2020/src/version.mjs} +1 -1
- package/{esm2015/src/view/element.js → esm2020/src/view/element.mjs} +0 -0
- package/{esm2015/src/view/entrypoint.js → esm2020/src/view/entrypoint.mjs} +0 -0
- package/{esm2015/src/view/errors.js → esm2020/src/view/errors.mjs} +0 -0
- package/{esm2015/src/view/index.js → esm2020/src/view/index.mjs} +2 -2
- package/{esm2015/src/view/ng_content.js → esm2020/src/view/ng_content.mjs} +0 -0
- package/{esm2015/src/view/ng_module.js → esm2020/src/view/ng_module.mjs} +0 -0
- package/esm2020/src/view/provider.mjs +490 -0
- package/esm2020/src/view/provider_flags.mjs +26 -0
- package/{esm2015/src/view/pure_expression.js → esm2020/src/view/pure_expression.mjs} +0 -0
- package/{esm2015/src/view/query.js → esm2020/src/view/query.mjs} +0 -0
- package/esm2020/src/view/refs.mjs +369 -0
- package/{esm2015/src/view/services.js → esm2020/src/view/services.mjs} +0 -0
- package/{esm2015/src/view/text.js → esm2020/src/view/text.mjs} +0 -0
- package/{esm2015/src/view/types.js → esm2020/src/view/types.mjs} +0 -0
- package/esm2020/src/view/util.mjs +369 -0
- package/{esm2015/src/view/view.js → esm2020/src/view/view.mjs} +0 -0
- package/{esm2015/src/view/view_attach.js → esm2020/src/view/view_attach.mjs} +0 -0
- package/{esm2015/src/zone/ng_zone.js → esm2020/src/zone/ng_zone.mjs} +0 -0
- package/{esm2015/src/zone.js → esm2020/src/zone.mjs} +0 -0
- package/{esm2015/testing/index.js → esm2020/testing/index.mjs} +0 -0
- package/{esm2015/testing/public_api.js → esm2020/testing/public_api.mjs} +0 -0
- package/{esm2015/testing/src/async.js → esm2020/testing/src/async.mjs} +0 -0
- package/{esm2015/testing/src/component_fixture.js → esm2020/testing/src/component_fixture.mjs} +0 -0
- package/{esm2015/testing/src/fake_async.js → esm2020/testing/src/fake_async.mjs} +0 -0
- package/{esm2015/testing/src/lang_utils.js → esm2020/testing/src/lang_utils.mjs} +0 -0
- package/esm2020/testing/src/logger.mjs +34 -0
- package/{esm2015/testing/src/metadata_override.js → esm2020/testing/src/metadata_override.mjs} +0 -0
- package/{esm2015/testing/src/metadata_overrider.js → esm2020/testing/src/metadata_overrider.mjs} +0 -0
- package/esm2020/testing/src/ng_zone_mock.mjs +33 -0
- package/{esm2015/testing/src/private_export_testing.js → esm2020/testing/src/private_export_testing.mjs} +0 -0
- package/esm2020/testing/src/r3_test_bed.mjs +397 -0
- package/esm2020/testing/src/r3_test_bed_compiler.mjs +735 -0
- package/{esm2015/testing/src/resolvers.js → esm2020/testing/src/resolvers.mjs} +1 -1
- package/{esm2015/testing/src/styling.js → esm2020/testing/src/styling.mjs} +0 -0
- package/esm2020/testing/src/test_bed.mjs +614 -0
- package/esm2020/testing/src/test_bed_common.mjs +28 -0
- package/esm2020/testing/src/test_compiler.mjs +69 -0
- package/{esm2015/testing/src/test_hooks.js → esm2020/testing/src/test_hooks.mjs} +0 -0
- package/{esm2015/testing/src/testing.js → esm2020/testing/src/testing.mjs} +0 -0
- package/{esm2015/testing/src/testing_internal.js → esm2020/testing/src/testing_internal.mjs} +0 -0
- package/esm2020/testing/testing.mjs +5 -0
- package/fesm2015/{core.js → core.mjs} +8674 -8756
- package/fesm2015/core.mjs.map +1 -0
- package/fesm2015/{testing.js → testing.mjs} +50 -61
- package/fesm2015/testing.mjs.map +1 -0
- package/fesm2020/core.mjs +33107 -0
- package/fesm2020/core.mjs.map +1 -0
- package/fesm2020/testing.mjs +2635 -0
- package/fesm2020/testing.mjs.map +1 -0
- package/package.json +34 -9
- package/schematics/migrations/abstract-control-parent/index.js +6 -6
- package/schematics/migrations/abstract-control-parent/util.d.ts +1 -1
- package/schematics/migrations/abstract-control-parent/util.js +11 -8
- package/schematics/migrations/activated-route-snapshot-fragment/index.js +12 -9
- package/schematics/migrations/activated-route-snapshot-fragment/util.d.ts +1 -1
- package/schematics/migrations/activated-route-snapshot-fragment/util.js +10 -7
- package/schematics/migrations/can-activate-with-redirect-to/index.js +13 -10
- package/schematics/migrations/can-activate-with-redirect-to/util.d.ts +1 -1
- package/schematics/migrations/can-activate-with-redirect-to/util.js +13 -10
- package/schematics/migrations/deep-shadow-piercing-selector/index.js +3 -3
- package/schematics/migrations/dynamic-queries/index.js +13 -10
- package/schematics/migrations/dynamic-queries/util.d.ts +1 -1
- package/schematics/migrations/dynamic-queries/util.js +12 -9
- package/schematics/migrations/initial-navigation/collector.d.ts +1 -1
- package/schematics/migrations/initial-navigation/collector.js +23 -20
- package/schematics/migrations/initial-navigation/index.js +5 -5
- package/schematics/migrations/initial-navigation/transform.d.ts +1 -1
- package/schematics/migrations/initial-navigation/transform.js +11 -8
- package/schematics/migrations/initial-navigation/update_recorder.d.ts +1 -1
- package/schematics/migrations/initial-navigation/update_recorder.js +1 -1
- package/schematics/migrations/initial-navigation/util.d.ts +1 -1
- package/schematics/migrations/initial-navigation/util.js +10 -7
- package/schematics/migrations/missing-injectable/definition_collector.d.ts +1 -1
- package/schematics/migrations/missing-injectable/definition_collector.js +16 -13
- package/schematics/migrations/missing-injectable/index.js +26 -12
- package/schematics/migrations/missing-injectable/providers_evaluator.d.ts +9 -19
- package/schematics/migrations/missing-injectable/providers_evaluator.js +47 -40
- package/schematics/migrations/missing-injectable/transform.d.ts +3 -2
- package/schematics/migrations/missing-injectable/transform.js +18 -16
- package/schematics/migrations/missing-injectable/update_recorder.d.ts +1 -1
- package/schematics/migrations/missing-injectable/update_recorder.js +1 -1
- package/schematics/migrations/module-with-providers/collector.d.ts +1 -1
- package/schematics/migrations/module-with-providers/collector.js +12 -9
- package/schematics/migrations/module-with-providers/index.js +26 -12
- package/schematics/migrations/module-with-providers/transform.d.ts +4 -3
- package/schematics/migrations/module-with-providers/transform.js +23 -22
- package/schematics/migrations/module-with-providers/util.d.ts +1 -1
- package/schematics/migrations/module-with-providers/util.js +10 -7
- package/schematics/migrations/move-document/document_import_visitor.d.ts +1 -1
- package/schematics/migrations/move-document/document_import_visitor.js +7 -4
- package/schematics/migrations/move-document/index.js +8 -8
- package/schematics/migrations/move-document/move-import.d.ts +1 -1
- package/schematics/migrations/move-document/move-import.js +27 -24
- package/schematics/migrations/native-view-encapsulation/index.js +6 -6
- package/schematics/migrations/native-view-encapsulation/util.d.ts +1 -1
- package/schematics/migrations/native-view-encapsulation/util.js +8 -5
- package/schematics/migrations/navigation-extras-omissions/index.js +13 -10
- package/schematics/migrations/navigation-extras-omissions/util.d.ts +1 -1
- package/schematics/migrations/navigation-extras-omissions/util.js +17 -14
- package/schematics/migrations/relative-link-resolution/collector.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/collector.js +17 -14
- package/schematics/migrations/relative-link-resolution/index.js +5 -5
- package/schematics/migrations/relative-link-resolution/transform.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/transform.js +12 -9
- package/schematics/migrations/relative-link-resolution/update_recorder.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/update_recorder.js +1 -1
- package/schematics/migrations/relative-link-resolution/util.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/util.js +10 -7
- package/schematics/migrations/renderer-to-renderer2/helpers.d.ts +1 -1
- package/schematics/migrations/renderer-to-renderer2/helpers.js +92 -89
- package/schematics/migrations/renderer-to-renderer2/index.js +20 -17
- package/schematics/migrations/renderer-to-renderer2/migration.d.ts +1 -1
- package/schematics/migrations/renderer-to-renderer2/migration.js +33 -30
- package/schematics/migrations/renderer-to-renderer2/util.d.ts +1 -1
- package/schematics/migrations/renderer-to-renderer2/util.js +23 -20
- package/schematics/migrations/router-link-empty-expression/analyze_template.d.ts +2 -2
- package/schematics/migrations/router-link-empty-expression/analyze_template.js +6 -7
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.d.ts +7 -6
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.js +10 -11
- package/schematics/migrations/router-link-empty-expression/index.js +27 -16
- package/schematics/migrations/router-preserve-query-params/index.js +13 -10
- package/schematics/migrations/router-preserve-query-params/util.d.ts +1 -1
- package/schematics/migrations/router-preserve-query-params/util.js +19 -16
- package/schematics/migrations/static-queries/angular/directive_inputs.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/directive_inputs.js +14 -11
- package/schematics/migrations/static-queries/angular/ng_query_visitor.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/ng_query_visitor.js +17 -14
- package/schematics/migrations/static-queries/angular/query-definition.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/query-definition.js +1 -1
- package/schematics/migrations/static-queries/angular/super_class.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/super_class.js +1 -1
- package/schematics/migrations/static-queries/index.js +43 -18
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.d.ts +6 -3
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.js +44 -48
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.d.ts +1 -1
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.js +41 -38
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.d.ts +1 -1
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.js +10 -7
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts +10 -9
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +35 -36
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.d.ts +3 -2
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.js +14 -10
- package/schematics/migrations/static-queries/transform.d.ts +1 -1
- package/schematics/migrations/static-queries/transform.js +14 -11
- package/schematics/migrations/template-var-assignment/analyze_template.d.ts +2 -2
- package/schematics/migrations/template-var-assignment/analyze_template.js +6 -7
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.d.ts +7 -6
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +31 -30
- package/schematics/migrations/template-var-assignment/index.js +20 -9
- package/schematics/migrations/testbed-teardown/index.d.ts +11 -0
- package/schematics/migrations/testbed-teardown/index.js +92 -0
- package/schematics/migrations/testbed-teardown/util.d.ts +35 -0
- package/schematics/migrations/testbed-teardown/util.js +188 -0
- package/schematics/migrations/undecorated-classes-with-decorated-fields/index.js +26 -12
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.d.ts +3 -2
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.js +23 -21
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.d.ts +1 -1
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.js +1 -1
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.d.ts +4 -4
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.js +5 -6
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.d.ts +3 -3
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.js +18 -16
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.d.ts +3 -5
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.js +13 -11
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.d.ts +2 -2
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.js +18 -15
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.js +2 -2
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.d.ts +1 -1
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.js +16 -13
- package/schematics/migrations/undecorated-classes-with-di/index.js +64 -22
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.d.ts +4 -4
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.js +28 -35
- package/schematics/migrations/undecorated-classes-with-di/transform.d.ts +5 -5
- package/schematics/migrations/undecorated-classes-with-di/transform.js +29 -26
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.d.ts +1 -1
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.js +1 -1
- package/schematics/migrations/wait-for-async/index.js +16 -13
- package/schematics/migrations/wait-for-async/util.d.ts +1 -1
- package/schematics/migrations/wait-for-async/util.js +9 -6
- package/schematics/migrations/xhr-factory/index.js +13 -10
- package/schematics/migrations.json +6 -1
- package/schematics/package.json +3 -0
- package/schematics/utils/import_manager.d.ts +1 -1
- package/schematics/utils/import_manager.js +24 -21
- package/schematics/utils/load_esm.d.ts +32 -0
- package/schematics/utils/load_esm.js +79 -0
- package/schematics/utils/ng_component_template.d.ts +1 -1
- package/schematics/utils/ng_component_template.js +21 -18
- package/schematics/utils/ng_decorators.d.ts +1 -1
- package/schematics/utils/ng_decorators.js +2 -2
- package/schematics/utils/parse_html.d.ts +2 -2
- package/schematics/utils/parse_html.js +4 -5
- package/schematics/utils/project_tsconfig_paths.js +3 -3
- package/schematics/utils/template_ast_visitor.d.ts +55 -0
- package/schematics/utils/template_ast_visitor.js +73 -0
- package/schematics/utils/typescript/class_declaration.d.ts +1 -1
- package/schematics/utils/typescript/class_declaration.js +10 -7
- package/schematics/utils/typescript/compiler_host.d.ts +1 -1
- package/schematics/utils/typescript/compiler_host.js +11 -8
- package/schematics/utils/typescript/decorators.d.ts +1 -1
- package/schematics/utils/typescript/decorators.js +8 -5
- package/schematics/utils/typescript/find_base_classes.d.ts +1 -1
- package/schematics/utils/typescript/find_base_classes.js +7 -4
- package/schematics/utils/typescript/functions.d.ts +1 -1
- package/schematics/utils/typescript/functions.js +9 -6
- package/schematics/utils/typescript/imports.d.ts +1 -1
- package/schematics/utils/typescript/imports.js +12 -9
- package/schematics/utils/typescript/nodes.d.ts +1 -1
- package/schematics/utils/typescript/nodes.js +11 -8
- package/schematics/utils/typescript/parse_tsconfig.d.ts +1 -1
- package/schematics/utils/typescript/parse_tsconfig.js +31 -9
- package/schematics/utils/typescript/property_name.d.ts +1 -1
- package/schematics/utils/typescript/property_name.js +7 -4
- package/schematics/utils/typescript/symbol.d.ts +1 -1
- package/schematics/utils/typescript/symbol.js +15 -12
- package/testing/package.json +5 -5
- package/testing/testing.d.ts +57 -339
- package/bundles/core-testing.umd.js +0 -3179
- package/bundles/core-testing.umd.js.map +0 -1
- package/bundles/core.umd.js +0 -34488
- package/bundles/core.umd.js.map +0 -1
- package/core.metadata.json +0 -1
- package/esm2015/core.externs.js +0 -6
- package/esm2015/core.js +0 -38
- package/esm2015/src/application_init.js +0 -142
- package/esm2015/src/application_module.js +0 -134
- package/esm2015/src/application_ref.js +0 -735
- package/esm2015/src/change_detection/change_detection.js +0 -31
- package/esm2015/src/change_detection/change_detection_util.js +0 -105
- package/esm2015/src/change_detection/change_detector_ref.js +0 -96
- package/esm2015/src/change_detection/differs/default_iterable_differ.js +0 -668
- package/esm2015/src/change_detection.js +0 -14
- package/esm2015/src/codegen_private_exports.js +0 -11
- package/esm2015/src/compiler/compiler.externs.js +0 -0
- package/esm2015/src/console.js +0 -23
- package/esm2015/src/core.js +0 -50
- package/esm2015/src/core_private_export.js +0 -35
- package/esm2015/src/core_render3_private_export.js +0 -45
- package/esm2015/src/debug/debug_node.js +0 -632
- package/esm2015/src/di/injectable.js +0 -36
- package/esm2015/src/di/injection_token.js +0 -75
- package/esm2015/src/di/injector.js +0 -326
- package/esm2015/src/di/injector_compatibility.js +0 -187
- package/esm2015/src/di/interface/interface.externs.js +0 -0
- package/esm2015/src/di/jit/injectable.js +0 -96
- package/esm2015/src/di/metadata.js +0 -62
- package/esm2015/src/di/metadata_attr.js +0 -24
- package/esm2015/src/di/util.js +0 -53
- package/esm2015/src/event_emitter.js +0 -54
- package/esm2015/src/i18n/locale_data_api.js +0 -131
- package/esm2015/src/i18n/locale_en.js +0 -17
- package/esm2015/src/interface/interface.externs.js +0 -0
- package/esm2015/src/linker/compiler.js +0 -118
- package/esm2015/src/linker/element_ref.js +0 -66
- package/esm2015/src/linker/ng_module_factory.js +0 -21
- package/esm2015/src/linker/ng_module_factory_loader.js +0 -41
- package/esm2015/src/linker/system_js_ng_module_factory_loader.js +0 -77
- package/esm2015/src/linker/view_container_ref.js +0 -252
- package/esm2015/src/linker.js +0 -20
- package/esm2015/src/metadata/di.js +0 -99
- package/esm2015/src/metadata/directives.js +0 -120
- package/esm2015/src/metadata/ng_module.js +0 -44
- package/esm2015/src/reflection/reflection.externs.js +0 -0
- package/esm2015/src/render3/component.js +0 -206
- package/esm2015/src/render3/features/ng_onchanges_feature.js +0 -92
- package/esm2015/src/render3/instructions/shared.js +0 -1813
- package/esm2015/src/render3/interfaces/renderer.js +0 -29
- package/esm2015/src/render3/jit/directive.js +0 -312
- package/esm2015/src/render3/jit/environment.js +0 -167
- package/esm2015/src/render3/jit/partial.js +0 -105
- package/esm2015/src/render3/metadata.js +0 -49
- package/esm2015/src/render3/ng_module_ref.js +0 -108
- package/esm2015/src/render3/pipe.js +0 -202
- package/esm2015/src/render3/util/discovery_utils.js +0 -411
- package/esm2015/src/render3/util/global_utils.js +0 -78
- package/esm2015/src/render3/util/misc_utils.js +0 -63
- package/esm2015/src/testability/testability.js +0 -256
- package/esm2015/src/util/security/trusted_types.js +0 -133
- package/esm2015/src/util/security/trusted_types_bypass.js +0 -86
- package/esm2015/src/util/util.externs.js +0 -0
- package/esm2015/src/view/provider.js +0 -507
- package/esm2015/src/view/refs.js +0 -362
- package/esm2015/src/view/util.js +0 -378
- package/esm2015/testing/src/logger.js +0 -32
- package/esm2015/testing/src/ng_zone_mock.js +0 -31
- package/esm2015/testing/src/r3_test_bed.js +0 -397
- package/esm2015/testing/src/r3_test_bed_compiler.js +0 -744
- package/esm2015/testing/src/test_bed.js +0 -608
- package/esm2015/testing/src/test_bed_common.js +0 -31
- package/esm2015/testing/src/test_compiler.js +0 -66
- package/esm2015/testing/testing.externs.js +0 -6
- package/esm2015/testing/testing.js +0 -7
- package/fesm2015/core.js.map +0 -1
- package/fesm2015/testing.js.map +0 -1
- package/src/r3_symbols.d.ts +0 -1025
- package/testing/testing.metadata.json +0 -1
- package/testing.d.ts +0 -7
- package/testing.metadata.json +0 -1
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
8
11
|
(function (factory) {
|
|
9
12
|
if (typeof module === "object" && typeof module.exports === "object") {
|
|
10
13
|
var v = factory(require, exports);
|
|
@@ -17,27 +20,27 @@
|
|
|
17
20
|
"use strict";
|
|
18
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
22
|
exports.isExtraOptions = exports.isRouterModuleForRoot = void 0;
|
|
20
|
-
const
|
|
23
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
21
24
|
const imports_1 = require("@angular/core/schematics/utils/typescript/imports");
|
|
22
25
|
/** Determine whether a node is a ModuleWithProviders type reference node without a generic type */
|
|
23
26
|
function isRouterModuleForRoot(typeChecker, node) {
|
|
24
|
-
if (!
|
|
25
|
-
!
|
|
27
|
+
if (!typescript_1.default.isCallExpression(node) || !typescript_1.default.isPropertyAccessExpression(node.expression) ||
|
|
28
|
+
!typescript_1.default.isIdentifier(node.expression.expression) || node.expression.name.text !== 'forRoot') {
|
|
26
29
|
return false;
|
|
27
30
|
}
|
|
28
|
-
const imp = imports_1.getImportOfIdentifier(typeChecker, node.expression.expression);
|
|
31
|
+
const imp = (0, imports_1.getImportOfIdentifier)(typeChecker, node.expression.expression);
|
|
29
32
|
return !!imp && imp.name === 'RouterModule' && imp.importModule === '@angular/router' &&
|
|
30
33
|
!node.typeArguments;
|
|
31
34
|
}
|
|
32
35
|
exports.isRouterModuleForRoot = isRouterModuleForRoot;
|
|
33
36
|
function isExtraOptions(typeChecker, node) {
|
|
34
|
-
if (!
|
|
37
|
+
if (!typescript_1.default.isTypeReferenceNode(node) || !typescript_1.default.isIdentifier(node.typeName)) {
|
|
35
38
|
return false;
|
|
36
39
|
}
|
|
37
|
-
const imp = imports_1.getImportOfIdentifier(typeChecker, node.typeName);
|
|
40
|
+
const imp = (0, imports_1.getImportOfIdentifier)(typeChecker, node.typeName);
|
|
38
41
|
return imp !== null && imp.name === 'ExtraOptions' && imp.importModule === '@angular/router' &&
|
|
39
42
|
!node.typeArguments;
|
|
40
43
|
}
|
|
41
44
|
exports.isExtraOptions = isExtraOptions;
|
|
42
45
|
});
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JlbGF0aXZlLWxpbmstcmVzb2x1dGlvbi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQUM1QiwrRUFBcUU7SUFFckUsbUdBQW1HO0lBQ25HLFNBQWdCLHFCQUFxQixDQUNqQyxXQUEyQixFQUFFLElBQWE7UUFDNUMsSUFBSSxDQUFDLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBRSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDN0UsQ0FBQyxvQkFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDM0YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUEsK0JBQXFCLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0UsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssaUJBQWlCO1lBQ2pGLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMxQixDQUFDO0lBVEQsc0RBU0M7SUFFRCxTQUFnQixjQUFjLENBQzFCLFdBQTJCLEVBQUUsSUFBYTtRQUM1QyxJQUFJLENBQUMsb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwRSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBQSwrQkFBcUIsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLGlCQUFpQjtZQUN4RixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDMUIsQ0FBQztJQVRELHdDQVNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7Z2V0SW1wb3J0T2ZJZGVudGlmaWVyfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMnO1xuXG4vKiogRGV0ZXJtaW5lIHdoZXRoZXIgYSBub2RlIGlzIGEgTW9kdWxlV2l0aFByb3ZpZGVycyB0eXBlIHJlZmVyZW5jZSBub2RlIHdpdGhvdXQgYSBnZW5lcmljIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JvdXRlck1vZHVsZUZvclJvb3QoXG4gICAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5DYWxsRXhwcmVzc2lvbiB7XG4gIGlmICghdHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSB8fCAhdHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKSB8fFxuICAgICAgIXRzLmlzSWRlbnRpZmllcihub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbikgfHwgbm9kZS5leHByZXNzaW9uLm5hbWUudGV4dCAhPT0gJ2ZvclJvb3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGltcCA9IGdldEltcG9ydE9mSWRlbnRpZmllcih0eXBlQ2hlY2tlciwgbm9kZS5leHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICByZXR1cm4gISFpbXAgJiYgaW1wLm5hbWUgPT09ICdSb3V0ZXJNb2R1bGUnICYmIGltcC5pbXBvcnRNb2R1bGUgPT09ICdAYW5ndWxhci9yb3V0ZXInICYmXG4gICAgICAhbm9kZS50eXBlQXJndW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRyYU9wdGlvbnMoXG4gICAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSB7XG4gIGlmICghdHMuaXNUeXBlUmVmZXJlbmNlTm9kZShub2RlKSB8fCAhdHMuaXNJZGVudGlmaWVyKG5vZGUudHlwZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaW1wID0gZ2V0SW1wb3J0T2ZJZGVudGlmaWVyKHR5cGVDaGVja2VyLCBub2RlLnR5cGVOYW1lKTtcbiAgcmV0dXJuIGltcCAhPT0gbnVsbCAmJiBpbXAubmFtZSA9PT0gJ0V4dHJhT3B0aW9ucycgJiYgaW1wLmltcG9ydE1vZHVsZSA9PT0gJ0Bhbmd1bGFyL3JvdXRlcicgJiZcbiAgICAgICFub2RlLnR5cGVBcmd1bWVudHM7XG59XG4iXX0=
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
8
|
/// <amd-module name="@angular/core/schematics/migrations/renderer-to-renderer2/helpers" />
|
|
9
|
-
import
|
|
9
|
+
import ts from 'typescript';
|
|
10
10
|
/** Names of the helper functions that are supported for this migration. */
|
|
11
11
|
export declare const enum HelperFunction {
|
|
12
12
|
any = "AnyDuringRendererMigration",
|
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
8
11
|
(function (factory) {
|
|
9
12
|
if (typeof module === "object" && typeof module.exports === "object") {
|
|
10
13
|
var v = factory(require, exports);
|
|
@@ -17,11 +20,11 @@
|
|
|
17
20
|
"use strict";
|
|
18
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
22
|
exports.getHelper = void 0;
|
|
20
|
-
const
|
|
23
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
21
24
|
/** Gets the string representation of a helper function. */
|
|
22
25
|
function getHelper(name, sourceFile, printer) {
|
|
23
26
|
const helperDeclaration = getHelperDeclaration(name);
|
|
24
|
-
return '\n' + printer.printNode(
|
|
27
|
+
return '\n' + printer.printNode(typescript_1.default.EmitHint.Unspecified, helperDeclaration, sourceFile) + '\n';
|
|
25
28
|
}
|
|
26
29
|
exports.getHelper = getHelper;
|
|
27
30
|
/** Creates a function declaration for the specified helper name. */
|
|
@@ -54,44 +57,44 @@
|
|
|
54
57
|
/** Creates a helper for a custom `any` type during the migration. */
|
|
55
58
|
function createAnyTypeHelper() {
|
|
56
59
|
// type AnyDuringRendererMigration = any;
|
|
57
|
-
return
|
|
60
|
+
return typescript_1.default.createTypeAliasDeclaration([], [], "AnyDuringRendererMigration" /* any */, [], typescript_1.default.createKeywordTypeNode(typescript_1.default.SyntaxKind.AnyKeyword));
|
|
58
61
|
}
|
|
59
62
|
/** Creates a function parameter that is typed as `any`. */
|
|
60
63
|
function getAnyTypedParameter(parameterName, isRequired = true) {
|
|
61
64
|
// Declare the parameter as `any` so we don't have to add extra logic to ensure that the
|
|
62
65
|
// generated code will pass type checking. Use our custom `any` type so people have an incentive
|
|
63
66
|
// to clean it up afterwards and to avoid potentially introducing lint warnings in G3.
|
|
64
|
-
const type =
|
|
65
|
-
return
|
|
67
|
+
const type = typescript_1.default.createTypeReferenceNode("AnyDuringRendererMigration" /* any */, []);
|
|
68
|
+
return typescript_1.default.createParameter([], [], undefined, parameterName, isRequired ? undefined : typescript_1.default.createToken(typescript_1.default.SyntaxKind.QuestionToken), type);
|
|
66
69
|
}
|
|
67
70
|
/** Creates a helper for `createElement`. */
|
|
68
71
|
function getCreateElementHelper() {
|
|
69
|
-
const renderer =
|
|
70
|
-
const parent =
|
|
71
|
-
const namespaceAndName =
|
|
72
|
-
const name =
|
|
73
|
-
const namespace =
|
|
72
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
73
|
+
const parent = typescript_1.default.createIdentifier('parent');
|
|
74
|
+
const namespaceAndName = typescript_1.default.createIdentifier('namespaceAndName');
|
|
75
|
+
const name = typescript_1.default.createIdentifier('name');
|
|
76
|
+
const namespace = typescript_1.default.createIdentifier('namespace');
|
|
74
77
|
// [namespace, name] = splitNamespace(namespaceAndName);
|
|
75
|
-
const namespaceAndNameVariable =
|
|
78
|
+
const namespaceAndNameVariable = typescript_1.default.createVariableDeclaration(typescript_1.default.createArrayBindingPattern([namespace, name].map(id => typescript_1.default.createBindingElement(undefined, undefined, id))), undefined, typescript_1.default.createCall(typescript_1.default.createIdentifier("__ngRendererSplitNamespaceHelper" /* splitNamespace */), [], [namespaceAndName]));
|
|
76
79
|
// `renderer.createElement(name, namespace)`.
|
|
77
|
-
const creationCall =
|
|
78
|
-
return getCreationHelper("__ngRendererCreateElementHelper" /* createElement */, creationCall, renderer, parent, [namespaceAndName], [
|
|
80
|
+
const creationCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'createElement'), [], [name, namespace]);
|
|
81
|
+
return getCreationHelper("__ngRendererCreateElementHelper" /* createElement */, creationCall, renderer, parent, [namespaceAndName], [typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([namespaceAndNameVariable], typescript_1.default.NodeFlags.Const))]);
|
|
79
82
|
}
|
|
80
83
|
/** Creates a helper for `createText`. */
|
|
81
84
|
function getCreateTextHelper() {
|
|
82
|
-
const renderer =
|
|
83
|
-
const parent =
|
|
84
|
-
const value =
|
|
85
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
86
|
+
const parent = typescript_1.default.createIdentifier('parent');
|
|
87
|
+
const value = typescript_1.default.createIdentifier('value');
|
|
85
88
|
// `renderer.createText(value)`.
|
|
86
|
-
const creationCall =
|
|
89
|
+
const creationCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'createText'), [], [value]);
|
|
87
90
|
return getCreationHelper("__ngRendererCreateTextHelper" /* createText */, creationCall, renderer, parent, [value]);
|
|
88
91
|
}
|
|
89
92
|
/** Creates a helper for `createTemplateAnchor`. */
|
|
90
93
|
function getCreateTemplateAnchorHelper() {
|
|
91
|
-
const renderer =
|
|
92
|
-
const parent =
|
|
94
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
95
|
+
const parent = typescript_1.default.createIdentifier('parent');
|
|
93
96
|
// `renderer.createComment('')`.
|
|
94
|
-
const creationCall =
|
|
97
|
+
const creationCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'createComment'), [], [typescript_1.default.createStringLiteral('')]);
|
|
95
98
|
return getCreationHelper("__ngRendererCreateTemplateAnchorHelper" /* createTemplateAnchor */, creationCall, renderer, parent);
|
|
96
99
|
}
|
|
97
100
|
/**
|
|
@@ -105,80 +108,80 @@
|
|
|
105
108
|
* @param precedingVariables Extra variables to be added before the one that creates the `node`.
|
|
106
109
|
*/
|
|
107
110
|
function getCreationHelper(functionName, creationCall, renderer, parent, extraParameters = [], precedingVariables = []) {
|
|
108
|
-
const node =
|
|
111
|
+
const node = typescript_1.default.createIdentifier('node');
|
|
109
112
|
// `const node = {{creationCall}}`.
|
|
110
|
-
const nodeVariableStatement =
|
|
113
|
+
const nodeVariableStatement = typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(node, undefined, creationCall)], typescript_1.default.NodeFlags.Const));
|
|
111
114
|
// `if (parent) { renderer.appendChild(parent, node) }`.
|
|
112
|
-
const guardedAppendChildCall =
|
|
113
|
-
return
|
|
115
|
+
const guardedAppendChildCall = typescript_1.default.createIf(parent, typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'appendChild'), [], [parent, node]))], true));
|
|
116
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, functionName, [], [renderer, parent, ...extraParameters].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([
|
|
114
117
|
...precedingVariables, nodeVariableStatement, guardedAppendChildCall,
|
|
115
|
-
|
|
118
|
+
typescript_1.default.createReturn(node)
|
|
116
119
|
], true));
|
|
117
120
|
}
|
|
118
121
|
/** Creates a helper for `projectNodes`. */
|
|
119
122
|
function getProjectNodesHelper() {
|
|
120
|
-
const renderer =
|
|
121
|
-
const parent =
|
|
122
|
-
const nodes =
|
|
123
|
-
const incrementor =
|
|
123
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
124
|
+
const parent = typescript_1.default.createIdentifier('parent');
|
|
125
|
+
const nodes = typescript_1.default.createIdentifier('nodes');
|
|
126
|
+
const incrementor = typescript_1.default.createIdentifier('i');
|
|
124
127
|
// for (let i = 0; i < nodes.length; i++) {
|
|
125
128
|
// renderer.appendChild(parent, nodes[i]);
|
|
126
129
|
// }
|
|
127
|
-
const loopInitializer =
|
|
128
|
-
const loopCondition =
|
|
129
|
-
const appendStatement =
|
|
130
|
-
const loop =
|
|
131
|
-
return
|
|
130
|
+
const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
|
|
131
|
+
const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(nodes, typescript_1.default.createIdentifier('length')));
|
|
132
|
+
const appendStatement = typescript_1.default.createExpressionStatement(typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'appendChild'), [], [parent, typescript_1.default.createElementAccess(nodes, incrementor)]));
|
|
133
|
+
const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([appendStatement]));
|
|
134
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererProjectNodesHelper" /* projectNodes */, [], [renderer, parent, nodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([loop], true));
|
|
132
135
|
}
|
|
133
136
|
/** Creates a helper for `animate`. */
|
|
134
137
|
function getAnimateHelper() {
|
|
135
138
|
// throw new Error('...');
|
|
136
|
-
const throwStatement =
|
|
137
|
-
return
|
|
139
|
+
const throwStatement = typescript_1.default.createThrow(typescript_1.default.createNew(typescript_1.default.createIdentifier('Error'), [], [typescript_1.default.createStringLiteral('Renderer.animate is no longer supported!')]));
|
|
140
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererAnimateHelper" /* animate */, [], [], undefined, typescript_1.default.createBlock([throwStatement], true));
|
|
138
141
|
}
|
|
139
142
|
/** Creates a helper for `destroyView`. */
|
|
140
143
|
function getDestroyViewHelper() {
|
|
141
|
-
const renderer =
|
|
142
|
-
const allNodes =
|
|
143
|
-
const incrementor =
|
|
144
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
145
|
+
const allNodes = typescript_1.default.createIdentifier('allNodes');
|
|
146
|
+
const incrementor = typescript_1.default.createIdentifier('i');
|
|
144
147
|
// for (let i = 0; i < allNodes.length; i++) {
|
|
145
148
|
// renderer.destroyNode(allNodes[i]);
|
|
146
149
|
// }
|
|
147
|
-
const loopInitializer =
|
|
148
|
-
const loopCondition =
|
|
149
|
-
const destroyStatement =
|
|
150
|
-
const loop =
|
|
151
|
-
return
|
|
150
|
+
const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
|
|
151
|
+
const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(allNodes, typescript_1.default.createIdentifier('length')));
|
|
152
|
+
const destroyStatement = typescript_1.default.createExpressionStatement(typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'destroyNode'), [], [typescript_1.default.createElementAccess(allNodes, incrementor)]));
|
|
153
|
+
const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([destroyStatement]));
|
|
154
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererDestroyViewHelper" /* destroyView */, [], [renderer, allNodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([loop], true));
|
|
152
155
|
}
|
|
153
156
|
/** Creates a helper for `detachView`. */
|
|
154
157
|
function getDetachViewHelper() {
|
|
155
|
-
const renderer =
|
|
156
|
-
const rootNodes =
|
|
157
|
-
const incrementor =
|
|
158
|
-
const node =
|
|
158
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
159
|
+
const rootNodes = typescript_1.default.createIdentifier('rootNodes');
|
|
160
|
+
const incrementor = typescript_1.default.createIdentifier('i');
|
|
161
|
+
const node = typescript_1.default.createIdentifier('node');
|
|
159
162
|
// for (let i = 0; i < rootNodes.length; i++) {
|
|
160
163
|
// const node = rootNodes[i];
|
|
161
164
|
// renderer.removeChild(renderer.parentNode(node), node);
|
|
162
165
|
// }
|
|
163
|
-
const loopInitializer =
|
|
164
|
-
const loopCondition =
|
|
166
|
+
const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
|
|
167
|
+
const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(rootNodes, typescript_1.default.createIdentifier('length')));
|
|
165
168
|
// const node = rootNodes[i];
|
|
166
|
-
const nodeVariableStatement =
|
|
169
|
+
const nodeVariableStatement = typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(node, undefined, typescript_1.default.createElementAccess(rootNodes, incrementor))], typescript_1.default.NodeFlags.Const));
|
|
167
170
|
// renderer.removeChild(renderer.parentNode(node), node);
|
|
168
|
-
const removeCall =
|
|
169
|
-
const loop =
|
|
170
|
-
return
|
|
171
|
+
const removeCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'removeChild'), [], [typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'parentNode'), [], [node]), node]);
|
|
172
|
+
const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([nodeVariableStatement, typescript_1.default.createExpressionStatement(removeCall)]));
|
|
173
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererDetachViewHelper" /* detachView */, [], [renderer, rootNodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([loop], true));
|
|
171
174
|
}
|
|
172
175
|
/** Creates a helper for `attachViewAfter` */
|
|
173
176
|
function getAttachViewAfterHelper() {
|
|
174
|
-
const renderer =
|
|
175
|
-
const node =
|
|
176
|
-
const rootNodes =
|
|
177
|
-
const parent =
|
|
178
|
-
const nextSibling =
|
|
179
|
-
const incrementor =
|
|
177
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
178
|
+
const node = typescript_1.default.createIdentifier('node');
|
|
179
|
+
const rootNodes = typescript_1.default.createIdentifier('rootNodes');
|
|
180
|
+
const parent = typescript_1.default.createIdentifier('parent');
|
|
181
|
+
const nextSibling = typescript_1.default.createIdentifier('nextSibling');
|
|
182
|
+
const incrementor = typescript_1.default.createIdentifier('i');
|
|
180
183
|
const createConstWithMethodCallInitializer = (constName, methodToCall) => {
|
|
181
|
-
return
|
|
184
|
+
return typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(constName, undefined, typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, methodToCall), [], [node]))], typescript_1.default.NodeFlags.Const));
|
|
182
185
|
};
|
|
183
186
|
// const parent = renderer.parentNode(node);
|
|
184
187
|
const parentVariableStatement = createConstWithMethodCallInitializer(parent, 'parentNode');
|
|
@@ -187,52 +190,52 @@
|
|
|
187
190
|
// for (let i = 0; i < rootNodes.length; i++) {
|
|
188
191
|
// renderer.insertBefore(parentElement, rootNodes[i], nextSibling);
|
|
189
192
|
// }
|
|
190
|
-
const loopInitializer =
|
|
191
|
-
const loopCondition =
|
|
192
|
-
const insertBeforeCall =
|
|
193
|
-
const loop =
|
|
194
|
-
return
|
|
193
|
+
const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
|
|
194
|
+
const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(rootNodes, typescript_1.default.createIdentifier('length')));
|
|
195
|
+
const insertBeforeCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'insertBefore'), [], [parent, typescript_1.default.createElementAccess(rootNodes, incrementor), nextSibling]);
|
|
196
|
+
const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(insertBeforeCall)]));
|
|
197
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererAttachViewAfterHelper" /* attachViewAfter */, [], [renderer, node, rootNodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([parentVariableStatement, nextSiblingVariableStatement, loop], true));
|
|
195
198
|
}
|
|
196
199
|
/** Creates a helper for `setElementAttribute` */
|
|
197
200
|
function getSetElementAttributeHelper() {
|
|
198
|
-
const renderer =
|
|
199
|
-
const element =
|
|
200
|
-
const namespaceAndName =
|
|
201
|
-
const value =
|
|
202
|
-
const name =
|
|
203
|
-
const namespace =
|
|
201
|
+
const renderer = typescript_1.default.createIdentifier('renderer');
|
|
202
|
+
const element = typescript_1.default.createIdentifier('element');
|
|
203
|
+
const namespaceAndName = typescript_1.default.createIdentifier('namespaceAndName');
|
|
204
|
+
const value = typescript_1.default.createIdentifier('value');
|
|
205
|
+
const name = typescript_1.default.createIdentifier('name');
|
|
206
|
+
const namespace = typescript_1.default.createIdentifier('namespace');
|
|
204
207
|
// [namespace, name] = splitNamespace(namespaceAndName);
|
|
205
|
-
const namespaceAndNameVariable =
|
|
208
|
+
const namespaceAndNameVariable = typescript_1.default.createVariableDeclaration(typescript_1.default.createArrayBindingPattern([namespace, name].map(id => typescript_1.default.createBindingElement(undefined, undefined, id))), undefined, typescript_1.default.createCall(typescript_1.default.createIdentifier("__ngRendererSplitNamespaceHelper" /* splitNamespace */), [], [namespaceAndName]));
|
|
206
209
|
// renderer.setAttribute(element, name, value, namespace);
|
|
207
|
-
const setCall =
|
|
210
|
+
const setCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'setAttribute'), [], [element, name, value, namespace]);
|
|
208
211
|
// renderer.removeAttribute(element, name, namespace);
|
|
209
|
-
const removeCall =
|
|
212
|
+
const removeCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'removeAttribute'), [], [element, name, namespace]);
|
|
210
213
|
// if (value != null) { setCall() } else { removeCall }
|
|
211
|
-
const ifStatement =
|
|
212
|
-
const functionBody =
|
|
213
|
-
|
|
214
|
+
const ifStatement = typescript_1.default.createIf(typescript_1.default.createBinary(value, typescript_1.default.SyntaxKind.ExclamationEqualsToken, typescript_1.default.createNull()), typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(setCall)], true), typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(removeCall)], true));
|
|
215
|
+
const functionBody = typescript_1.default.createBlock([
|
|
216
|
+
typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([namespaceAndNameVariable], typescript_1.default.NodeFlags.Const)),
|
|
214
217
|
ifStatement
|
|
215
218
|
], true);
|
|
216
|
-
return
|
|
219
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererSetElementAttributeHelper" /* setElementAttribute */, [], [
|
|
217
220
|
getAnyTypedParameter(renderer), getAnyTypedParameter(element),
|
|
218
221
|
getAnyTypedParameter(namespaceAndName), getAnyTypedParameter(value, false)
|
|
219
222
|
], undefined, functionBody);
|
|
220
223
|
}
|
|
221
224
|
/** Creates a helper for splitting a name that might contain a namespace. */
|
|
222
225
|
function getSplitNamespaceHelper() {
|
|
223
|
-
const name =
|
|
224
|
-
const match =
|
|
225
|
-
const regex =
|
|
226
|
-
const matchCall =
|
|
226
|
+
const name = typescript_1.default.createIdentifier('name');
|
|
227
|
+
const match = typescript_1.default.createIdentifier('match');
|
|
228
|
+
const regex = typescript_1.default.createRegularExpressionLiteral('/^:([^:]+):(.+)$/');
|
|
229
|
+
const matchCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(name, 'match'), [], [regex]);
|
|
227
230
|
// const match = name.split(regex);
|
|
228
|
-
const matchVariable =
|
|
231
|
+
const matchVariable = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(match, undefined, matchCall)], typescript_1.default.NodeFlags.Const);
|
|
229
232
|
// return [match[1], match[2]];
|
|
230
|
-
const matchReturn =
|
|
233
|
+
const matchReturn = typescript_1.default.createReturn(typescript_1.default.createArrayLiteral([typescript_1.default.createElementAccess(match, 1), typescript_1.default.createElementAccess(match, 2)]));
|
|
231
234
|
// if (name[0] === ':') { const match = ...; return ...; }
|
|
232
|
-
const ifStatement =
|
|
235
|
+
const ifStatement = typescript_1.default.createIf(typescript_1.default.createBinary(typescript_1.default.createElementAccess(name, 0), typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken, typescript_1.default.createStringLiteral(':')), typescript_1.default.createBlock([typescript_1.default.createVariableStatement([], matchVariable), matchReturn], true));
|
|
233
236
|
// return ['', name];
|
|
234
|
-
const elseReturn =
|
|
235
|
-
return
|
|
237
|
+
const elseReturn = typescript_1.default.createReturn(typescript_1.default.createArrayLiteral([typescript_1.default.createStringLiteral(''), name]));
|
|
238
|
+
return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererSplitNamespaceHelper" /* splitNamespace */, [], [getAnyTypedParameter(name)], undefined, typescript_1.default.createBlock([ifStatement, elseReturn], true));
|
|
236
239
|
}
|
|
237
240
|
});
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JlbmRlcmVyLXRvLXJlbmRlcmVyMi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILGlDQUFpQztJQWlCakMsMkRBQTJEO0lBQzNELFNBQWdCLFNBQVMsQ0FDckIsSUFBb0IsRUFBRSxVQUF5QixFQUFFLE9BQW1CO1FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDakcsQ0FBQztJQUpELDhCQUlDO0lBRUQsb0VBQW9FO0lBQ3BFLFNBQVMsb0JBQW9CLENBQUMsSUFBb0I7UUFDaEQsUUFBUSxJQUFJLEVBQUU7WUFDWjtnQkFDRSxPQUFPLG1CQUFtQixFQUFFLENBQUM7WUFDL0I7Z0JBQ0UsT0FBTyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xDO2dCQUNFLE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztZQUMvQjtnQkFDRSxPQUFPLDZCQUE2QixFQUFFLENBQUM7WUFDekM7Z0JBQ0UsT0FBTyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pDO2dCQUNFLE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QjtnQkFDRSxPQUFPLG9CQUFvQixFQUFFLENBQUM7WUFDaEM7Z0JBQ0UsT0FBTyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9CO2dCQUNFLE9BQU8sd0JBQXdCLEVBQUUsQ0FBQztZQUNwQztnQkFDRSxPQUFPLDRCQUE0QixFQUFFLENBQUM7WUFDeEM7Z0JBQ0UsT0FBTyx1QkFBdUIsRUFBRSxDQUFDO1NB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T0FBTyxFQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUywyREFBaUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQzdGLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKiogTmFtZXMgb2YgdGhlIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGZvciB0aGlzIG1pZ3JhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEhlbHBlckZ1bmN0aW9uIHtcbiAgYW55ID0gJ0FueUR1cmluZ1JlbmRlcmVyTWlncmF0aW9uJyxcbiAgY3JlYXRlRWxlbWVudCA9ICdfX25nUmVuZGVyZXJDcmVhdGVFbGVtZW50SGVscGVyJyxcbiAgY3JlYXRlVGV4dCA9ICdfX25nUmVuZGVyZXJDcmVhdGVUZXh0SGVscGVyJyxcbiAgY3JlYXRlVGVtcGxhdGVBbmNob3IgPSAnX19uZ1JlbmRlcmVyQ3JlYXRlVGVtcGxhdGVBbmNob3JIZWxwZXInLFxuICBwcm9qZWN0Tm9kZXMgPSAnX19uZ1JlbmRlcmVyUHJvamVjdE5vZGVzSGVscGVyJyxcbiAgYW5pbWF0ZSA9ICdfX25nUmVuZGVyZXJBbmltYXRlSGVscGVyJyxcbiAgZGVzdHJveVZpZXcgPSAnX19uZ1JlbmRlcmVyRGVzdHJveVZpZXdIZWxwZXInLFxuICBkZXRhY2hWaWV3ID0gJ19fbmdSZW5kZXJlckRldGFjaFZpZXdIZWxwZXInLFxuICBhdHRhY2hWaWV3QWZ0ZXIgPSAnX19uZ1JlbmRlcmVyQXR0YWNoVmlld0FmdGVySGVscGVyJyxcbiAgc3BsaXROYW1lc3BhY2UgPSAnX19uZ1JlbmRlcmVyU3BsaXROYW1lc3BhY2VIZWxwZXInLFxuICBzZXRFbGVtZW50QXR0cmlidXRlID0gJ19fbmdSZW5kZXJlclNldEVsZW1lbnRBdHRyaWJ1dGVIZWxwZXInXG59XG5cbi8qKiBHZXRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBoZWxwZXIgZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVscGVyKFxuICAgIG5hbWU6IEhlbHBlckZ1bmN0aW9uLCBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBwcmludGVyOiB0cy5QcmludGVyKTogc3RyaW5nIHtcbiAgY29uc3QgaGVscGVyRGVjbGFyYXRpb24gPSBnZXRIZWxwZXJEZWNsYXJhdGlvbihuYW1lKTtcbiAgcmV0dXJuICdcXG4nICsgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIGhlbHBlckRlY2xhcmF0aW9uLCBzb3VyY2VGaWxlKSArICdcXG4nO1xufVxuXG4vKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGhlbHBlciBuYW1lLiAqL1xuZnVuY3Rpb24gZ2V0SGVscGVyRGVjbGFyYXRpb24obmFtZTogSGVscGVyRnVuY3Rpb24pOiB0cy5Ob2RlIHtcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5hbnk6XG4gICAgICByZXR1cm4gY3JlYXRlQW55VHlwZUhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uY3JlYXRlRWxlbWVudDpcbiAgICAgIHJldHVybiBnZXRDcmVhdGVFbGVtZW50SGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5jcmVhdGVUZXh0OlxuICAgICAgcmV0dXJuIGdldENyZWF0ZVRleHRIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRlbXBsYXRlQW5jaG9yOlxuICAgICAgcmV0dXJuIGdldENyZWF0ZVRlbXBsYXRlQW5jaG9ySGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5wcm9qZWN0Tm9kZXM6XG4gICAgICByZXR1cm4gZ2V0UHJvamVjdE5vZGVzSGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5hbmltYXRlOlxuICAgICAgcmV0dXJuIGdldEFuaW1hdGVIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmRlc3Ryb3lWaWV3OlxuICAgICAgcmV0dXJuIGdldERlc3Ryb3lWaWV3SGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5kZXRhY2hWaWV3OlxuICAgICAgcmV0dXJuIGdldERldGFjaFZpZXdIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmF0dGFjaFZpZXdBZnRlcjpcbiAgICAgIHJldHVybiBnZXRBdHRhY2hWaWV3QWZ0ZXJIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLnNldEVsZW1lbnRBdHRyaWJ1dGU6XG4gICAgICByZXR1cm4gZ2V0U2V0RWxlbWVudEF0dHJpYnV0ZUhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uc3BsaXROYW1lc3BhY2U6XG4gICAgICByZXR1cm4gZ2V0U3BsaXROYW1lc3BhY2VIZWxwZXIoKTtcbiAgfVxufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYSBjdXN0b20gYGFueWAgdHlwZSBkdXJpbmcgdGhlIG1pZ3JhdGlvbi4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVIZWxwZXIoKTogdHMuVHlwZUFsaWFzRGVjbGFyYXRpb24ge1xuICAvLyB0eXBlIEFueUR1cmluZ1JlbmRlcmVyTWlncmF0aW9uID0gYW55O1xuICByZXR1cm4gdHMuY3JlYXRlVHlwZUFsaWFzRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIEhlbHBlckZ1bmN0aW9uLmFueSwgW10sIHRzLmNyZWF0ZUtleXdvcmRUeXBlTm9kZSh0cy5TeW50YXhLaW5kLkFueUtleXdvcmQpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgdGhhdCBpcyB0eXBlZCBhcyBgYW55YC4gKi9cbmZ1bmN0aW9uIGdldEFueVR5cGVkUGFyYW1ldGVyKFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZ3x0cy5JZGVudGlmaWVyLCBpc1JlcXVpcmVkID0gdHJ1ZSk6IHRzLlBhcmFtZXRlckRlY2xhcmF0aW9uIHtcbiAgLy8gRGVjbGFyZSB0aGUgcGFyYW1ldGVyIGFzIGBhbnlgIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGV4dHJhIGxvZ2ljIHRvIGVuc3VyZSB0aGF0IHRoZVxuICAvLyBnZW5lcmF0ZWQgY29kZSB3aWxsIHBhc3MgdHlwZSBjaGVja2luZy4gVXNlIG91ciBjdXN0b20gYGFueWAgdHlwZSBzbyBwZW9wbGUgaGF2ZSBhbiBpbmNlbnRpdmVcbiAgLy8gdG8gY2xlYW4gaXQgdXAgYWZ0ZXJ3YXJkcyBhbmQgdG8gYXZvaWQgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgbGludCB3YXJuaW5ncyBpbiBHMy5cbiAgY29uc3QgdHlwZSA9IHRzLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKEhlbHBlckZ1bmN0aW9uLmFueSwgW10pO1xuICByZXR1cm4gdHMuY3JlYXRlUGFyYW1ldGVyKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIHBhcmFtZXRlck5hbWUsXG4gICAgICBpc1JlcXVpcmVkID8gdW5kZWZpbmVkIDogdHMuY3JlYXRlVG9rZW4odHMuU3ludGF4S2luZC5RdWVzdGlvblRva2VuKSwgdHlwZSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgY3JlYXRlRWxlbWVudGAuICovXG5mdW5jdGlvbiBnZXRDcmVhdGVFbGVtZW50SGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IHBhcmVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3BhcmVudCcpO1xuICBjb25zdCBuYW1lc3BhY2VBbmROYW1lID0gdHMuY3JlYXRlSWRlbnRpZmllcignbmFtZXNwYWNlQW5kTmFtZScpO1xuICBjb25zdCBuYW1lID0gdHMuY3JlYXRlSWRlbnRpZmllcignbmFtZScpO1xuICBjb25zdCBuYW1lc3BhY2UgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lc3BhY2UnKTtcblxuICAvLyBbbmFtZXNwYWNlLCBuYW1lXSA9IHNwbGl0TmFtZXNwYWNlKG5hbWVzcGFjZUFuZE5hbWUpO1xuICBjb25zdCBuYW1lc3BhY2VBbmROYW1lVmFyaWFibGUgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKFxuICAgICAgdHMuY3JlYXRlQXJyYXlCaW5kaW5nUGF0dGVybihcbiAgICAgICAgICBbbmFtZXNwYWNlLCBuYW1lXS5tYXAoaWQgPT4gdHMuY3JlYXRlQmluZGluZ0VsZW1lbnQodW5kZWZpbmVkLCB1bmRlZmluZWQsIGlkKSkpLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVJZGVudGlmaWVyKEhlbHBlckZ1bmN0aW9uLnNwbGl0TmFtZXNwYWNlKSwgW10sIFtuYW1lc3BhY2VBbmROYW1lXSkpO1xuXG4gIC8vIGByZW5kZXJlci5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSlgLlxuICBjb25zdCBjcmVhdGlvbkNhbGwgPVxuICAgICAgdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2NyZWF0ZUVsZW1lbnQnKSwgW10sIFtuYW1lLCBuYW1lc3BhY2VdKTtcblxuICByZXR1cm4gZ2V0Q3JlYXRpb25IZWxwZXIoXG4gICAgICBIZWxwZXJGdW5jdGlvbi5jcmVhdGVFbGVtZW50LCBjcmVhdGlvbkNhbGwsIHJlbmRlcmVyLCBwYXJlbnQsIFtuYW1lc3BhY2VBbmROYW1lXSxcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoW25hbWVzcGFjZUFuZE5hbWVWYXJpYWJsZV0sIHRzLk5vZGVGbGFncy5Db25zdCkpXSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgY3JlYXRlVGV4dGAuICovXG5mdW5jdGlvbiBnZXRDcmVhdGVUZXh0SGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IHBhcmVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3BhcmVudCcpO1xuICBjb25zdCB2YWx1ZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3ZhbHVlJyk7XG5cbiAgLy8gYHJlbmRlcmVyLmNyZWF0ZVRleHQodmFsdWUpYC5cbiAgY29uc3QgY3JlYXRpb25DYWxsID0gdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2NyZWF0ZVRleHQnKSwgW10sIFt2YWx1ZV0pO1xuXG4gIHJldHVybiBnZXRDcmVhdGlvbkhlbHBlcihIZWxwZXJGdW5jdGlvbi5jcmVhdGVUZXh0LCBjcmVhdGlvbkNhbGwsIHJlbmRlcmVyLCBwYXJlbnQsIFt2YWx1ZV0pO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYGNyZWF0ZVRlbXBsYXRlQW5jaG9yYC4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRlQW5jaG9ySGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IHBhcmVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3BhcmVudCcpO1xuXG4gIC8vIGByZW5kZXJlci5jcmVhdGVDb21tZW50KCcnKWAuXG4gIGNvbnN0IGNyZWF0aW9uQ2FsbCA9IHRzLmNyZWF0ZUNhbGwoXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2NyZWF0ZUNvbW1lbnQnKSwgW10sIFt0cy5jcmVhdGVTdHJpbmdMaXRlcmFsKCcnKV0pO1xuXG4gIHJldHVybiBnZXRDcmVhdGlvbkhlbHBlcihIZWxwZXJGdW5jdGlvbi5jcmVhdGVUZW1wbGF0ZUFuY2hvciwgY3JlYXRpb25DYWxsLCByZW5kZXJlciwgcGFyZW50KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmb3IgYSBjcmVhdGlvbiBoZWxwZXIuIFRoaXMgaXMgcmV1c2VkIGJldHdlZW4gYGNyZWF0ZUVsZW1lbnRgLFxuICogYGNyZWF0ZVRleHRgIGFuZCBgY3JlYXRlVGVtcGxhdGVBbmNob3JgIHdoaWNoIGZvbGxvdyBhIHZlcnkgc2ltaWxhciBwYXR0ZXJuLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSBGdW5jdGlvbiB0aGF0IHRoZSBoZWxwZXIgc2hvdWxkIGhhdmUuXG4gKiBAcGFyYW0gY3JlYXRpb25DYWxsIEV4cHJlc3Npb24gdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG5vZGUgaW5zaWRlIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSByZW5kZXJlclBhcmFtZXRlciBQYXJhbWV0ZXIgZm9yIHRoZSBgcmVuZGVyZXJgLlxuICogQHBhcmFtIHBhcmVudFBhcmFtZXRlciBQYXJhbWV0ZXIgZm9yIHRoZSBgcGFyZW50YCBpbnNpZGUgdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIGV4dHJhUGFyYW1ldGVycyBFeHRyYSBwYXJhbWV0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBlbmQuXG4gKiBAcGFyYW0gcHJlY2VkaW5nVmFyaWFibGVzIEV4dHJhIHZhcmlhYmxlcyB0byBiZSBhZGRlZCBiZWZvcmUgdGhlIG9uZSB0aGF0IGNyZWF0ZXMgdGhlIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25IZWxwZXIoXG4gICAgZnVuY3Rpb25OYW1lOiBIZWxwZXJGdW5jdGlvbiwgY3JlYXRpb25DYWxsOiB0cy5DYWxsRXhwcmVzc2lvbiwgcmVuZGVyZXI6IHRzLklkZW50aWZpZXIsXG4gICAgcGFyZW50OiB0cy5JZGVudGlmaWVyLCBleHRyYVBhcmFtZXRlcnM6IHRzLklkZW50aWZpZXJbXSA9IFtdLFxuICAgIHByZWNlZGluZ1ZhcmlhYmxlczogdHMuVmFyaWFibGVTdGF0ZW1lbnRbXSA9IFtdKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IG5vZGUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdub2RlJyk7XG5cbiAgLy8gYGNvbnN0IG5vZGUgPSB7e2NyZWF0aW9uQ2FsbH19YC5cbiAgY29uc3Qgbm9kZVZhcmlhYmxlU3RhdGVtZW50ID0gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLCB1bmRlZmluZWQsIGNyZWF0aW9uQ2FsbCldLCB0cy5Ob2RlRmxhZ3MuQ29uc3QpKTtcblxuICAvLyBgaWYgKHBhcmVudCkgeyByZW5kZXJlci5hcHBlbmRDaGlsZChwYXJlbnQsIG5vZGUpIH1gLlxuICBjb25zdCBndWFyZGVkQXBwZW5kQ2hpbGRDYWxsID0gdHMuY3JlYXRlSWYoXG4gICAgICBwYXJlbnQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhcbiAgICAgICAgICBbdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChcbiAgICAgICAgICAgICAgdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2FwcGVuZENoaWxkJyksIFtdLCBbcGFyZW50LCBub2RlXSkpXSxcbiAgICAgICAgICB0cnVlKSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgZnVuY3Rpb25OYW1lLCBbXSxcbiAgICAgIFtyZW5kZXJlciwgcGFyZW50LCAuLi5leHRyYVBhcmFtZXRlcnNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soXG4gICAgICAgICAgW1xuICAgICAgICAgICAgLi4ucHJlY2VkaW5nVmFyaWFibGVzLCBub2RlVmFyaWFibGVTdGF0ZW1lbnQsIGd1YXJkZWRBcHBlbmRDaGlsZENhbGwsXG4gICAgICAgICAgICB0cy5jcmVhdGVSZXR1cm4obm9kZSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRydWUpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBwcm9qZWN0Tm9kZXNgLiAqL1xuZnVuY3Rpb24gZ2V0UHJvamVjdE5vZGVzSGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IHBhcmVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3BhcmVudCcpO1xuICBjb25zdCBub2RlcyA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25vZGVzJyk7XG4gIGNvbnN0IGluY3JlbWVudG9yID0gdHMuY3JlYXRlSWRlbnRpZmllcignaScpO1xuXG4gIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICByZW5kZXJlci5hcHBlbmRDaGlsZChwYXJlbnQsIG5vZGVzW2ldKTtcbiAgLy8gfVxuICBjb25zdCBsb29wSW5pdGlhbGl6ZXIgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGluY3JlbWVudG9yLCB1bmRlZmluZWQsIHRzLmNyZWF0ZU51bWVyaWNMaXRlcmFsKCcwJykpXSxcbiAgICAgIHRzLk5vZGVGbGFncy5MZXQpO1xuICBjb25zdCBsb29wQ29uZGl0aW9uID0gdHMuY3JlYXRlQmluYXJ5KFxuICAgICAgaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbixcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKG5vZGVzLCB0cy5jcmVhdGVJZGVudGlmaWVyKCdsZW5ndGgnKSkpO1xuICBjb25zdCBhcHBlbmRTdGF0ZW1lbnQgPSB0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHRzLmNyZWF0ZUNhbGwoXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2FwcGVuZENoaWxkJyksIFtdLFxuICAgICAgW3BhcmVudCwgdHMuY3JlYXRlRWxlbWVudEFjY2Vzcyhub2RlcywgaW5jcmVtZW50b3IpXSkpO1xuICBjb25zdCBsb29wID0gdHMuY3JlYXRlRm9yKFxuICAgICAgbG9vcEluaXRpYWxpemVyLCBsb29wQ29uZGl0aW9uLCB0cy5jcmVhdGVQb3N0Zml4KGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW4pLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2FwcGVuZFN0YXRlbWVudF0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5wcm9qZWN0Tm9kZXMsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBwYXJlbnQsIG5vZGVzXS5tYXAobmFtZSA9PiBnZXRBbnlUeXBlZFBhcmFtZXRlcihuYW1lKSksIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFtsb29wXSwgdHJ1ZSkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYGFuaW1hdGVgLiAqL1xuZnVuY3Rpb24gZ2V0QW5pbWF0ZUhlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgLy8gdGhyb3cgbmV3IEVycm9yKCcuLi4nKTtcbiAgY29uc3QgdGhyb3dTdGF0ZW1lbnQgPSB0cy5jcmVhdGVUaHJvdyh0cy5jcmVhdGVOZXcoXG4gICAgICB0cy5jcmVhdGVJZGVudGlmaWVyKCdFcnJvcicpLCBbXSxcbiAgICAgIFt0cy5jcmVhdGVTdHJpbmdMaXRlcmFsKCdSZW5kZXJlci5hbmltYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhJyldKSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uYW5pbWF0ZSwgW10sIFtdLCB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhbdGhyb3dTdGF0ZW1lbnRdLCB0cnVlKSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgZGVzdHJveVZpZXdgLiAqL1xuZnVuY3Rpb24gZ2V0RGVzdHJveVZpZXdIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgYWxsTm9kZXMgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdhbGxOb2RlcycpO1xuICBjb25zdCBpbmNyZW1lbnRvciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2knKTtcblxuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGFsbE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgcmVuZGVyZXIuZGVzdHJveU5vZGUoYWxsTm9kZXNbaV0pO1xuICAvLyB9XG4gIGNvbnN0IGxvb3BJbml0aWFsaXplciA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oaW5jcmVtZW50b3IsIHVuZGVmaW5lZCwgdHMuY3JlYXRlTnVtZXJpY0xpdGVyYWwoJzAnKSldLFxuICAgICAgdHMuTm9kZUZsYWdzLkxldCk7XG4gIGNvbnN0IGxvb3BDb25kaXRpb24gPSB0cy5jcmVhdGVCaW5hcnkoXG4gICAgICBpbmNyZW1lbnRvciwgdHMuU3ludGF4S2luZC5MZXNzVGhhblRva2VuLFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MoYWxsTm9kZXMsIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2xlbmd0aCcpKSk7XG4gIGNvbnN0IGRlc3Ryb3lTdGF0ZW1lbnQgPSB0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHRzLmNyZWF0ZUNhbGwoXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2Rlc3Ryb3lOb2RlJyksIFtdLFxuICAgICAgW3RzLmNyZWF0ZUVsZW1lbnRBY2Nlc3MoYWxsTm9kZXMsIGluY3JlbWVudG9yKV0pKTtcbiAgY29uc3QgbG9vcCA9IHRzLmNyZWF0ZUZvcihcbiAgICAgIGxvb3BJbml0aWFsaXplciwgbG9vcENvbmRpdGlvbiwgdHMuY3JlYXRlUG9zdGZpeChpbmNyZW1lbnRvciwgdHMuU3ludGF4S2luZC5QbHVzUGx1c1Rva2VuKSxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFtkZXN0cm95U3RhdGVtZW50XSkpO1xuXG4gIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIEhlbHBlckZ1bmN0aW9uLmRlc3Ryb3lWaWV3LCBbXSxcbiAgICAgIFtyZW5kZXJlciwgYWxsTm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2xvb3BdLCB0cnVlKSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgZGV0YWNoVmlld2AuICovXG5mdW5jdGlvbiBnZXREZXRhY2hWaWV3SGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IHJvb3ROb2RlcyA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3Jvb3ROb2RlcycpO1xuICBjb25zdCBpbmNyZW1lbnRvciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2knKTtcbiAgY29uc3Qgbm9kZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25vZGUnKTtcblxuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHJvb3ROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAvLyAgIGNvbnN0IG5vZGUgPSByb290Tm9kZXNbaV07XG4gIC8vICAgcmVuZGVyZXIucmVtb3ZlQ2hpbGQocmVuZGVyZXIucGFyZW50Tm9kZShub2RlKSwgbm9kZSk7XG4gIC8vIH1cbiAgY29uc3QgbG9vcEluaXRpYWxpemVyID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihpbmNyZW1lbnRvciwgdW5kZWZpbmVkLCB0cy5jcmVhdGVOdW1lcmljTGl0ZXJhbCgnMCcpKV0sXG4gICAgICB0cy5Ob2RlRmxhZ3MuTGV0KTtcbiAgY29uc3QgbG9vcENvbmRpdGlvbiA9IHRzLmNyZWF0ZUJpbmFyeShcbiAgICAgIGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLkxlc3NUaGFuVG9rZW4sXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyhyb290Tm9kZXMsIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2xlbmd0aCcpKSk7XG5cbiAgLy8gY29uc3Qgbm9kZSA9IHJvb3ROb2Rlc1tpXTtcbiAgY29uc3Qgbm9kZVZhcmlhYmxlU3RhdGVtZW50ID0gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgbm9kZSwgdW5kZWZpbmVkLCB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHJvb3ROb2RlcywgaW5jcmVtZW50b3IpKV0sXG4gICAgICAgICAgdHMuTm9kZUZsYWdzLkNvbnN0KSk7XG4gIC8vIHJlbmRlcmVyLnJlbW92ZUNoaWxkKHJlbmRlcmVyLnBhcmVudE5vZGUobm9kZSksIG5vZGUpO1xuICBjb25zdCByZW1vdmVDYWxsID0gdHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAncmVtb3ZlQ2hpbGQnKSwgW10sXG4gICAgICBbdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ3BhcmVudE5vZGUnKSwgW10sIFtub2RlXSksIG5vZGVdKTtcblxuICBjb25zdCBsb29wID0gdHMuY3JlYXRlRm9yKFxuICAgICAgbG9vcEluaXRpYWxpemVyLCBsb29wQ29uZGl0aW9uLCB0cy5jcmVhdGVQb3N0Zml4KGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW4pLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW25vZGVWYXJpYWJsZVN0YXRlbWVudCwgdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChyZW1vdmVDYWxsKV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5kZXRhY2hWaWV3LCBbXSxcbiAgICAgIFtyZW5kZXJlciwgcm9vdE5vZGVzXS5tYXAobmFtZSA9PiBnZXRBbnlUeXBlZFBhcmFtZXRlcihuYW1lKSksIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFtsb29wXSwgdHJ1ZSkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYGF0dGFjaFZpZXdBZnRlcmAgKi9cbmZ1bmN0aW9uIGdldEF0dGFjaFZpZXdBZnRlckhlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3QgcmVuZGVyZXIgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdyZW5kZXJlcicpO1xuICBjb25zdCBub2RlID0gdHMuY3JlYXRlSWRlbnRpZmllcignbm9kZScpO1xuICBjb25zdCByb290Tm9kZXMgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdyb290Tm9kZXMnKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IG5leHRTaWJsaW5nID0gdHMuY3JlYXRlSWRlbnRpZmllcignbmV4dFNpYmxpbmcnKTtcbiAgY29uc3QgaW5jcmVtZW50b3IgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdpJyk7XG4gIGNvbnN0IGNyZWF0ZUNvbnN0V2l0aE1ldGhvZENhbGxJbml0aWFsaXplciA9IChjb25zdE5hbWU6IHRzLklkZW50aWZpZXIsIG1ldGhvZFRvQ2FsbDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHRzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgY29uc3ROYW1lLCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgbWV0aG9kVG9DYWxsKSwgW10sIFtub2RlXSkpXSxcbiAgICAgICAgICAgIHRzLk5vZGVGbGFncy5Db25zdCkpO1xuICB9O1xuXG4gIC8vIGNvbnN0IHBhcmVudCA9IHJlbmRlcmVyLnBhcmVudE5vZGUobm9kZSk7XG4gIGNvbnN0IHBhcmVudFZhcmlhYmxlU3RhdGVtZW50ID0gY3JlYXRlQ29uc3RXaXRoTWV0aG9kQ2FsbEluaXRpYWxpemVyKHBhcmVudCwgJ3BhcmVudE5vZGUnKTtcblxuICAvLyBjb25zdCBuZXh0U2libGluZyA9IHJlbmRlcmVyLm5leHRTaWJsaW5nKG5vZGUpO1xuICBjb25zdCBuZXh0U2libGluZ1ZhcmlhYmxlU3RhdGVtZW50ID1cbiAgICAgIGNyZWF0ZUNvbnN0V2l0aE1ldGhvZENhbGxJbml0aWFsaXplcihuZXh0U2libGluZywgJ25leHRTaWJsaW5nJyk7XG5cbiAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCByb290Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICByZW5kZXJlci5pbnNlcnRCZWZvcmUocGFyZW50RWxlbWVudCwgcm9vdE5vZGVzW2ldLCBuZXh0U2libGluZyk7XG4gIC8vIH1cbiAgY29uc3QgbG9vcEluaXRpYWxpemVyID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihpbmNyZW1lbnRvciwgdW5kZWZpbmVkLCB0cy5jcmVhdGVOdW1lcmljTGl0ZXJhbCgnMCcpKV0sXG4gICAgICB0cy5Ob2RlRmxhZ3MuTGV0KTtcbiAgY29uc3QgbG9vcENvbmRpdGlvbiA9IHRzLmNyZWF0ZUJpbmFyeShcbiAgICAgIGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLkxlc3NUaGFuVG9rZW4sXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2Vzcyhyb290Tm9kZXMsIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2xlbmd0aCcpKSk7XG4gIGNvbnN0IGluc2VydEJlZm9yZUNhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdpbnNlcnRCZWZvcmUnKSwgW10sXG4gICAgICBbcGFyZW50LCB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHJvb3ROb2RlcywgaW5jcmVtZW50b3IpLCBuZXh0U2libGluZ10pO1xuICBjb25zdCBsb29wID0gdHMuY3JlYXRlRm9yKFxuICAgICAgbG9vcEluaXRpYWxpemVyLCBsb29wQ29uZGl0aW9uLCB0cy5jcmVhdGVQb3N0Zml4KGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW4pLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW3RzLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoaW5zZXJ0QmVmb3JlQ2FsbCldKSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uYXR0YWNoVmlld0FmdGVyLCBbXSxcbiAgICAgIFtyZW5kZXJlciwgbm9kZSwgcm9vdE5vZGVzXS5tYXAobmFtZSA9PiBnZXRBbnlUeXBlZFBhcmFtZXRlcihuYW1lKSksIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFtwYXJlbnRWYXJpYWJsZVN0YXRlbWVudCwgbmV4dFNpYmxpbmdWYXJpYWJsZVN0YXRlbWVudCwgbG9vcF0sIHRydWUpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBzZXRFbGVtZW50QXR0cmlidXRlYCAqL1xuZnVuY3Rpb24gZ2V0U2V0RWxlbWVudEF0dHJpYnV0ZUhlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3QgcmVuZGVyZXIgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdyZW5kZXJlcicpO1xuICBjb25zdCBlbGVtZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcignZWxlbWVudCcpO1xuICBjb25zdCBuYW1lc3BhY2VBbmROYW1lID0gdHMuY3JlYXRlSWRlbnRpZmllcignbmFtZXNwYWNlQW5kTmFtZScpO1xuICBjb25zdCB2YWx1ZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3ZhbHVlJyk7XG4gIGNvbnN0IG5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lJyk7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWVzcGFjZScpO1xuXG4gIC8vIFtuYW1lc3BhY2UsIG5hbWVdID0gc3BsaXROYW1lc3BhY2UobmFtZXNwYWNlQW5kTmFtZSk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWVWYXJpYWJsZSA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICB0cy5jcmVhdGVBcnJheUJpbmRpbmdQYXR0ZXJuKFxuICAgICAgICAgIFtuYW1lc3BhY2UsIG5hbWVdLm1hcChpZCA9PiB0cy5jcmVhdGVCaW5kaW5nRWxlbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgaWQpKSksXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZUlkZW50aWZpZXIoSGVscGVyRnVuY3Rpb24uc3BsaXROYW1lc3BhY2UpLCBbXSwgW25hbWVzcGFjZUFuZE5hbWVdKSk7XG5cbiAgLy8gcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuICBjb25zdCBzZXRDYWxsID0gdHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnc2V0QXR0cmlidXRlJyksIFtdLCBbZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuXG4gIC8vIHJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBuYW1lLCBuYW1lc3BhY2UpO1xuICBjb25zdCByZW1vdmVDYWxsID0gdHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAncmVtb3ZlQXR0cmlidXRlJyksIFtdLCBbZWxlbWVudCwgbmFtZSwgbmFtZXNwYWNlXSk7XG5cbiAgLy8gaWYgKHZhbHVlICE9IG51bGwpIHsgc2V0Q2FsbCgpIH0gZWxzZSB7IHJlbW92ZUNhbGwgfVxuICBjb25zdCBpZlN0YXRlbWVudCA9IHRzLmNyZWF0ZUlmKFxuICAgICAgdHMuY3JlYXRlQmluYXJ5KHZhbHVlLCB0cy5TeW50YXhLaW5kLkV4Y2xhbWF0aW9uRXF1YWxzVG9rZW4sIHRzLmNyZWF0ZU51bGwoKSksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChzZXRDYWxsKV0sIHRydWUpLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW3RzLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQocmVtb3ZlQ2FsbCldLCB0cnVlKSk7XG5cbiAgY29uc3QgZnVuY3Rpb25Cb2R5ID0gdHMuY3JlYXRlQmxvY2soXG4gICAgICBbXG4gICAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoW25hbWVzcGFjZUFuZE5hbWVWYXJpYWJsZV0sIHRzLk5vZGVGbGFncy5Db25zdCkpLFxuICAgICAgICBpZlN0YXRlbWVudFxuICAgICAgXSxcbiAgICAgIHRydWUpO1xuXG4gIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIEhlbHBlckZ1bmN0aW9uLnNldEVsZW1lbnRBdHRyaWJ1dGUsIFtdLFxuICAgICAgW1xuICAgICAgICBnZXRBbnlUeXBlZFBhcmFtZXRlcihyZW5kZXJlciksIGdldEFueVR5cGVkUGFyYW1ldGVyKGVsZW1lbnQpLFxuICAgICAgICBnZXRBbnlUeXBlZFBhcmFtZXRlcihuYW1lc3BhY2VBbmROYW1lKSwgZ2V0QW55VHlwZWRQYXJhbWV0ZXIodmFsdWUsIGZhbHNlKVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCwgZnVuY3Rpb25Cb2R5KTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIHNwbGl0dGluZyBhIG5hbWUgdGhhdCBtaWdodCBjb250YWluIGEgbmFtZXNwYWNlLiAqL1xuZnVuY3Rpb24gZ2V0U3BsaXROYW1lc3BhY2VIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IG5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lJyk7XG4gIGNvbnN0IG1hdGNoID0gdHMuY3JlYXRlSWRlbnRpZmllcignbWF0Y2gnKTtcbiAgY29uc3QgcmVnZXggPSB0cy5jcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWwoJy9eOihbXjpdKyk6KC4rKSQvJyk7XG4gIGNvbnN0IG1hdGNoQ2FsbCA9IHRzLmNyZWF0ZUNhbGwodHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MobmFtZSwgJ21hdGNoJyksIFtdLCBbcmVnZXhdKTtcblxuICAvLyBjb25zdCBtYXRjaCA9IG5hbWUuc3BsaXQocmVnZXgpO1xuICBjb25zdCBtYXRjaFZhcmlhYmxlID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihtYXRjaCwgdW5kZWZpbmVkLCBtYXRjaENhbGwpXSwgdHMuTm9kZUZsYWdzLkNvbnN0KTtcblxuICAvLyByZXR1cm4gW21hdGNoWzFdLCBtYXRjaFsyXV07XG4gIGNvbnN0IG1hdGNoUmV0dXJuID0gdHMuY3JlYXRlUmV0dXJuKFxuICAgICAgdHMuY3JlYXRlQXJyYXlMaXRlcmFsKFt0cy5jcmVhdGVFbGVtZW50QWNjZXNzKG1hdGNoLCAxKSwgdHMuY3JlYXRlRWxlbWVudEFjY2VzcyhtYXRjaCwgMildKSk7XG5cbiAgLy8gaWYgKG5hbWVbMF0gPT09ICc6JykgeyBjb25zdCBtYXRjaCA9IC4uLjsgcmV0dXJuIC4uLjsgfVxuICBjb25zdCBpZlN0YXRlbWVudCA9IHRzLmNyZWF0ZUlmKFxuICAgICAgdHMuY3JlYXRlQmluYXJ5KFxuICAgICAgICAgIHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3MobmFtZSwgMCksIHRzLlN5bnRheEtpbmQuRXF1YWxzRXF1YWxzRXF1YWxzVG9rZW4sXG4gICAgICAgICAgdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnOicpKSxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFt0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChbXSwgbWF0Y2hWYXJpYWJsZSksIG1hdGNoUmV0dXJuXSwgdHJ1ZSkpO1xuXG4gIC8vIHJldHVybiBbJycsIG5hbWVdO1xuICBjb25zdCBlbHNlUmV0dXJuID0gdHMuY3JlYXRlUmV0dXJuKHRzLmNyZWF0ZUFycmF5TGl0ZXJhbChbdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnJyksIG5hbWVdKSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uc3BsaXROYW1lc3BhY2UsIFtdLCBbZ2V0QW55VHlwZWRQYXJhbWV0ZXIobmFtZSldLCB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhbaWZTdGF0ZW1lbnQsIGVsc2VSZXR1cm5dLCB0cnVlKSk7XG59XG4iXX0=
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JlbmRlcmVyLXRvLXJlbmRlcmVyMi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQWlCNUIsMkRBQTJEO0lBQzNELFNBQWdCLFNBQVMsQ0FDckIsSUFBb0IsRUFBRSxVQUF5QixFQUFFLE9BQW1CO1FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pHLENBQUM7SUFKRCw4QkFJQztJQUVELG9FQUFvRTtJQUNwRSxTQUFTLG9CQUFvQixDQUFDLElBQW9CO1FBQ2hELFFBQVEsSUFBSSxFQUFFO1lBQ1o7Z0JBQ0UsT0FBTyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9CO2dCQUNFLE9BQU8sc0JBQXNCLEVBQUUsQ0FBQztZQUNsQztnQkFDRSxPQUFPLG1CQUFtQixFQUFFLENBQUM7WUFDL0I7Z0JBQ0UsT0FBTyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3pDO2dCQUNFLE9BQU8scUJBQXFCLEVBQUUsQ0FBQztZQUNqQztnQkFDRSxPQUFPLGdCQUFnQixFQUFFLENBQUM7WUFDNUI7Z0JBQ0UsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hDO2dCQUNFLE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztZQUMvQjtnQkFDRSxPQUFPLHdCQUF3QixFQUFFLENBQUM7WUFDcEM7Z0JBQ0UsT0FBTyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3hDO2dCQUNFLE9BQU8sdUJBQXVCLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxxRUFBcUU7SUFDckUsU0FBUyxtQkFBbUI7UUFDMUIseUNBQXlDO1FBQ3pDLE9BQU8sb0JBQUUsQ0FBQywwQkFBMEIsQ0FDaEMsRUFBRSxFQUFFLEVBQUUsMENBQXNCLEVBQUUsRUFBRSxvQkFBRSxDQUFDLHFCQUFxQixDQUFDLG9CQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxTQUFTLG9CQUFvQixDQUN6QixhQUFtQyxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ3hELHdGQUF3RjtRQUN4RixnR0FBZ0c7UUFDaEcsc0ZBQXNGO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLG9CQUFFLENBQUMsdUJBQXVCLHlDQUFxQixFQUFFLENBQUMsQ0FBQztRQUNoRSxPQUFPLG9CQUFFLENBQUMsZUFBZSxDQUNyQixFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQ2hDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxvQkFBRSxDQUFDLFdBQVcsQ0FBQyxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLFNBQVMsc0JBQXNCO1FBQzdCLE1BQU0sUUFBUSxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxNQUFNLGdCQUFnQixHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRSxNQUFNLElBQUksR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkQsd0RBQXdEO1FBQ3hELE1BQU0sd0JBQXdCLEdBQUcsb0JBQUUsQ0FBQyx5QkFBeUIsQ0FDekQsb0JBQUUsQ0FBQyx5QkFBeUIsQ0FDeEIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDbkYsU0FBUyxFQUNULG9CQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFFLENBQUMsZ0JBQWdCLHlEQUErQixFQUFFLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9GLDZDQUE2QztRQUM3QyxNQUFNLFlBQVksR0FDZCxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU3RixPQUFPLGlCQUFpQix3REFDVSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQ2hGLENBQUMsb0JBQUUsQ0FBQyx1QkFBdUIsQ0FDdkIsU0FBUyxFQUNULG9CQUFFLENBQUMsNkJBQTZCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLG9CQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsU0FBUyxtQkFBbUI7UUFDMUIsTUFBTSxRQUFRLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsZ0NBQWdDO1FBQ2hDLE1BQU0sWUFBWSxHQUFHLG9CQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFakcsT0FBTyxpQkFBaUIsa0RBQTRCLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELFNBQVMsNkJBQTZCO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3QyxnQ0FBZ0M7UUFDaEMsTUFBTSxZQUFZLEdBQUcsb0JBQUUsQ0FBQyxVQUFVLENBQzlCLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLG9CQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFGLE9BQU8saUJBQWlCLHNFQUFzQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLGlCQUFpQixDQUN0QixZQUE0QixFQUFFLFlBQStCLEVBQUUsUUFBdUIsRUFDdEYsTUFBcUIsRUFBRSxrQkFBbUMsRUFBRSxFQUM1RCxxQkFBNkMsRUFBRTtRQUNqRCxNQUFNLElBQUksR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLG1DQUFtQztRQUNuQyxNQUFNLHFCQUFxQixHQUFHLG9CQUFFLENBQUMsdUJBQXVCLENBQ3BELFNBQVMsRUFDVCxvQkFBRSxDQUFDLDZCQUE2QixDQUM1QixDQUFDLG9CQUFFLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLG9CQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFNUYsd0RBQXdEO1FBQ3hELE1BQU0sc0JBQXNCLEdBQUcsb0JBQUUsQ0FBQyxRQUFRLENBQ3RDLE1BQU0sRUFDTixvQkFBRSxDQUFDLFdBQVcsQ0FDVixDQUFDLG9CQUFFLENBQUMseUJBQXlCLENBQ3pCLG9CQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekYsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVmLE9BQU8sb0JBQUUsQ0FBQyx5QkFBeUIsQ0FDL0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFDbkMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQ3pGLG9CQUFFLENBQUMsV0FBVyxDQUNWO1lBQ0UsR0FBRyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0I7WUFDcEUsb0JBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1NBQ3RCLEVBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLFNBQVMscUJBQXFCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsMkNBQTJDO1FBQzNDLDRDQUE0QztRQUM1QyxJQUFJO1FBQ0osTUFBTSxlQUFlLEdBQUcsb0JBQUUsQ0FBQyw2QkFBNkIsQ0FDcEQsQ0FBQyxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLG9CQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLG9CQUFFLENBQUMsWUFBWSxDQUNqQyxXQUFXLEVBQUUsb0JBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUN4QyxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLGVBQWUsR0FBRyxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLG9CQUFFLENBQUMsVUFBVSxDQUM5RCxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQ3BELENBQUMsTUFBTSxFQUFFLG9CQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLG9CQUFFLENBQUMsU0FBUyxDQUNyQixlQUFlLEVBQUUsYUFBYSxFQUFFLG9CQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFDMUYsb0JBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkMsT0FBTyxvQkFBRSxDQUFDLHlCQUF5QixDQUMvQixFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsdURBQStCLEVBQUUsRUFDbEQsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUM1RSxvQkFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxTQUFTLGdCQUFnQjtRQUN2QiwwQkFBMEI7UUFDMUIsTUFBTSxjQUFjLEdBQUcsb0JBQUUsQ0FBQyxXQUFXLENBQUMsb0JBQUUsQ0FBQyxTQUFTLENBQzlDLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUNoQyxDQUFDLG9CQUFFLENBQUMsbUJBQW1CLENBQUMsMENBQTBDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRSxPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyw2Q0FBMEIsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQzVELG9CQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLFNBQVMsb0JBQW9CO1FBQzNCLE1BQU0sUUFBUSxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdDLDhDQUE4QztRQUM5Qyx1Q0FBdUM7UUFDdkMsSUFBSTtRQUNKLE1BQU0sZUFBZSxHQUFHLG9CQUFFLENBQUMsNkJBQTZCLENBQ3BELENBQUMsb0JBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNwRixvQkFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixNQUFNLGFBQWEsR0FBRyxvQkFBRSxDQUFDLFlBQVksQ0FDakMsV0FBVyxFQUFFLG9CQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDeEMsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLG9CQUFFLENBQUMsVUFBVSxDQUMvRCxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQ3BELENBQUMsb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQUcsb0JBQUUsQ0FBQyxTQUFTLENBQ3JCLGVBQWUsRUFBRSxhQUFhLEVBQUUsb0JBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLG9CQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUMxRixvQkFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhDLE9BQU8sb0JBQUUsQ0FBQyx5QkFBeUIsQ0FDL0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLHFEQUE4QixFQUFFLEVBQ2pELENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUN2RSxvQkFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxTQUFTLG1CQUFtQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsTUFBTSxXQUFXLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLCtDQUErQztRQUMvQywrQkFBK0I7UUFDL0IsMkRBQTJEO1FBQzNELElBQUk7UUFDSixNQUFNLGVBQWUsR0FBRyxvQkFBRSxDQUFDLDZCQUE2QixDQUNwRCxDQUFDLG9CQUFFLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDcEYsb0JBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxhQUFhLEdBQUcsb0JBQUUsQ0FBQyxZQUFZLENBQ2pDLFdBQVcsRUFBRSxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQ3hDLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLDZCQUE2QjtRQUM3QixNQUFNLHFCQUFxQixHQUFHLG9CQUFFLENBQUMsdUJBQXVCLENBQ3BELFNBQVMsRUFDVCxvQkFBRSxDQUFDLDZCQUE2QixDQUM1QixDQUFDLG9CQUFFLENBQUMseUJBQXlCLENBQ3pCLElBQUksRUFBRSxTQUFTLEVBQUUsb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNyRSxvQkFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdCLHlEQUF5RDtRQUN6RCxNQUFNLFVBQVUsR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FDNUIsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUNwRCxDQUFDLG9CQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4RixNQUFNLElBQUksR0FBRyxvQkFBRSxDQUFDLFNBQVMsQ0FDckIsZUFBZSxFQUFFLGFBQWEsRUFBRSxvQkFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsb0JBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQzFGLG9CQUFFLENBQUMsV0FBVyxDQUFDLENBQUMscUJBQXFCLEVBQUUsb0JBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RixPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxtREFBNkIsRUFBRSxFQUNoRCxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFDeEUsb0JBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsU0FBUyx3QkFBd0I7UUFDL0IsTUFBTSxRQUFRLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxNQUFNLFdBQVcsR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sV0FBVyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLFNBQXdCLEVBQUUsWUFBb0IsRUFBRSxFQUFFO1lBQzlGLE9BQU8sb0JBQUUsQ0FBQyx1QkFBdUIsQ0FDN0IsU0FBUyxFQUNULG9CQUFFLENBQUMsNkJBQTZCLENBQzVCLENBQUMsb0JBQUUsQ0FBQyx5QkFBeUIsQ0FDekIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsb0JBQUUsQ0FBQyxVQUFVLENBQUMsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hGLG9CQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsNENBQTRDO1FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsb0NBQW9DLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTNGLGtEQUFrRDtRQUNsRCxNQUFNLDRCQUE0QixHQUM5QixvQ0FBb0MsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFckUsK0NBQStDO1FBQy9DLHFFQUFxRTtRQUNyRSxJQUFJO1FBQ0osTUFBTSxlQUFlLEdBQUcsb0JBQUUsQ0FBQyw2QkFBNkIsQ0FDcEQsQ0FBQyxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3BGLG9CQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLG9CQUFFLENBQUMsWUFBWSxDQUNqQyxXQUFXLEVBQUUsb0JBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUN4QyxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLGdCQUFnQixHQUFHLG9CQUFFLENBQUMsVUFBVSxDQUNsQyxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQ3JELENBQUMsTUFBTSxFQUFFLG9CQUFFLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsb0JBQUUsQ0FBQyxTQUFTLENBQ3JCLGVBQWUsRUFBRSxhQUFhLEVBQUUsb0JBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLG9CQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUMxRixvQkFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFFLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RSxPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyw2REFBa0MsRUFBRSxFQUNyRCxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQzlFLG9CQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsaURBQWlEO0lBQ2pELFNBQVMsNEJBQTRCO1FBQ25DLE1BQU0sUUFBUSxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLGdCQUFnQixHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRSxNQUFNLEtBQUssR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsb0JBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCx3REFBd0Q7UUFDeEQsTUFBTSx3QkFBd0IsR0FBRyxvQkFBRSxDQUFDLHlCQUF5QixDQUN6RCxvQkFBRSxDQUFDLHlCQUF5QixDQUN4QixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNuRixTQUFTLEVBQ1Qsb0JBQUUsQ0FBQyxVQUFVLENBQUMsb0JBQUUsQ0FBQyxnQkFBZ0IseURBQStCLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0YsMERBQTBEO1FBQzFELE1BQU0sT0FBTyxHQUFHLG9CQUFFLENBQUMsVUFBVSxDQUN6QixvQkFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTlGLHNEQUFzRDtRQUN0RCxNQUFNLFVBQVUsR0FBRyxvQkFBRSxDQUFDLFVBQVUsQ0FDNUIsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFMUYsdURBQXVEO1FBQ3ZELE1BQU0sV0FBVyxHQUFHLG9CQUFFLENBQUMsUUFBUSxDQUMzQixvQkFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsb0JBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsb0JBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUM3RSxvQkFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFFLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDN0Qsb0JBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV0RSxNQUFNLFlBQVksR0FBRyxvQkFBRSxDQUFDLFdBQVcsQ0FDL0I7WUFDRSxvQkFBRSxDQUFDLHVCQUF1QixDQUN0QixTQUFTLEVBQ1Qsb0JBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsb0JBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckYsV0FBVztTQUNaLEVBQ0QsSUFBSSxDQUFDLENBQUM7UUFFVixPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxxRUFBc0MsRUFBRSxFQUN6RDtZQUNFLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztZQUM3RCxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7U0FDM0UsRUFDRCxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxTQUFTLHVCQUF1QjtRQUM5QixNQUFNLElBQUksR0FBRyxvQkFBRSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsb0JBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLG9CQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckYsbUNBQW1DO1FBQ25DLE1BQU0sYUFBYSxHQUFHLG9CQUFFLENBQUMsNkJBQTZCLENBQ2xELENBQUMsb0JBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsb0JBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckYsK0JBQStCO1FBQy9CLE1BQU0sV0FBVyxHQUFHLG9CQUFFLENBQUMsWUFBWSxDQUMvQixvQkFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakcsMERBQTBEO1FBQzFELE1BQU0sV0FBVyxHQUFHLG9CQUFFLENBQUMsUUFBUSxDQUMzQixvQkFBRSxDQUFDLFlBQVksQ0FDWCxvQkFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxvQkFBRSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFDdEUsb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNoQyxvQkFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFeEYscUJBQXFCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLG9CQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxvQkFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RixPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUywyREFBaUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQzdGLG9CQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKiBOYW1lcyBvZiB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIHRoaXMgbWlncmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gSGVscGVyRnVuY3Rpb24ge1xuICBhbnkgPSAnQW55RHVyaW5nUmVuZGVyZXJNaWdyYXRpb24nLFxuICBjcmVhdGVFbGVtZW50ID0gJ19fbmdSZW5kZXJlckNyZWF0ZUVsZW1lbnRIZWxwZXInLFxuICBjcmVhdGVUZXh0ID0gJ19fbmdSZW5kZXJlckNyZWF0ZVRleHRIZWxwZXInLFxuICBjcmVhdGVUZW1wbGF0ZUFuY2hvciA9ICdfX25nUmVuZGVyZXJDcmVhdGVUZW1wbGF0ZUFuY2hvckhlbHBlcicsXG4gIHByb2plY3ROb2RlcyA9ICdfX25nUmVuZGVyZXJQcm9qZWN0Tm9kZXNIZWxwZXInLFxuICBhbmltYXRlID0gJ19fbmdSZW5kZXJlckFuaW1hdGVIZWxwZXInLFxuICBkZXN0cm95VmlldyA9ICdfX25nUmVuZGVyZXJEZXN0cm95Vmlld0hlbHBlcicsXG4gIGRldGFjaFZpZXcgPSAnX19uZ1JlbmRlcmVyRGV0YWNoVmlld0hlbHBlcicsXG4gIGF0dGFjaFZpZXdBZnRlciA9ICdfX25nUmVuZGVyZXJBdHRhY2hWaWV3QWZ0ZXJIZWxwZXInLFxuICBzcGxpdE5hbWVzcGFjZSA9ICdfX25nUmVuZGVyZXJTcGxpdE5hbWVzcGFjZUhlbHBlcicsXG4gIHNldEVsZW1lbnRBdHRyaWJ1dGUgPSAnX19uZ1JlbmRlcmVyU2V0RWxlbWVudEF0dHJpYnV0ZUhlbHBlcidcbn1cblxuLyoqIEdldHMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGhlbHBlciBmdW5jdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWxwZXIoXG4gICAgbmFtZTogSGVscGVyRnVuY3Rpb24sIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHByaW50ZXI6IHRzLlByaW50ZXIpOiBzdHJpbmcge1xuICBjb25zdCBoZWxwZXJEZWNsYXJhdGlvbiA9IGdldEhlbHBlckRlY2xhcmF0aW9uKG5hbWUpO1xuICByZXR1cm4gJ1xcbicgKyBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgaGVscGVyRGVjbGFyYXRpb24sIHNvdXJjZUZpbGUpICsgJ1xcbic7XG59XG5cbi8qKiBDcmVhdGVzIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgaGVscGVyIG5hbWUuICovXG5mdW5jdGlvbiBnZXRIZWxwZXJEZWNsYXJhdGlvbihuYW1lOiBIZWxwZXJGdW5jdGlvbik6IHRzLk5vZGUge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmFueTpcbiAgICAgIHJldHVybiBjcmVhdGVBbnlUeXBlSGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5jcmVhdGVFbGVtZW50OlxuICAgICAgcmV0dXJuIGdldENyZWF0ZUVsZW1lbnRIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRleHQ6XG4gICAgICByZXR1cm4gZ2V0Q3JlYXRlVGV4dEhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uY3JlYXRlVGVtcGxhdGVBbmNob3I6XG4gICAgICByZXR1cm4gZ2V0Q3JlYXRlVGVtcGxhdGVBbmNob3JIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLnByb2plY3ROb2RlczpcbiAgICAgIHJldHVybiBnZXRQcm9qZWN0Tm9kZXNIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmFuaW1hdGU6XG4gICAgICByZXR1cm4gZ2V0QW5pbWF0ZUhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uZGVzdHJveVZpZXc6XG4gICAgICByZXR1cm4gZ2V0RGVzdHJveVZpZXdIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmRldGFjaFZpZXc6XG4gICAgICByZXR1cm4gZ2V0RGV0YWNoVmlld0hlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uYXR0YWNoVmlld0FmdGVyOlxuICAgICAgcmV0dXJuIGdldEF0dGFjaFZpZXdBZnRlckhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uc2V0RWxlbWVudEF0dHJpYnV0ZTpcbiAgICAgIHJldHVybiBnZXRTZXRFbGVtZW50QXR0cmlidXRlSGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZTpcbiAgICAgIHJldHVybiBnZXRTcGxpdE5hbWVzcGFjZUhlbHBlcigpO1xuICB9XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBhIGN1c3RvbSBgYW55YCB0eXBlIGR1cmluZyB0aGUgbWlncmF0aW9uLiAqL1xuZnVuY3Rpb24gY3JlYXRlQW55VHlwZUhlbHBlcigpOiB0cy5UeXBlQWxpYXNEZWNsYXJhdGlvbiB7XG4gIC8vIHR5cGUgQW55RHVyaW5nUmVuZGVyZXJNaWdyYXRpb24gPSBhbnk7XG4gIHJldHVybiB0cy5jcmVhdGVUeXBlQWxpYXNEZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgSGVscGVyRnVuY3Rpb24uYW55LCBbXSwgdHMuY3JlYXRlS2V5d29yZFR5cGVOb2RlKHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHBhcmFtZXRlciB0aGF0IGlzIHR5cGVkIGFzIGBhbnlgLiAqL1xuZnVuY3Rpb24gZ2V0QW55VHlwZWRQYXJhbWV0ZXIoXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nfHRzLklkZW50aWZpZXIsIGlzUmVxdWlyZWQgPSB0cnVlKTogdHMuUGFyYW1ldGVyRGVjbGFyYXRpb24ge1xuICAvLyBEZWNsYXJlIHRoZSBwYXJhbWV0ZXIgYXMgYGFueWAgc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgZXh0cmEgbG9naWMgdG8gZW5zdXJlIHRoYXQgdGhlXG4gIC8vIGdlbmVyYXRlZCBjb2RlIHdpbGwgcGFzcyB0eXBlIGNoZWNraW5nLiBVc2Ugb3VyIGN1c3RvbSBgYW55YCB0eXBlIHNvIHBlb3BsZSBoYXZlIGFuIGluY2VudGl2ZVxuICAvLyB0byBjbGVhbiBpdCB1cCBhZnRlcndhcmRzIGFuZCB0byBhdm9pZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBsaW50IHdhcm5pbmdzIGluIEczLlxuICBjb25zdCB0eXBlID0gdHMuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoSGVscGVyRnVuY3Rpb24uYW55LCBbXSk7XG4gIHJldHVybiB0cy5jcmVhdGVQYXJhbWV0ZXIoXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgcGFyYW1ldGVyTmFtZSxcbiAgICAgIGlzUmVxdWlyZWQgPyB1bmRlZmluZWQgOiB0cy5jcmVhdGVUb2tlbih0cy5TeW50YXhLaW5kLlF1ZXN0aW9uVG9rZW4pLCB0eXBlKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBjcmVhdGVFbGVtZW50YC4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZUVsZW1lbnRIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lc3BhY2VBbmROYW1lJyk7XG4gIGNvbnN0IG5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lJyk7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWVzcGFjZScpO1xuXG4gIC8vIFtuYW1lc3BhY2UsIG5hbWVdID0gc3BsaXROYW1lc3BhY2UobmFtZXNwYWNlQW5kTmFtZSk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWVWYXJpYWJsZSA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICB0cy5jcmVhdGVBcnJheUJpbmRpbmdQYXR0ZXJuKFxuICAgICAgICAgIFtuYW1lc3BhY2UsIG5hbWVdLm1hcChpZCA9PiB0cy5jcmVhdGVCaW5kaW5nRWxlbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgaWQpKSksXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZUlkZW50aWZpZXIoSGVscGVyRnVuY3Rpb24uc3BsaXROYW1lc3BhY2UpLCBbXSwgW25hbWVzcGFjZUFuZE5hbWVdKSk7XG5cbiAgLy8gYHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKWAuXG4gIGNvbnN0IGNyZWF0aW9uQ2FsbCA9XG4gICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnY3JlYXRlRWxlbWVudCcpLCBbXSwgW25hbWUsIG5hbWVzcGFjZV0pO1xuXG4gIHJldHVybiBnZXRDcmVhdGlvbkhlbHBlcihcbiAgICAgIEhlbHBlckZ1bmN0aW9uLmNyZWF0ZUVsZW1lbnQsIGNyZWF0aW9uQ2FsbCwgcmVuZGVyZXIsIHBhcmVudCwgW25hbWVzcGFjZUFuZE5hbWVdLFxuICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChbbmFtZXNwYWNlQW5kTmFtZVZhcmlhYmxlXSwgdHMuTm9kZUZsYWdzLkNvbnN0KSldKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBjcmVhdGVUZXh0YC4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZVRleHRIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IHZhbHVlID0gdHMuY3JlYXRlSWRlbnRpZmllcigndmFsdWUnKTtcblxuICAvLyBgcmVuZGVyZXIuY3JlYXRlVGV4dCh2YWx1ZSlgLlxuICBjb25zdCBjcmVhdGlvbkNhbGwgPSB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnY3JlYXRlVGV4dCcpLCBbXSwgW3ZhbHVlXSk7XG5cbiAgcmV0dXJuIGdldENyZWF0aW9uSGVscGVyKEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRleHQsIGNyZWF0aW9uQ2FsbCwgcmVuZGVyZXIsIHBhcmVudCwgW3ZhbHVlXSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgY3JlYXRlVGVtcGxhdGVBbmNob3JgLiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRlVGVtcGxhdGVBbmNob3JIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG5cbiAgLy8gYHJlbmRlcmVyLmNyZWF0ZUNvbW1lbnQoJycpYC5cbiAgY29uc3QgY3JlYXRpb25DYWxsID0gdHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnY3JlYXRlQ29tbWVudCcpLCBbXSwgW3RzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoJycpXSk7XG5cbiAgcmV0dXJuIGdldENyZWF0aW9uSGVscGVyKEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRlbXBsYXRlQW5jaG9yLCBjcmVhdGlvbkNhbGwsIHJlbmRlcmVyLCBwYXJlbnQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvciBhIGNyZWF0aW9uIGhlbHBlci4gVGhpcyBpcyByZXVzZWQgYmV0d2VlbiBgY3JlYXRlRWxlbWVudGAsXG4gKiBgY3JlYXRlVGV4dGAgYW5kIGBjcmVhdGVUZW1wbGF0ZUFuY2hvcmAgd2hpY2ggZm9sbG93IGEgdmVyeSBzaW1pbGFyIHBhdHRlcm4uXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIEZ1bmN0aW9uIHRoYXQgdGhlIGhlbHBlciBzaG91bGQgaGF2ZS5cbiAqIEBwYXJhbSBjcmVhdGlvbkNhbGwgRXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIGEgbm9kZSBpbnNpZGUgdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHJlbmRlcmVyUGFyYW1ldGVyIFBhcmFtZXRlciBmb3IgdGhlIGByZW5kZXJlcmAuXG4gKiBAcGFyYW0gcGFyZW50UGFyYW1ldGVyIFBhcmFtZXRlciBmb3IgdGhlIGBwYXJlbnRgIGluc2lkZSB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZXh0cmFQYXJhbWV0ZXJzIEV4dHJhIHBhcmFtZXRlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIGVuZC5cbiAqIEBwYXJhbSBwcmVjZWRpbmdWYXJpYWJsZXMgRXh0cmEgdmFyaWFibGVzIHRvIGJlIGFkZGVkIGJlZm9yZSB0aGUgb25lIHRoYXQgY3JlYXRlcyB0aGUgYG5vZGVgLlxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGlvbkhlbHBlcihcbiAgICBmdW5jdGlvbk5hbWU6IEhlbHBlckZ1bmN0aW9uLCBjcmVhdGlvbkNhbGw6IHRzLkNhbGxFeHByZXNzaW9uLCByZW5kZXJlcjogdHMuSWRlbnRpZmllcixcbiAgICBwYXJlbnQ6IHRzLklkZW50aWZpZXIsIGV4dHJhUGFyYW1ldGVyczogdHMuSWRlbnRpZmllcltdID0gW10sXG4gICAgcHJlY2VkaW5nVmFyaWFibGVzOiB0cy5WYXJpYWJsZVN0YXRlbWVudFtdID0gW10pOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3Qgbm9kZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25vZGUnKTtcblxuICAvLyBgY29uc3Qgbm9kZSA9IHt7Y3JlYXRpb25DYWxsfX1gLlxuICBjb25zdCBub2RlVmFyaWFibGVTdGF0ZW1lbnQgPSB0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIHVuZGVmaW5lZCwgY3JlYXRpb25DYWxsKV0sIHRzLk5vZGVGbGFncy5Db25zdCkpO1xuXG4gIC8vIGBpZiAocGFyZW50KSB7IHJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgbm9kZSkgfWAuXG4gIGNvbnN0IGd1YXJkZWRBcHBlbmRDaGlsZENhbGwgPSB0cy5jcmVhdGVJZihcbiAgICAgIHBhcmVudCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFxuICAgICAgICAgIFt0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICAgICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnYXBwZW5kQ2hpbGQnKSwgW10sIFtwYXJlbnQsIG5vZGVdKSldLFxuICAgICAgICAgIHRydWUpKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBmdW5jdGlvbk5hbWUsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBwYXJlbnQsIC4uLmV4dHJhUGFyYW1ldGVyc10ubWFwKG5hbWUgPT4gZ2V0QW55VHlwZWRQYXJhbWV0ZXIobmFtZSkpLCB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhcbiAgICAgICAgICBbXG4gICAgICAgICAgICAuLi5wcmVjZWRpbmdWYXJpYWJsZXMsIG5vZGVWYXJpYWJsZVN0YXRlbWVudCwgZ3VhcmRlZEFwcGVuZENoaWxkQ2FsbCxcbiAgICAgICAgICAgIHRzLmNyZWF0ZVJldHVybihub2RlKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHJ1ZSkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYHByb2plY3ROb2Rlc2AuICovXG5mdW5jdGlvbiBnZXRQcm9qZWN0Tm9kZXNIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IG5vZGVzID0gdHMuY3JlYXRlSWRlbnRpZmllcignbm9kZXMnKTtcbiAgY29uc3QgaW5jcmVtZW50b3IgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdpJyk7XG5cbiAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAvLyAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgbm9kZXNbaV0pO1xuICAvLyB9XG4gIGNvbnN0IGxvb3BJbml0aWFsaXplciA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oaW5jcmVtZW50b3IsIHVuZGVmaW5lZCwgdHMuY3JlYXRlTnVtZXJpY0xpdGVyYWwoJzAnKSldLFxuICAgICAgdHMuTm9kZUZsYWdzLkxldCk7XG4gIGNvbnN0IGxvb3BDb25kaXRpb24gPSB0cy5jcmVhdGVCaW5hcnkoXG4gICAgICBpbmNyZW1lbnRvciwgdHMuU3ludGF4S2luZC5MZXNzVGhhblRva2VuLFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3Mobm9kZXMsIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2xlbmd0aCcpKSk7XG4gIGNvbnN0IGFwcGVuZFN0YXRlbWVudCA9IHRzLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnYXBwZW5kQ2hpbGQnKSwgW10sXG4gICAgICBbcGFyZW50LCB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKG5vZGVzLCBpbmNyZW1lbnRvcildKSk7XG4gIGNvbnN0IGxvb3AgPSB0cy5jcmVhdGVGb3IoXG4gICAgICBsb29wSW5pdGlhbGl6ZXIsIGxvb3BDb25kaXRpb24sIHRzLmNyZWF0ZVBvc3RmaXgoaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuUGx1c1BsdXNUb2tlbiksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbYXBwZW5kU3RhdGVtZW50XSkpO1xuXG4gIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIEhlbHBlckZ1bmN0aW9uLnByb2plY3ROb2RlcywgW10sXG4gICAgICBbcmVuZGVyZXIsIHBhcmVudCwgbm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2xvb3BdLCB0cnVlKSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgYW5pbWF0ZWAuICovXG5mdW5jdGlvbiBnZXRBbmltYXRlSGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICAvLyB0aHJvdyBuZXcgRXJyb3IoJy4uLicpO1xuICBjb25zdCB0aHJvd1N0YXRlbWVudCA9IHRzLmNyZWF0ZVRocm93KHRzLmNyZWF0ZU5ldyhcbiAgICAgIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ0Vycm9yJyksIFtdLFxuICAgICAgW3RzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoJ1JlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEnKV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5hbmltYXRlLCBbXSwgW10sIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFt0aHJvd1N0YXRlbWVudF0sIHRydWUpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBkZXN0cm95Vmlld2AuICovXG5mdW5jdGlvbiBnZXREZXN0cm95Vmlld0hlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3QgcmVuZGVyZXIgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdyZW5kZXJlcicpO1xuICBjb25zdCBhbGxOb2RlcyA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2FsbE5vZGVzJyk7XG4gIGNvbnN0IGluY3JlbWVudG9yID0gdHMuY3JlYXRlSWRlbnRpZmllcignaScpO1xuXG4gIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICByZW5kZXJlci5kZXN0cm95Tm9kZShhbGxOb2Rlc1tpXSk7XG4gIC8vIH1cbiAgY29uc3QgbG9vcEluaXRpYWxpemVyID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihpbmNyZW1lbnRvciwgdW5kZWZpbmVkLCB0cy5jcmVhdGVOdW1lcmljTGl0ZXJhbCgnMCcpKV0sXG4gICAgICB0cy5Ob2RlRmxhZ3MuTGV0KTtcbiAgY29uc3QgbG9vcENvbmRpdGlvbiA9IHRzLmNyZWF0ZUJpbmFyeShcbiAgICAgIGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLkxlc3NUaGFuVG9rZW4sXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhhbGxOb2RlcywgdHMuY3JlYXRlSWRlbnRpZmllcignbGVuZ3RoJykpKTtcbiAgY29uc3QgZGVzdHJveVN0YXRlbWVudCA9IHRzLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnZGVzdHJveU5vZGUnKSwgW10sXG4gICAgICBbdHMuY3JlYXRlRWxlbWVudEFjY2VzcyhhbGxOb2RlcywgaW5jcmVtZW50b3IpXSkpO1xuICBjb25zdCBsb29wID0gdHMuY3JlYXRlRm9yKFxuICAgICAgbG9vcEluaXRpYWxpemVyLCBsb29wQ29uZGl0aW9uLCB0cy5jcmVhdGVQb3N0Zml4KGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW4pLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2Rlc3Ryb3lTdGF0ZW1lbnRdKSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uZGVzdHJveVZpZXcsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBhbGxOb2Rlc10ubWFwKG5hbWUgPT4gZ2V0QW55VHlwZWRQYXJhbWV0ZXIobmFtZSkpLCB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhbbG9vcF0sIHRydWUpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBkZXRhY2hWaWV3YC4gKi9cbmZ1bmN0aW9uIGdldERldGFjaFZpZXdIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3Qgcm9vdE5vZGVzID0gdHMuY3JlYXRlSWRlbnRpZmllcigncm9vdE5vZGVzJyk7XG4gIGNvbnN0IGluY3JlbWVudG9yID0gdHMuY3JlYXRlSWRlbnRpZmllcignaScpO1xuICBjb25zdCBub2RlID0gdHMuY3JlYXRlSWRlbnRpZmllcignbm9kZScpO1xuXG4gIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcm9vdE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgY29uc3Qgbm9kZSA9IHJvb3ROb2Rlc1tpXTtcbiAgLy8gICByZW5kZXJlci5yZW1vdmVDaGlsZChyZW5kZXJlci5wYXJlbnROb2RlKG5vZGUpLCBub2RlKTtcbiAgLy8gfVxuICBjb25zdCBsb29wSW5pdGlhbGl6ZXIgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGluY3JlbWVudG9yLCB1bmRlZmluZWQsIHRzLmNyZWF0ZU51bWVyaWNMaXRlcmFsKCcwJykpXSxcbiAgICAgIHRzLk5vZGVGbGFncy5MZXQpO1xuICBjb25zdCBsb29wQ29uZGl0aW9uID0gdHMuY3JlYXRlQmluYXJ5KFxuICAgICAgaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbixcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJvb3ROb2RlcywgdHMuY3JlYXRlSWRlbnRpZmllcignbGVuZ3RoJykpKTtcblxuICAvLyBjb25zdCBub2RlID0gcm9vdE5vZGVzW2ldO1xuICBjb25zdCBub2RlVmFyaWFibGVTdGF0ZW1lbnQgPSB0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICBub2RlLCB1bmRlZmluZWQsIHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3Mocm9vdE5vZGVzLCBpbmNyZW1lbnRvcikpXSxcbiAgICAgICAgICB0cy5Ob2RlRmxhZ3MuQ29uc3QpKTtcbiAgLy8gcmVuZGVyZXIucmVtb3ZlQ2hpbGQocmVuZGVyZXIucGFyZW50Tm9kZShub2RlKSwgbm9kZSk7XG4gIGNvbnN0IHJlbW92ZUNhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdyZW1vdmVDaGlsZCcpLCBbXSxcbiAgICAgIFt0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAncGFyZW50Tm9kZScpLCBbXSwgW25vZGVdKSwgbm9kZV0pO1xuXG4gIGNvbnN0IGxvb3AgPSB0cy5jcmVhdGVGb3IoXG4gICAgICBsb29wSW5pdGlhbGl6ZXIsIGxvb3BDb25kaXRpb24sIHRzLmNyZWF0ZVBvc3RmaXgoaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuUGx1c1BsdXNUb2tlbiksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbbm9kZVZhcmlhYmxlU3RhdGVtZW50LCB0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHJlbW92ZUNhbGwpXSkpO1xuXG4gIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIEhlbHBlckZ1bmN0aW9uLmRldGFjaFZpZXcsIFtdLFxuICAgICAgW3JlbmRlcmVyLCByb290Tm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2xvb3BdLCB0cnVlKSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgYXR0YWNoVmlld0FmdGVyYCAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoVmlld0FmdGVySGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IG5vZGUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdub2RlJyk7XG4gIGNvbnN0IHJvb3ROb2RlcyA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3Jvb3ROb2RlcycpO1xuICBjb25zdCBwYXJlbnQgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdwYXJlbnQnKTtcbiAgY29uc3QgbmV4dFNpYmxpbmcgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduZXh0U2libGluZycpO1xuICBjb25zdCBpbmNyZW1lbnRvciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2knKTtcbiAgY29uc3QgY3JlYXRlQ29uc3RXaXRoTWV0aG9kQ2FsbEluaXRpYWxpemVyID0gKGNvbnN0TmFtZTogdHMuSWRlbnRpZmllciwgbWV0aG9kVG9DYWxsOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgICBjb25zdE5hbWUsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCBtZXRob2RUb0NhbGwpLCBbXSwgW25vZGVdKSldLFxuICAgICAgICAgICAgdHMuTm9kZUZsYWdzLkNvbnN0KSk7XG4gIH07XG5cbiAgLy8gY29uc3QgcGFyZW50ID0gcmVuZGVyZXIucGFyZW50Tm9kZShub2RlKTtcbiAgY29uc3QgcGFyZW50VmFyaWFibGVTdGF0ZW1lbnQgPSBjcmVhdGVDb25zdFdpdGhNZXRob2RDYWxsSW5pdGlhbGl6ZXIocGFyZW50LCAncGFyZW50Tm9kZScpO1xuXG4gIC8vIGNvbnN0IG5leHRTaWJsaW5nID0gcmVuZGVyZXIubmV4dFNpYmxpbmcobm9kZSk7XG4gIGNvbnN0IG5leHRTaWJsaW5nVmFyaWFibGVTdGF0ZW1lbnQgPVxuICAgICAgY3JlYXRlQ29uc3RXaXRoTWV0aG9kQ2FsbEluaXRpYWxpemVyKG5leHRTaWJsaW5nLCAnbmV4dFNpYmxpbmcnKTtcblxuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHJvb3ROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAvLyAgIHJlbmRlcmVyLmluc2VydEJlZm9yZShwYXJlbnRFbGVtZW50LCByb290Tm9kZXNbaV0sIG5leHRTaWJsaW5nKTtcbiAgLy8gfVxuICBjb25zdCBsb29wSW5pdGlhbGl6ZXIgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGluY3JlbWVudG9yLCB1bmRlZmluZWQsIHRzLmNyZWF0ZU51bWVyaWNMaXRlcmFsKCcwJykpXSxcbiAgICAgIHRzLk5vZGVGbGFncy5MZXQpO1xuICBjb25zdCBsb29wQ29uZGl0aW9uID0gdHMuY3JlYXRlQmluYXJ5KFxuICAgICAgaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbixcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJvb3ROb2RlcywgdHMuY3JlYXRlSWRlbnRpZmllcignbGVuZ3RoJykpKTtcbiAgY29uc3QgaW5zZXJ0QmVmb3JlQ2FsbCA9IHRzLmNyZWF0ZUNhbGwoXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2luc2VydEJlZm9yZScpLCBbXSxcbiAgICAgIFtwYXJlbnQsIHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3Mocm9vdE5vZGVzLCBpbmNyZW1lbnRvciksIG5leHRTaWJsaW5nXSk7XG4gIGNvbnN0IGxvb3AgPSB0cy5jcmVhdGVGb3IoXG4gICAgICBsb29wSW5pdGlhbGl6ZXIsIGxvb3BDb25kaXRpb24sIHRzLmNyZWF0ZVBvc3RmaXgoaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuUGx1c1BsdXNUb2tlbiksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChpbnNlcnRCZWZvcmVDYWxsKV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5hdHRhY2hWaWV3QWZ0ZXIsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBub2RlLCByb290Tm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW3BhcmVudFZhcmlhYmxlU3RhdGVtZW50LCBuZXh0U2libGluZ1ZhcmlhYmxlU3RhdGVtZW50LCBsb29wXSwgdHJ1ZSkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYHNldEVsZW1lbnRBdHRyaWJ1dGVgICovXG5mdW5jdGlvbiBnZXRTZXRFbGVtZW50QXR0cmlidXRlSGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IGVsZW1lbnQgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdlbGVtZW50Jyk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lc3BhY2VBbmROYW1lJyk7XG4gIGNvbnN0IHZhbHVlID0gdHMuY3JlYXRlSWRlbnRpZmllcigndmFsdWUnKTtcbiAgY29uc3QgbmFtZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWUnKTtcbiAgY29uc3QgbmFtZXNwYWNlID0gdHMuY3JlYXRlSWRlbnRpZmllcignbmFtZXNwYWNlJyk7XG5cbiAgLy8gW25hbWVzcGFjZSwgbmFtZV0gPSBzcGxpdE5hbWVzcGFjZShuYW1lc3BhY2VBbmROYW1lKTtcbiAgY29uc3QgbmFtZXNwYWNlQW5kTmFtZVZhcmlhYmxlID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgIHRzLmNyZWF0ZUFycmF5QmluZGluZ1BhdHRlcm4oXG4gICAgICAgICAgW25hbWVzcGFjZSwgbmFtZV0ubWFwKGlkID0+IHRzLmNyZWF0ZUJpbmRpbmdFbGVtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpZCkpKSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUNhbGwodHMuY3JlYXRlSWRlbnRpZmllcihIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZSksIFtdLCBbbmFtZXNwYWNlQW5kTmFtZV0pKTtcblxuICAvLyByZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gIGNvbnN0IHNldENhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdzZXRBdHRyaWJ1dGUnKSwgW10sIFtlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG5cbiAgLy8gcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIG5hbWVzcGFjZSk7XG4gIGNvbnN0IHJlbW92ZUNhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdyZW1vdmVBdHRyaWJ1dGUnKSwgW10sIFtlbGVtZW50LCBuYW1lLCBuYW1lc3BhY2VdKTtcblxuICAvLyBpZiAodmFsdWUgIT0gbnVsbCkgeyBzZXRDYWxsKCkgfSBlbHNlIHsgcmVtb3ZlQ2FsbCB9XG4gIGNvbnN0IGlmU3RhdGVtZW50ID0gdHMuY3JlYXRlSWYoXG4gICAgICB0cy5jcmVhdGVCaW5hcnkodmFsdWUsIHRzLlN5bnRheEtpbmQuRXhjbGFtYXRpb25FcXVhbHNUb2tlbiwgdHMuY3JlYXRlTnVsbCgpKSxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFt0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHNldENhbGwpXSwgdHJ1ZSksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChyZW1vdmVDYWxsKV0sIHRydWUpKTtcblxuICBjb25zdCBmdW5jdGlvbkJvZHkgPSB0cy5jcmVhdGVCbG9jayhcbiAgICAgIFtcbiAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChbbmFtZXNwYWNlQW5kTmFtZVZhcmlhYmxlXSwgdHMuTm9kZUZsYWdzLkNvbnN0KSksXG4gICAgICAgIGlmU3RhdGVtZW50XG4gICAgICBdLFxuICAgICAgdHJ1ZSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uc2V0RWxlbWVudEF0dHJpYnV0ZSwgW10sXG4gICAgICBbXG4gICAgICAgIGdldEFueVR5cGVkUGFyYW1ldGVyKHJlbmRlcmVyKSwgZ2V0QW55VHlwZWRQYXJhbWV0ZXIoZWxlbWVudCksXG4gICAgICAgIGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWVzcGFjZUFuZE5hbWUpLCBnZXRBbnlUeXBlZFBhcmFtZXRlcih2YWx1ZSwgZmFsc2UpXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLCBmdW5jdGlvbkJvZHkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3Igc3BsaXR0aW5nIGEgbmFtZSB0aGF0IG1pZ2h0IGNvbnRhaW4gYSBuYW1lc3BhY2UuICovXG5mdW5jdGlvbiBnZXRTcGxpdE5hbWVzcGFjZUhlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3QgbmFtZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWUnKTtcbiAgY29uc3QgbWF0Y2ggPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdtYXRjaCcpO1xuICBjb25zdCByZWdleCA9IHRzLmNyZWF0ZVJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbCgnL146KFteOl0rKTooLispJC8nKTtcbiAgY29uc3QgbWF0Y2hDYWxsID0gdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhuYW1lLCAnbWF0Y2gnKSwgW10sIFtyZWdleF0pO1xuXG4gIC8vIGNvbnN0IG1hdGNoID0gbmFtZS5zcGxpdChyZWdleCk7XG4gIGNvbnN0IG1hdGNoVmFyaWFibGUgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKG1hdGNoLCB1bmRlZmluZWQsIG1hdGNoQ2FsbCldLCB0cy5Ob2RlRmxhZ3MuQ29uc3QpO1xuXG4gIC8vIHJldHVybiBbbWF0Y2hbMV0sIG1hdGNoWzJdXTtcbiAgY29uc3QgbWF0Y2hSZXR1cm4gPSB0cy5jcmVhdGVSZXR1cm4oXG4gICAgICB0cy5jcmVhdGVBcnJheUxpdGVyYWwoW3RzLmNyZWF0ZUVsZW1lbnRBY2Nlc3MobWF0Y2gsIDEpLCB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKG1hdGNoLCAyKV0pKTtcblxuICAvLyBpZiAobmFtZVswXSA9PT0gJzonKSB7IGNvbnN0IG1hdGNoID0gLi4uOyByZXR1cm4gLi4uOyB9XG4gIGNvbnN0IGlmU3RhdGVtZW50ID0gdHMuY3JlYXRlSWYoXG4gICAgICB0cy5jcmVhdGVCaW5hcnkoXG4gICAgICAgICAgdHMuY3JlYXRlRWxlbWVudEFjY2VzcyhuYW1lLCAwKSwgdHMuU3ludGF4S2luZC5FcXVhbHNFcXVhbHNFcXVhbHNUb2tlbixcbiAgICAgICAgICB0cy5jcmVhdGVTdHJpbmdMaXRlcmFsKCc6JykpLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW3RzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFtdLCBtYXRjaFZhcmlhYmxlKSwgbWF0Y2hSZXR1cm5dLCB0cnVlKSk7XG5cbiAgLy8gcmV0dXJuIFsnJywgbmFtZV07XG4gIGNvbnN0IGVsc2VSZXR1cm4gPSB0cy5jcmVhdGVSZXR1cm4odHMuY3JlYXRlQXJyYXlMaXRlcmFsKFt0cy5jcmVhdGVTdHJpbmdMaXRlcmFsKCcnKSwgbmFtZV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZSwgW10sIFtnZXRBbnlUeXBlZFBhcmFtZXRlcihuYW1lKV0sIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFtpZlN0YXRlbWVudCwgZWxzZVJldHVybl0sIHRydWUpKTtcbn1cbiJdfQ==
|