@angular/compiler 17.0.0-rc.1 → 17.0.0-rc.3

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.
Files changed (97) hide show
  1. package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
  2. package/esm2022/src/render3/partial/directive.mjs +1 -1
  3. package/esm2022/src/render3/partial/factory.mjs +1 -1
  4. package/esm2022/src/render3/partial/injectable.mjs +1 -1
  5. package/esm2022/src/render3/partial/injector.mjs +1 -1
  6. package/esm2022/src/render3/partial/ng_module.mjs +1 -1
  7. package/esm2022/src/render3/partial/pipe.mjs +1 -1
  8. package/esm2022/src/render3/r3_ast.mjs +55 -61
  9. package/esm2022/src/render3/r3_control_flow.mjs +17 -13
  10. package/esm2022/src/render3/r3_deferred_blocks.mjs +7 -8
  11. package/esm2022/src/render3/r3_deferred_triggers.mjs +46 -27
  12. package/esm2022/src/render3/view/compiler.mjs +2 -2
  13. package/esm2022/src/render3/view/i18n/util.mjs +1 -1
  14. package/esm2022/src/render3/view/t2_api.mjs +1 -1
  15. package/esm2022/src/render3/view/t2_binder.mjs +22 -10
  16. package/esm2022/src/render3/view/template.mjs +56 -5
  17. package/esm2022/src/template/pipeline/ir/index.mjs +2 -1
  18. package/esm2022/src/template/pipeline/ir/src/enums.mjs +69 -6
  19. package/esm2022/src/template/pipeline/ir/src/expression.mjs +85 -71
  20. package/esm2022/src/template/pipeline/ir/src/handle.mjs +13 -0
  21. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +68 -50
  22. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +23 -11
  23. package/esm2022/src/template/pipeline/ir/src/traits.mjs +1 -32
  24. package/esm2022/src/template/pipeline/src/compilation.mjs +3 -2
  25. package/esm2022/src/template/pipeline/src/conversion.mjs +2 -2
  26. package/esm2022/src/template/pipeline/src/emit.mjs +121 -107
  27. package/esm2022/src/template/pipeline/src/ingest.mjs +183 -54
  28. package/esm2022/src/template/pipeline/src/instruction.mjs +55 -20
  29. package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +4 -3
  30. package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +5 -5
  31. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +18 -6
  32. package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +2 -2
  33. package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +2 -2
  34. package/esm2022/src/template/pipeline/src/phases/chaining.mjs +2 -2
  35. package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +2 -2
  36. package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +6 -6
  37. package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +2 -2
  38. package/esm2022/src/template/pipeline/src/phases/create_defer_deps_fns.mjs +43 -0
  39. package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +57 -0
  40. package/esm2022/src/template/pipeline/src/phases/create_i18n_icu_expressions.mjs +52 -0
  41. package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +30 -0
  42. package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +113 -0
  43. package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +4 -4
  44. package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +7 -4
  45. package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +157 -0
  46. package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +4 -4
  47. package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +2 -2
  48. package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +4 -3
  49. package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +28 -0
  50. package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +8 -2
  51. package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +147 -8
  52. package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +16 -14
  53. package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +2 -2
  54. package/esm2022/src/template/pipeline/src/phases/merge_i18n_contexts.mjs +59 -0
  55. package/esm2022/src/template/pipeline/src/phases/namespace.mjs +2 -2
  56. package/esm2022/src/template/pipeline/src/phases/naming.mjs +11 -13
  57. package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +2 -2
  58. package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +2 -2
  59. package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +2 -2
  60. package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +8 -2
  61. package/esm2022/src/template/pipeline/src/phases/ordering.mjs +7 -2
  62. package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +3 -3
  63. package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +2 -2
  64. package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +16 -11
  65. package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +7 -3
  66. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +5 -3
  67. package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +2 -2
  68. package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +4 -4
  69. package/esm2022/src/template/pipeline/src/phases/reify.mjs +55 -29
  70. package/esm2022/src/template/pipeline/src/phases/remove_empty_bindings.mjs +5 -2
  71. package/esm2022/src/template/pipeline/src/phases/remove_i18n_contexts.mjs +27 -0
  72. package/esm2022/src/template/pipeline/src/phases/repeater_derived_vars.mjs +7 -2
  73. package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +3 -3
  74. package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +5 -5
  75. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +109 -0
  76. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +48 -0
  77. package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +3 -3
  78. package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +2 -2
  79. package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +14 -9
  80. package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +4 -29
  81. package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +3 -3
  82. package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +3 -3
  83. package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +2 -2
  84. package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +8 -2
  85. package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +7 -2
  86. package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +2 -2
  87. package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +5 -5
  88. package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +2 -2
  89. package/esm2022/src/version.mjs +1 -1
  90. package/fesm2022/compiler.mjs +1806 -1097
  91. package/fesm2022/compiler.mjs.map +1 -1
  92. package/index.d.ts +41 -58
  93. package/package.json +3 -3
  94. package/esm2022/src/template/pipeline/src/phases/has_const_trait_collection.mjs +0 -34
  95. package/esm2022/src/template/pipeline/src/phases/i18n_message_extraction.mjs +0 -122
  96. package/esm2022/src/template/pipeline/src/phases/icu_extraction.mjs +0 -53
  97. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_placeholders.mjs +0 -288
@@ -9,113 +9,127 @@
9
9
  import * as o from '../../../../src/output/output_ast';
10
10
  import * as ir from '../ir';
11
11
  import { CompilationJobKind as Kind } from './compilation';
12
- import { phaseFindAnyCasts } from './phases/any_cast';
13
- import { phaseApplyI18nExpressions } from './phases/apply_i18n_expressions';
14
- import { phaseAssignI18nSlotDependencies } from './phases/assign_i18n_slot_dependencies';
15
- import { phaseCollapseSingletonInterpolations } from './phases/collapse_singleton_interpolations';
16
- import { phaseAttributeExtraction } from './phases/attribute_extraction';
17
- import { phaseBindingSpecialization } from './phases/binding_specialization';
18
- import { phaseChaining } from './phases/chaining';
19
- import { phaseConditionals } from './phases/conditionals';
20
- import { phaseConstCollection } from './phases/const_collection';
21
- import { phaseEmptyElements } from './phases/empty_elements';
22
- import { phaseExpandSafeReads } from './phases/expand_safe_reads';
23
- import { phaseRepeaterDerivedVars } from './phases/repeater_derived_vars';
24
- import { phaseGenerateAdvance } from './phases/generate_advance';
25
- import { phaseGenerateProjectionDef } from './phases/generate_projection_def';
26
- import { phaseGenerateVariables } from './phases/generate_variables';
27
- import { phaseConstTraitCollection } from './phases/has_const_trait_collection';
28
- import { phaseHostStylePropertyParsing } from './phases/host_style_property_parsing';
29
- import { phaseI18nConstCollection } from './phases/i18n_const_collection';
30
- import { phaseI18nMessageExtraction } from './phases/i18n_message_extraction';
31
- import { phaseI18nTextExtraction } from './phases/i18n_text_extraction';
32
- import { phaseIcuExtraction } from './phases/icu_extraction';
33
- import { phaseLocalRefs } from './phases/local_refs';
34
- import { phaseNamespace } from './phases/namespace';
35
- import { phaseNaming } from './phases/naming';
36
- import { phaseMergeNextContext } from './phases/next_context_merging';
37
- import { phaseNgContainer } from './phases/ng_container';
38
- import { phaseNonbindable } from './phases/nonbindable';
39
- import { phaseNullishCoalescing } from './phases/nullish_coalescing';
40
- import { phaseOrdering } from './phases/ordering';
41
- import { phaseParseExtractedStyles } from './phases/parse_extracted_styles';
42
- import { phaseRemoveContentSelectors } from './phases/phase_remove_content_selectors';
43
- import { phasePipeCreation } from './phases/pipe_creation';
44
- import { phasePipeVariadic } from './phases/pipe_variadic';
45
- import { phasePropagateI18nBlocks } from './phases/propagate_i18n_blocks';
46
- import { phasePureFunctionExtraction } from './phases/pure_function_extraction';
47
- import { phasePureLiteralStructures } from './phases/pure_literal_structures';
48
- import { phaseReify } from './phases/reify';
49
- import { phaseRemoveEmptyBindings } from './phases/remove_empty_bindings';
50
- import { phaseResolveContexts } from './phases/resolve_contexts';
51
- import { phaseResolveDollarEvent } from './phases/resolve_dollar_event';
52
- import { phaseResolveI18nPlaceholders } from './phases/resolve_i18n_placeholders';
53
- import { phaseResolveNames } from './phases/resolve_names';
54
- import { phaseResolveSanitizers } from './phases/resolve_sanitizers';
55
- import { phaseSaveRestoreView } from './phases/save_restore_view';
56
- import { phaseSlotAllocation } from './phases/slot_allocation';
57
- import { phaseStyleBindingSpecialization } from './phases/style_binding_specialization';
58
- import { phaseTemporaryVariables } from './phases/temporary_variables';
59
- import { phaseVarCounting } from './phases/var_counting';
60
- import { phaseVariableOptimization } from './phases/variable_optimization';
61
- import { phaseWrapIcus } from './phases/wrap_icus';
62
- import { phaseTrackVariables } from './phases/track_variables';
63
- import { phaseTrackFnGeneration } from './phases/track_fn_generation';
64
- import { phaseTrackFnOptimization } from './phases/track_fn_optimization';
12
+ import { deleteAnyCasts } from './phases/any_cast';
13
+ import { applyI18nExpressions } from './phases/apply_i18n_expressions';
14
+ import { assignI18nSlotDependencies } from './phases/assign_i18n_slot_dependencies';
15
+ import { extractAttributes } from './phases/attribute_extraction';
16
+ import { specializeBindings } from './phases/binding_specialization';
17
+ import { chain } from './phases/chaining';
18
+ import { collapseSingletonInterpolations } from './phases/collapse_singleton_interpolations';
19
+ import { generateConditionalExpressions } from './phases/conditionals';
20
+ import { collectElementConsts } from './phases/const_collection';
21
+ import { createDeferDepsFns } from './phases/create_defer_deps_fns';
22
+ import { createI18nContexts } from './phases/create_i18n_contexts';
23
+ import { createI18nIcuExpressions } from './phases/create_i18n_icu_expressions';
24
+ import { configureDeferInstructions } from './phases/defer_configs';
25
+ import { resolveDeferTargetNames } from './phases/defer_resolve_targets';
26
+ import { collapseEmptyInstructions } from './phases/empty_elements';
27
+ import { expandSafeReads } from './phases/expand_safe_reads';
28
+ import { extractI18nMessages } from './phases/extract_i18n_messages';
29
+ import { generateAdvance } from './phases/generate_advance';
30
+ import { generateProjectionDefs } from './phases/generate_projection_def';
31
+ import { generateVariables } from './phases/generate_variables';
32
+ import { collectConstExpressions } from './phases/has_const_expression_collection';
33
+ import { parseHostStyleProperties } from './phases/host_style_property_parsing';
34
+ import { collectI18nConsts } from './phases/i18n_const_collection';
35
+ import { extractI18nText } from './phases/i18n_text_extraction';
36
+ import { liftLocalRefs } from './phases/local_refs';
37
+ import { mergeI18nContexts } from './phases/merge_i18n_contexts';
38
+ import { emitNamespaceChanges } from './phases/namespace';
39
+ import { nameFunctionsAndVariables } from './phases/naming';
40
+ import { mergeNextContextExpressions } from './phases/next_context_merging';
41
+ import { generateNgContainerOps } from './phases/ng_container';
42
+ import { disableBindings } from './phases/nonbindable';
43
+ import { generateNullishCoalesceExpressions } from './phases/nullish_coalescing';
44
+ import { orderOps } from './phases/ordering';
45
+ import { parseExtractedStyles } from './phases/parse_extracted_styles';
46
+ import { removeContentSelectors } from './phases/phase_remove_content_selectors';
47
+ import { createPipes } from './phases/pipe_creation';
48
+ import { createVariadicPipes } from './phases/pipe_variadic';
49
+ import { propagateI18nBlocks } from './phases/propagate_i18n_blocks';
50
+ import { extractPureFunctions } from './phases/pure_function_extraction';
51
+ import { generatePureLiteralStructures } from './phases/pure_literal_structures';
52
+ import { reify } from './phases/reify';
53
+ import { removeEmptyBindings } from './phases/remove_empty_bindings';
54
+ import { removeI18nContexts } from './phases/remove_i18n_contexts';
55
+ import { generateRepeaterDerivedVars } from './phases/repeater_derived_vars';
56
+ import { resolveContexts } from './phases/resolve_contexts';
57
+ import { resolveDollarEvent } from './phases/resolve_dollar_event';
58
+ import { resolveI18nElementPlaceholders } from './phases/resolve_i18n_element_placeholders';
59
+ import { resolveI18nExpressionPlaceholders } from './phases/resolve_i18n_expression_placeholders';
60
+ import { resolveNames } from './phases/resolve_names';
61
+ import { resolveSanitizers } from './phases/resolve_sanitizers';
62
+ import { saveAndRestoreView } from './phases/save_restore_view';
63
+ import { allocateSlots } from './phases/slot_allocation';
64
+ import { specializeStyleBindings } from './phases/style_binding_specialization';
65
+ import { generateTemporaryVariables } from './phases/temporary_variables';
66
+ import { generateTrackFns } from './phases/track_fn_generation';
67
+ import { optimizeTrackFns } from './phases/track_fn_optimization';
68
+ import { generateTrackVariables } from './phases/track_variables';
69
+ import { countVariables } from './phases/var_counting';
70
+ import { optimizeVariables } from './phases/variable_optimization';
71
+ import { wrapI18nIcus } from './phases/wrap_icus';
65
72
  const phases = [
66
- { kind: Kind.Tmpl, fn: phaseRemoveContentSelectors },
67
- { kind: Kind.Host, fn: phaseHostStylePropertyParsing },
68
- { kind: Kind.Tmpl, fn: phaseNamespace },
69
- { kind: Kind.Both, fn: phaseStyleBindingSpecialization },
70
- { kind: Kind.Both, fn: phaseBindingSpecialization },
71
- { kind: Kind.Tmpl, fn: phasePropagateI18nBlocks },
72
- { kind: Kind.Tmpl, fn: phaseWrapIcus },
73
- { kind: Kind.Both, fn: phaseAttributeExtraction },
74
- { kind: Kind.Both, fn: phaseParseExtractedStyles },
75
- { kind: Kind.Tmpl, fn: phaseRemoveEmptyBindings },
76
- { kind: Kind.Both, fn: phaseCollapseSingletonInterpolations },
77
- { kind: Kind.Both, fn: phaseOrdering },
78
- { kind: Kind.Tmpl, fn: phaseConditionals },
79
- { kind: Kind.Tmpl, fn: phasePipeCreation },
80
- { kind: Kind.Tmpl, fn: phaseI18nTextExtraction },
81
- { kind: Kind.Tmpl, fn: phaseIcuExtraction },
82
- { kind: Kind.Tmpl, fn: phaseApplyI18nExpressions },
83
- { kind: Kind.Tmpl, fn: phasePipeVariadic },
84
- { kind: Kind.Both, fn: phasePureLiteralStructures },
85
- { kind: Kind.Tmpl, fn: phaseGenerateProjectionDef },
86
- { kind: Kind.Tmpl, fn: phaseGenerateVariables },
87
- { kind: Kind.Tmpl, fn: phaseSaveRestoreView },
88
- { kind: Kind.Tmpl, fn: phaseFindAnyCasts },
89
- { kind: Kind.Both, fn: phaseResolveDollarEvent },
90
- { kind: Kind.Tmpl, fn: phaseRepeaterDerivedVars },
91
- { kind: Kind.Tmpl, fn: phaseTrackVariables },
92
- { kind: Kind.Both, fn: phaseResolveNames },
93
- { kind: Kind.Tmpl, fn: phaseTrackFnOptimization },
94
- { kind: Kind.Both, fn: phaseResolveContexts },
95
- { kind: Kind.Tmpl, fn: phaseResolveSanitizers },
96
- { kind: Kind.Tmpl, fn: phaseLocalRefs },
97
- { kind: Kind.Both, fn: phaseNullishCoalescing },
98
- { kind: Kind.Both, fn: phaseExpandSafeReads },
99
- { kind: Kind.Both, fn: phaseTemporaryVariables },
100
- { kind: Kind.Tmpl, fn: phaseSlotAllocation },
101
- { kind: Kind.Tmpl, fn: phaseResolveI18nPlaceholders },
102
- { kind: Kind.Tmpl, fn: phaseTrackFnGeneration },
103
- { kind: Kind.Tmpl, fn: phaseI18nMessageExtraction },
104
- { kind: Kind.Tmpl, fn: phaseI18nConstCollection },
105
- { kind: Kind.Tmpl, fn: phaseConstTraitCollection },
106
- { kind: Kind.Both, fn: phaseConstCollection },
107
- { kind: Kind.Tmpl, fn: phaseAssignI18nSlotDependencies },
108
- { kind: Kind.Both, fn: phaseVarCounting },
109
- { kind: Kind.Tmpl, fn: phaseGenerateAdvance },
110
- { kind: Kind.Both, fn: phaseVariableOptimization },
111
- { kind: Kind.Both, fn: phaseNaming },
112
- { kind: Kind.Tmpl, fn: phaseMergeNextContext },
113
- { kind: Kind.Tmpl, fn: phaseNgContainer },
114
- { kind: Kind.Tmpl, fn: phaseEmptyElements },
115
- { kind: Kind.Tmpl, fn: phaseNonbindable },
116
- { kind: Kind.Both, fn: phasePureFunctionExtraction },
117
- { kind: Kind.Both, fn: phaseReify },
118
- { kind: Kind.Both, fn: phaseChaining },
73
+ { kind: Kind.Tmpl, fn: removeContentSelectors },
74
+ { kind: Kind.Host, fn: parseHostStyleProperties },
75
+ { kind: Kind.Tmpl, fn: emitNamespaceChanges },
76
+ { kind: Kind.Both, fn: specializeStyleBindings },
77
+ { kind: Kind.Both, fn: specializeBindings },
78
+ { kind: Kind.Tmpl, fn: propagateI18nBlocks },
79
+ { kind: Kind.Tmpl, fn: wrapI18nIcus },
80
+ { kind: Kind.Tmpl, fn: createI18nContexts },
81
+ { kind: Kind.Both, fn: extractAttributes },
82
+ { kind: Kind.Both, fn: parseExtractedStyles },
83
+ { kind: Kind.Tmpl, fn: removeEmptyBindings },
84
+ { kind: Kind.Both, fn: collapseSingletonInterpolations },
85
+ { kind: Kind.Both, fn: orderOps },
86
+ { kind: Kind.Tmpl, fn: generateConditionalExpressions },
87
+ { kind: Kind.Tmpl, fn: createPipes },
88
+ { kind: Kind.Tmpl, fn: configureDeferInstructions },
89
+ { kind: Kind.Tmpl, fn: extractI18nText },
90
+ { kind: Kind.Tmpl, fn: createI18nIcuExpressions },
91
+ { kind: Kind.Tmpl, fn: applyI18nExpressions },
92
+ { kind: Kind.Tmpl, fn: createVariadicPipes },
93
+ { kind: Kind.Both, fn: generatePureLiteralStructures },
94
+ { kind: Kind.Tmpl, fn: generateProjectionDefs },
95
+ { kind: Kind.Tmpl, fn: generateVariables },
96
+ { kind: Kind.Tmpl, fn: saveAndRestoreView },
97
+ { kind: Kind.Tmpl, fn: deleteAnyCasts },
98
+ { kind: Kind.Both, fn: resolveDollarEvent },
99
+ { kind: Kind.Tmpl, fn: generateRepeaterDerivedVars },
100
+ { kind: Kind.Tmpl, fn: generateTrackVariables },
101
+ { kind: Kind.Both, fn: resolveNames },
102
+ { kind: Kind.Tmpl, fn: resolveDeferTargetNames },
103
+ { kind: Kind.Tmpl, fn: optimizeTrackFns },
104
+ { kind: Kind.Both, fn: resolveContexts },
105
+ { kind: Kind.Tmpl, fn: resolveSanitizers },
106
+ { kind: Kind.Tmpl, fn: liftLocalRefs },
107
+ { kind: Kind.Both, fn: generateNullishCoalesceExpressions },
108
+ { kind: Kind.Both, fn: expandSafeReads },
109
+ { kind: Kind.Both, fn: generateTemporaryVariables },
110
+ { kind: Kind.Tmpl, fn: allocateSlots },
111
+ { kind: Kind.Tmpl, fn: createDeferDepsFns },
112
+ { kind: Kind.Tmpl, fn: resolveI18nElementPlaceholders },
113
+ { kind: Kind.Tmpl, fn: resolveI18nExpressionPlaceholders },
114
+ { kind: Kind.Tmpl, fn: mergeI18nContexts },
115
+ { kind: Kind.Tmpl, fn: extractI18nMessages },
116
+ { kind: Kind.Tmpl, fn: generateTrackFns },
117
+ { kind: Kind.Tmpl, fn: collectI18nConsts },
118
+ { kind: Kind.Tmpl, fn: collectConstExpressions },
119
+ { kind: Kind.Both, fn: collectElementConsts },
120
+ { kind: Kind.Tmpl, fn: assignI18nSlotDependencies },
121
+ { kind: Kind.Tmpl, fn: removeI18nContexts },
122
+ { kind: Kind.Both, fn: countVariables },
123
+ { kind: Kind.Tmpl, fn: generateAdvance },
124
+ { kind: Kind.Both, fn: optimizeVariables },
125
+ { kind: Kind.Both, fn: nameFunctionsAndVariables },
126
+ { kind: Kind.Tmpl, fn: mergeNextContextExpressions },
127
+ { kind: Kind.Tmpl, fn: generateNgContainerOps },
128
+ { kind: Kind.Tmpl, fn: collapseEmptyInstructions },
129
+ { kind: Kind.Tmpl, fn: disableBindings },
130
+ { kind: Kind.Both, fn: extractPureFunctions },
131
+ { kind: Kind.Both, fn: reify },
132
+ { kind: Kind.Both, fn: chain },
119
133
  ];
120
134
  /**
121
135
  * Run all transformation phases in the correct order against a compilation job. After this
@@ -223,4 +237,4 @@ export function emitHostBindingFunction(job) {
223
237
  ],
224
238
  /* type */ undefined, /* sourceSpan */ undefined, job.root.fnName);
225
239
  }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9zcmMvZW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxLQUFLLENBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QixPQUFPLEVBQWlCLGtCQUFrQixJQUFJLElBQUksRUFBeUYsTUFBTSxlQUFlLENBQUM7QUFFakssT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDdkYsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDaEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8s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Q0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHVCQUF1QixFQUFDO0lBQzlDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFDO0lBQ3pDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHlCQUF5QixFQUFDO0lBQ2hELEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFDO0lBQ3hDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixFQUFDO0lBQ2pELEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLDBCQUEwQixFQUFDO0lBQ2pELEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFDO0lBQzdDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFDO0lBQzNDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFDO0lBQ3hDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHVCQUF1QixFQUFDO0lBQzlDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixFQUFDO0lBQy9DLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFDO0lBQzFDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFDO0lBQ3hDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHdCQUF3QixFQUFDO0lBQy9DLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFB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S0FBSyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNsRSxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUNQO1FBQ0UsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0tBQ3JCLEVBQ0Q7UUFDRSxHQUFHLFVBQVU7UUFDYixHQUFHLFVBQVU7S0FDZDtJQUNELFVBQVUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi8uLi8uLi9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xuaW1wb3J0IHtDb25zdGFudFBvb2x9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50X3Bvb2wnO1xuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vaXInO1xuXG5pbXBvcnQge0NvbXBpbGF0aW9uSm9iLCBDb21waWxhdGlvbkpvYktpbmQgYXMgS2luZCwgdHlwZSBDb21wb25lbnRDb21waWxhdGlvbkpvYiwgdHlwZSBIb3N0QmluZGluZ0NvbXBpbGF0aW9uSm9iLCB0eXBlIFZpZXdDb21waWxhdGlvblVuaXR9IGZyb20gJy4vY29tcGlsYXRpb24nO1xuXG5pbXBvcnQge3BoYXNlRmluZEFueUNhc3RzfSBmcm9tICcuL3BoYXNlcy9hbnlfY2FzdCc7XG5pbXBvcnQge3BoYXNlQXBwbHlJMThuRXhwcmVzc2lvbnN9IGZyb20gJy4vcGhhc2VzL2FwcGx5X2kxOG5fZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHtwaGFzZUFzc2lnbkkxOG5TbG90RGVwZW5kZW5jaWVzfSBmcm9tICcuL3BoYXNlcy9hc3NpZ25faTE4bl9zbG90X2RlcGVuZGVuY2llcyc7XG5pbXBvcnQge3BoYXNlQ29sbGFwc2VTaW5nbGV0b25JbnRlcnBvbGF0aW9uc30gZnJvbSAnLi9waGFzZXMvY29sbGFwc2Vfc2luZ2xldG9uX2ludGVycG9sYXRpb25zJztcbmltcG9ydCB7cGhhc2VBdHRyaWJ1dGVFeHRyYWN0aW9ufSBmcm9tICcuL3BoYXNlcy9hdHRyaWJ1dGVfZXh0cmFjdGlvbic7XG5pbXBvcnQge3BoYXNlQmluZGluZ1NwZWNpYWxpemF0aW9ufSBmcm9tICcuL3BoYXNlcy9iaW5kaW5nX3NwZWNpYWxpemF0aW9uJztcbmltcG9ydCB7cGhhc2VDaGFpbmluZ30gZnJvbSAnLi9waGFzZXMvY2hhaW5pbmcnO1xuaW1wb3J0IHtwaGFzZUNvbmRpdGlvbmFsc30gZnJvbSAnLi9waGFzZXMvY29uZGl0aW9uYWxzJztcbmltcG9ydCB7cGhhc2VDb25zdENvbGxlY3Rpb259IGZyb20gJy4vcGhhc2VzL2NvbnN0X2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtwaGFzZUVtcHR5RWxlbWVudHN9IGZyb20gJy4vcGhhc2VzL2VtcHR5X2VsZW1lbnRzJztcbmltcG9ydCB7cGhhc2VFeHBhbmRTYWZlUmVhZHN9IGZyb20gJy4vcGhhc2VzL2V4cGFuZF9zYWZlX3JlYWRzJztcbmltcG9ydCB7cGhhc2VSZXBlYXRlckRlcml2ZWRWYXJzfSBmcm9tICcuL3BoYXNlcy9yZXBlYXRlcl9kZXJpdmVkX3ZhcnMnO1xuaW1wb3J0IHtwaGFzZUdlbmVyYXRlQWR2YW5jZX0gZnJvbSAnLi9waGFzZXMvZ2VuZXJhdGVfYWR2YW5jZSc7XG5pbXBvcnQge3BoYXNlR2VuZXJhdGVQcm9qZWN0aW9uRGVmfSBmcm9tICcuL3BoYXNlcy9nZW5lcmF0ZV9wcm9qZWN0aW9uX2RlZic7XG5pbXBvcnQge3BoYXNlR2VuZXJhdGVWYXJpYWJsZXN9IGZyb20gJy4vcGhhc2VzL2dlbmVyYXRlX3ZhcmlhYmxlcyc7XG5pbXBvcnQge3BoYXNlQ29uc3RUcmFpdENvbGxlY3Rpb259IGZyb20gJy4vcGhhc2VzL2hhc19jb25zdF90cmFpdF9jb2xsZWN0aW9uJztcbmltcG9ydCB7cGhhc2VIb3N0U3R5bGVQcm9wZXJ0eVBhcnNpbmd9IGZyb20gJy4vcGhhc2VzL2hvc3Rfc3R5bGVfcHJvcGVydHlfcGFyc2luZyc7XG5pbXBvcnQge3BoYXNlSTE4bkNvbnN0Q29sbGVjdGlvbn0gZnJvbSAnLi9waGFzZXMvaTE4bl9jb25zdF9jb2xsZWN0aW9uJztcbmltcG9ydCB7cGhhc2VJMThuTWVzc2FnZUV4dHJhY3Rpb259IGZyb20gJy4vcGhhc2VzL2kxOG5fbWVzc2FnZV9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VJMThuVGV4dEV4dHJhY3Rpb259IGZyb20gJy4vcGhhc2VzL2kxOG5fdGV4dF9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VJY3VFeHRyYWN0aW9ufSBmcm9tICcuL3BoYXNlcy9pY3VfZXh0cmFjdGlvbic7XG5pbXBvcnQge3BoYXNlTG9jYWxSZWZzfSBmcm9tICcuL3BoYXNlcy9sb2NhbF9yZWZzJztcbmltcG9ydCB7cGhhc2VOYW1lc3BhY2V9IGZyb20gJy4vcGhhc2VzL25hbWVzcGFjZSc7XG5pbXBvcnQge3BoYXNlTmFtaW5nfSBmcm9tICcuL3BoYXNlcy9uYW1pbmcnO1xuaW1wb3J0IHtwaGFzZU1lcmdlTmV4dENvbnRleHR9IGZyb20gJy4vcGhhc2VzL25leHRfY29udGV4dF9tZXJnaW5nJztcbmltcG9ydCB7cGhhc2VOZ0NvbnRhaW5lcn0gZnJvbSAnLi9waGFzZXMvbmdfY29udGFpbmVyJztcbmltcG9ydCB7cGhhc2VOb25iaW5kYWJsZX0gZnJvbSAnLi9waGFzZXMvbm9uYmluZGFibGUnO1xuaW1wb3J0IHtwaGFzZU51bGxpc2hDb2FsZXNjaW5nfSBmcm9tICcuL3BoYXNlcy9udWxsaXNoX2NvYWxlc2NpbmcnO1xuaW1wb3J0IHtwaGFzZU9yZGVyaW5nfSBmcm9tICcuL3BoYXNlcy9vcmRlcmluZyc7XG5pbXBvcnQge3BoYXNlUGFyc2VFeHRyYWN0ZWRTdHlsZXN9IGZyb20gJy4vcGhhc2VzL3BhcnNlX2V4dHJhY3RlZF9zdHlsZXMnO1xuaW1wb3J0IHtwaGFzZVJlbW92ZUNvbnRlbnRTZWxlY3RvcnN9IGZyb20gJy4vcGhhc2VzL3BoYXNlX3JlbW92ZV9jb250ZW50X3NlbGVjdG9ycyc7XG5pbXBvcnQge3BoYXNlUGlwZUNyZWF0aW9ufSBmcm9tICcuL3BoYXNlcy9waXBlX2NyZWF0aW9uJztcbmltcG9ydCB7cGhhc2VQaXBlVmFyaWFkaWN9IGZyb20gJy4vcGhhc2VzL3BpcGVfdmFyaWFkaWMnO1xuaW1wb3J0IHtwaGFzZVByb3BhZ2F0ZUkxOG5CbG9ja3N9IGZyb20gJy4vcGhhc2VzL3Byb3BhZ2F0ZV9pMThuX2Jsb2Nrcyc7XG5pbXBvcnQge3BoYXNlUHVyZUZ1bmN0aW9uRXh0cmFjdGlvbn0gZnJvbSAnLi9waGFzZXMvcHVyZV9mdW5jdGlvbl9leHRyYWN0aW9uJztcbmltcG9ydCB7cGhhc2VQdXJlTGl0ZXJhbFN0cnVjdHVyZXN9IGZyb20gJy4vcGhhc2VzL3B1cmVfbGl0ZXJhbF9zdHJ1Y3R1cmVzJztcbmltcG9ydCB7cGhhc2VSZWlmeX0gZnJvbSAnLi9waGFzZXMvcmVpZnknO1xuaW1wb3J0IHtwaGFzZVJlbW92ZUVtcHR5QmluZGluZ3N9IGZyb20gJy4vcGhhc2VzL3JlbW92ZV9lbXB0eV9iaW5kaW5ncyc7XG5pbXBvcnQge3BoYXNlUmVzb2x2ZUNvbnRleHRzfSBmcm9tICcuL3BoYXNlcy9yZXNvbHZlX2NvbnRleHRzJztcbmltcG9ydCB7cGhhc2VSZXNvbHZlRG9sbGFyRXZlbnR9IGZyb20gJy4vcGhhc2VzL3Jlc29sdmVfZG9sbGFyX2V2ZW50JztcbmltcG9ydCB7cGhhc2VSZXNvbHZlSTE4blBsYWNlaG9sZGVyc30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9pMThuX3BsYWNlaG9sZGVycyc7XG5pbXBvcnQge3BoYXNlUmVzb2x2ZU5hbWVzfSBmcm9tICcuL3BoYXNlcy9yZXNvbHZlX25hbWVzJztcbmltcG9ydCB7cGhhc2VSZXNvbHZlU2FuaXRpemVyc30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9zYW5pdGl6ZXJzJztcbmltcG9ydCB7cGhhc2VTYXZlUmVzdG9yZVZpZXd9IGZyb20gJy4vcGhhc2VzL3NhdmVfcmVzdG9yZV92aWV3JztcbmltcG9ydCB7cGhhc2VTbG90QWxsb2NhdGlvbn0gZnJvbSAnLi9waGFzZXMvc2xvdF9hbGxvY2F0aW9uJztcbmltcG9ydCB7cGhhc2VTdHlsZUJpbmRpbmdTcGVjaWFsaXphdGlvbn0gZnJvbSAnLi9waGFzZXMvc3R5bGVfYmluZGluZ19zcGVjaWFsaXphdGlvbic7XG5pbXBvcnQge3BoYXNlVGVtcG9yYXJ5VmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy90ZW1wb3JhcnlfdmFyaWFibGVzJztcbmltcG9ydCB7cGhhc2VWYXJDb3VudGluZ30gZnJvbSAnLi9waGFzZXMvdmFyX2NvdW50aW5nJztcbmltcG9ydCB7cGhhc2VWYXJpYWJsZU9wdGltaXphdGlvbn0gZnJvbSAnLi9waGFzZXMvdmFyaWFibGVfb3B0aW1pemF0aW9uJztcbmltcG9ydCB7cGhhc2VXcmFwSWN1c30gZnJvbSAnLi9waGFzZXMvd3JhcF9pY3VzJztcbmltcG9ydCB7cGhhc2VUcmFja1ZhcmlhYmxlc30gZnJvbSAnLi9waGFzZXMvdHJhY2tfdmFyaWFibGVzJztcbmltcG9ydCB7cGhhc2VUcmFja0ZuR2VuZXJhdGlvbn0gZnJvbSAnLi9waGFzZXMvdHJhY2tfZm5fZ2VuZXJhdGlvbic7XG5pbXBvcnQge3BoYXNlVHJhY2tGbk9wdGltaXphdGlvbn0gZnJvbSAnLi9waGFzZXMvdHJhY2tfZm5fb3B0aW1pemF0aW9uJztcblxudHlwZSBQaGFzZSA9IHtcbiAgZm46IChqb2I6IENvbXBpbGF0aW9uSm9iKSA9PiB2b2lkOyBraW5kOiBLaW5kLkJvdGggfCBLaW5kLkhvc3QgfCBLaW5kLlRtcGw7XG59fHtcbiAgZm46IChqb2I6IENvbXBvbmVudENvbXBpbGF0aW9uSm9iKSA9PiB2b2lkO1xuICBraW5kOiBLaW5kLlRtcGw7XG59XG58e1xuICBmbjogKGpvYjogSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYikgPT4gdm9pZDtcbiAga2luZDogS2luZC5Ib3N0O1xufTtcblxuY29uc3QgcGhhc2VzOiBQaGFzZVtdID0gW1xuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VSZW1vdmVDb250ZW50U2VsZWN0b3JzfSxcbiAge2tpbmQ6IEtpbmQuSG9zdCwgZm46IHBoYXNlSG9zdFN0eWxlUHJvcGVydHlQYXJzaW5nfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTmFtZXNwYWNlfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlU3R5bGVCaW5kaW5nU3BlY2lhbGl6YXRpb259LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VCaW5kaW5nU3BlY2lhbGl6YXRpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VQcm9wYWdhdGVJMThuQmxvY2tzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlV3JhcEljdXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VBdHRyaWJ1dGVFeHRyYWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlUGFyc2VFeHRyYWN0ZWRTdHlsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VSZW1vdmVFbXB0eUJpbmRpbmdzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlQ29sbGFwc2VTaW5nbGV0b25JbnRlcnBvbGF0aW9uc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBwaGFzZU9yZGVyaW5nfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlQ29uZGl0aW9uYWxzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlUGlwZUNyZWF0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlSTE4blRleHRFeHRyYWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlSWN1RXh0cmFjdGlvbn0sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBwaGFzZUFwcGx5STE4bkV4cHJlc3Npb25zfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlUGlwZVZhcmlhZGljfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlUHVyZUxpdGVyYWxTdHJ1Y3R1cmVzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlR2VuZXJhdGVQcm9qZWN0aW9uRGVmfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlR2VuZXJhdGVWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VTYXZlUmVzdG9yZVZpZXd9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VGaW5kQW55Q2FzdHN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VSZXNvbHZlRG9sbGFyRXZlbnR9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VSZXBlYXRlckRlcml2ZWRWYXJzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlVHJhY2tWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VSZXNvbHZlTmFtZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VUcmFja0ZuT3B0aW1pemF0aW9ufSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlUmVzb2x2ZUNvbnRleHRzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlUmVzb2x2ZVNhbml0aXplcnN9LCAgLy8gVE9ETzogcnVuIGluIGJvdGhcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTG9jYWxSZWZzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlTnVsbGlzaENvYWxlc2Npbmd9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VFeHBhbmRTYWZlUmVhZHN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VUZW1wb3JhcnlWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VTbG90QWxsb2NhdGlvbn0sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBwaGFzZVJlc29sdmVJMThuUGxhY2Vob2xkZXJzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlVHJhY2tGbkdlbmVyYXRpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VJMThuTWVzc2FnZUV4dHJhY3Rpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VJMThuQ29uc3RDb2xsZWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlQ29uc3RUcmFpdENvbGxlY3Rpb259LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VDb25zdENvbGxlY3Rpb259LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VBc3NpZ25JMThuU2xvdERlcGVuZGVuY2llc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBwaGFzZVZhckNvdW50aW5nfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlR2VuZXJhdGVBZHZhbmNlfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlVmFyaWFibGVPcHRpbWl6YXRpb259LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VOYW1pbmd9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VNZXJnZU5leHRDb250ZXh0fSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTmdDb250YWluZXJ9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcGhhc2VFbXB0eUVsZW1lbnRzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHBoYXNlTm9uYmluZGFibGV9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VQdXJlRnVuY3Rpb25FeHRyYWN0aW9ufSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBoYXNlUmVpZnl9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogcGhhc2VDaGFpbmluZ30sXG5dO1xuXG4vKipcbiAqIFJ1biBhbGwgdHJhbnNmb3JtYXRpb24gcGhhc2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyIGFnYWluc3QgYSBjb21waWxhdGlvbiBqb2IuIEFmdGVyIHRoaXNcbiAqIHByb2Nlc3NpbmcsIHRoZSBjb21waWxhdGlvbiBzaG91bGQgYmUgaW4gYSBzdGF0ZSB3aGVyZSBpdCBjYW4gYmUgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShqb2I6IENvbXBpbGF0aW9uSm9iLCBraW5kOiBLaW5kKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcGhhc2Ugb2YgcGhhc2VzKSB7XG4gICAgaWYgKHBoYXNlLmtpbmQgPT09IGtpbmQgfHwgcGhhc2Uua2luZCA9PT0gS2luZC5Cb3RoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBgUGhhc2VgIGFib3ZlIGVuc3VyZXMgaXQgaXMgaW1wb3NzaWJsZSB0byBjYWxsIGEgcGhhc2UgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhlXG4gICAgICAvLyBqb2Iga2luZC5cbiAgICAgIHBoYXNlLmZuKGpvYiBhcyBDb21waWxhdGlvbkpvYiAmIENvbXBvbmVudENvbXBpbGF0aW9uSm9iICYgSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhbGwgdmlld3MgaW4gdGhlIGdpdmVuIGBDb21wb25lbnRDb21waWxhdGlvbmAgaW50byB0aGUgZmluYWwgdGVtcGxhdGUgZnVuY3Rpb24sIHdoaWNoIG1heVxuICogcmVmZXJlbmNlIGNvbnN0YW50cyBkZWZpbmVkIGluIGEgYENvbnN0YW50UG9vbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VGVtcGxhdGVGbih0cGw6IENvbXBvbmVudENvbXBpbGF0aW9uSm9iLCBwb29sOiBDb25zdGFudFBvb2wpOiBvLkZ1bmN0aW9uRXhwciB7XG4gIGNvbnN0IHJvb3RGbiA9IGVtaXRWaWV3KHRwbC5yb290KTtcbiAgZW1pdENoaWxkVmlld3ModHBsLnJvb3QsIHBvb2wpO1xuICByZXR1cm4gcm9vdEZuO1xufVxuXG5mdW5jdGlvbiBlbWl0Q2hpbGRWaWV3cyhwYXJlbnQ6IFZpZXdDb21waWxhdGlvblVuaXQsIHBvb2w6IENvbnN0YW50UG9vbCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHVuaXQgb2YgcGFyZW50LmpvYi51bml0cykge1xuICAgIGlmICh1bml0LnBhcmVudCAhPT0gcGFyZW50LnhyZWYpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIENoaWxkIHZpZXdzIGFyZSBlbWl0dGVkIGRlcHRoLWZpcnN0LlxuICAgIGVtaXRDaGlsZFZpZXdzKHVuaXQsIHBvb2wpO1xuXG4gICAgY29uc3Qgdmlld0ZuID0gZW1pdFZpZXcodW5pdCk7XG4gICAgcG9vbC5zdGF0ZW1lbnRzLnB1c2godmlld0ZuLnRvRGVjbFN0bXQodmlld0ZuLm5hbWUhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0IGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIGFuIGluZGl2aWR1YWwgYFZpZXdDb21waWxhdGlvbmAgKHdoaWNoIG1heSBiZSBlaXRoZXIgdGhlIHJvb3Qgdmlld1xuICogb3IgYW4gZW1iZWRkZWQgdmlldykuXG4gKi9cbmZ1bmN0aW9uIGVtaXRWaWV3KHZpZXc6IFZpZXdDb21waWxhdGlvblVuaXQpOiBvLkZ1bmN0aW9uRXhwciB7XG4gIGlmICh2aWV3LmZuTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IHZpZXcgJHt2aWV3LnhyZWZ9IGlzIHVubmFtZWRgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiB2aWV3LmNyZWF0ZSkge1xuICAgIGlmIChvcC5raW5kICE9PSBpci5PcEtpbmQuU3RhdGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBleHBlY3RlZCBhbGwgY3JlYXRlIG9wcyB0byBoYXZlIGJlZW4gY29tcGlsZWQsIGJ1dCBnb3QgJHtcbiAgICAgICAgICBpci5PcEtpbmRbb3Aua2luZF19YCk7XG4gICAgfVxuICAgIGNyZWF0ZVN0YXRlbWVudHMucHVzaChvcC5zdGF0ZW1lbnQpO1xuICB9XG4gIGNvbnN0IHVwZGF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiB2aWV3LnVwZGF0ZSkge1xuICAgIGlmIChvcC5raW5kICE9PSBpci5PcEtpbmQuU3RhdGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBleHBlY3RlZCBhbGwgdXBkYXRlIG9wcyB0byBoYXZlIGJlZW4gY29tcGlsZWQsIGJ1dCBnb3QgJHtcbiAgICAgICAgICBpci5PcEtpbmRbb3Aua2luZF19YCk7XG4gICAgfVxuICAgIHVwZGF0ZVN0YXRlbWVudHMucHVzaChvcC5zdGF0ZW1lbnQpO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlQ29uZCA9IG1heWJlR2VuZXJhdGVSZkJsb2NrKDEsIGNyZWF0ZVN0YXRlbWVudHMpO1xuICBjb25zdCB1cGRhdGVDb25kID0gbWF5YmVHZW5lcmF0ZVJmQmxvY2soMiwgdXBkYXRlU3RhdGVtZW50cyk7XG4gIHJldHVybiBvLmZuKFxuICAgICAgW1xuICAgICAgICBuZXcgby5GblBhcmFtKCdyZicpLFxuICAgICAgICBuZXcgby5GblBhcmFtKCdjdHgnKSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIC4uLmNyZWF0ZUNvbmQsXG4gICAgICAgIC4uLnVwZGF0ZUNvbmQsXG4gICAgICBdLFxuICAgICAgLyogdHlwZSAqLyB1bmRlZmluZWQsIC8qIHNvdXJjZVNwYW4gKi8gdW5kZWZpbmVkLCB2aWV3LmZuTmFtZSk7XG59XG5cbmZ1bmN0aW9uIG1heWJlR2VuZXJhdGVSZkJsb2NrKGZsYWc6IG51bWJlciwgc3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSk6IG8uU3RhdGVtZW50W10ge1xuICBpZiAoc3RhdGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIG8uaWZTdG10KFxuICAgICAgICBuZXcgby5CaW5hcnlPcGVyYXRvckV4cHIoby5CaW5hcnlPcGVyYXRvci5CaXR3aXNlQW5kLCBvLnZhcmlhYmxlKCdyZicpLCBvLmxpdGVyYWwoZmxhZykpLFxuICAgICAgICBzdGF0ZW1lbnRzKSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRIb3N0QmluZGluZ0Z1bmN0aW9uKGpvYjogSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYik6IG8uRnVuY3Rpb25FeHByfG51bGwge1xuICBpZiAoam9iLnJvb3QuZm5OYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogaG9zdCBiaW5kaW5nIGZ1bmN0aW9uIGlzIHVubmFtZWRgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiBqb2Iucm9vdC5jcmVhdGUpIHtcbiAgICBpZiAob3Aua2luZCAhPT0gaXIuT3BLaW5kLlN0YXRlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogZXhwZWN0ZWQgYWxsIGNyZWF0ZSBvcHMgdG8gaGF2ZSBiZWVuIGNvbXBpbGVkLCBidXQgZ290ICR7XG4gICAgICAgICAgaXIuT3BLaW5kW29wLmtpbmRdfWApO1xuICAgIH1cbiAgICBjcmVhdGVTdGF0ZW1lbnRzLnB1c2gob3Auc3RhdGVtZW50KTtcbiAgfVxuICBjb25zdCB1cGRhdGVTdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIGZvciAoY29uc3Qgb3Agb2Ygam9iLnJvb3QudXBkYXRlKSB7XG4gICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5TdGF0ZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IGV4cGVjdGVkIGFsbCB1cGRhdGUgb3BzIHRvIGhhdmUgYmVlbiBjb21waWxlZCwgYnV0IGdvdCAke1xuICAgICAgICAgIGlyLk9wS2luZFtvcC5raW5kXX1gKTtcbiAgICB9XG4gICAgdXBkYXRlU3RhdGVtZW50cy5wdXNoKG9wLnN0YXRlbWVudCk7XG4gIH1cblxuICBpZiAoY3JlYXRlU3RhdGVtZW50cy5sZW5ndGggPT09IDAgJiYgdXBkYXRlU3RhdGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUNvbmQgPSBtYXliZUdlbmVyYXRlUmZCbG9jaygxLCBjcmVhdGVTdGF0ZW1lbnRzKTtcbiAgY29uc3QgdXBkYXRlQ29uZCA9IG1heWJlR2VuZXJhdGVSZkJsb2NrKDIsIHVwZGF0ZVN0YXRlbWVudHMpO1xuICByZXR1cm4gby5mbihcbiAgICAgIFtcbiAgICAgICAgbmV3IG8uRm5QYXJhbSgncmYnKSxcbiAgICAgICAgbmV3IG8uRm5QYXJhbSgnY3R4JyksXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAuLi5jcmVhdGVDb25kLFxuICAgICAgICAuLi51cGRhdGVDb25kLFxuICAgICAgXSxcbiAgICAgIC8qIHR5cGUgKi8gdW5kZWZpbmVkLCAvKiBzb3VyY2VTcGFuICovIHVuZGVmaW5lZCwgam9iLnJvb3QuZm5OYW1lKTtcbn1cbiJdfQ==
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy90ZW1wbGF0ZS9waXBlbGluZS9zcmMvZW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxLQUFLLENBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QixPQUFPLEVBQWlCLGtCQUFrQixJQUFJLElBQUksRUFBeUYsTUFBTSxlQUFlLENBQUM7QUFFakssT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN4QyxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRixPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVB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QkFBZ0IsQ0FBQyxDQUFDO0lBQzdELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FDUDtRQUNFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNyQixFQUNEO1FBQ0UsR0FBRyxVQUFVO1FBQ2IsR0FBRyxVQUFVO0tBQ2Q7SUFDRCxVQUFVLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL291dHB1dC9vdXRwdXRfYXN0JztcbmltcG9ydCB7Q29uc3RhbnRQb29sfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudF9wb29sJztcbmltcG9ydCAqIGFzIGlyIGZyb20gJy4uL2lyJztcblxuaW1wb3J0IHtDb21waWxhdGlvbkpvYiwgQ29tcGlsYXRpb25Kb2JLaW5kIGFzIEtpbmQsIHR5cGUgQ29tcG9uZW50Q29tcGlsYXRpb25Kb2IsIHR5cGUgSG9zdEJpbmRpbmdDb21waWxhdGlvbkpvYiwgdHlwZSBWaWV3Q29tcGlsYXRpb25Vbml0fSBmcm9tICcuL2NvbXBpbGF0aW9uJztcblxuaW1wb3J0IHtkZWxldGVBbnlDYXN0c30gZnJvbSAnLi9waGFzZXMvYW55X2Nhc3QnO1xuaW1wb3J0IHthcHBseUkxOG5FeHByZXNzaW9uc30gZnJvbSAnLi9waGFzZXMvYXBwbHlfaTE4bl9leHByZXNzaW9ucyc7XG5pbXBvcnQge2Fzc2lnbkkxOG5TbG90RGVwZW5kZW5jaWVzfSBmcm9tICcuL3BoYXNlcy9hc3NpZ25faTE4bl9zbG90X2RlcGVuZGVuY2llcyc7XG5pbXBvcnQge2V4dHJhY3RBdHRyaWJ1dGVzfSBmcm9tICcuL3BoYXNlcy9hdHRyaWJ1dGVfZXh0cmFjdGlvbic7XG5pbXBvcnQge3NwZWNpYWxpemVCaW5kaW5nc30gZnJvbSAnLi9waGFzZXMvYmluZGluZ19zcGVjaWFsaXphdGlvbic7XG5pbXBvcnQge2NoYWlufSBmcm9tICcuL3BoYXNlcy9jaGFpbmluZyc7XG5pbXBvcnQge2NvbGxhcHNlU2luZ2xldG9uSW50ZXJwb2xhdGlvbnN9IGZyb20gJy4vcGhhc2VzL2NvbGxhcHNlX3NpbmdsZXRvbl9pbnRlcnBvbGF0aW9ucyc7XG5pbXBvcnQge2dlbmVyYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uc30gZnJvbSAnLi9waGFzZXMvY29uZGl0aW9uYWxzJztcbmltcG9ydCB7Y29sbGVjdEVsZW1lbnRDb25zdHN9IGZyb20gJy4vcGhhc2VzL2NvbnN0X2NvbGxlY3Rpb24nO1xuaW1wb3J0IHtjcmVhdGVEZWZlckRlcHNGbnN9IGZyb20gJy4vcGhhc2VzL2NyZWF0ZV9kZWZlcl9kZXBzX2Zucyc7XG5pbXBvcnQge2NyZWF0ZUkxOG5Db250ZXh0c30gZnJvbSAnLi9waGFzZXMvY3JlYXRlX2kxOG5fY29udGV4dHMnO1xuaW1wb3J0IHtjcmVhdGVJMThuSWN1RXhwcmVzc2lvbnN9IGZyb20gJy4vcGhhc2VzL2NyZWF0ZV9pMThuX2ljdV9leHByZXNzaW9ucyc7XG5pbXBvcnQge2NvbmZpZ3VyZURlZmVySW5zdHJ1Y3Rpb25zfSBmcm9tICcuL3BoYXNlcy9kZWZlcl9jb25maWdzJztcbmltcG9ydCB7cmVzb2x2ZURlZmVyVGFyZ2V0TmFtZXN9IGZyb20gJy4vcGhhc2VzL2RlZmVyX3Jlc29sdmVfdGFyZ2V0cyc7XG5pbXBvcnQge2NvbGxhcHNlRW1wdHlJbnN0cnVjdGlvbnN9IGZyb20gJy4vcGhhc2VzL2VtcHR5X2VsZW1lbnRzJztcbmltcG9ydCB7ZXhwYW5kU2FmZVJlYWRzfSBmcm9tICcuL3BoYXNlcy9leHBhbmRfc2FmZV9yZWFkcyc7XG5pbXBvcnQge2V4dHJhY3RJMThuTWVzc2FnZXN9IGZyb20gJy4vcGhhc2VzL2V4dHJhY3RfaTE4bl9tZXNzYWdlcyc7XG5pbXBvcnQge2dlbmVyYXRlQWR2YW5jZX0gZnJvbSAnLi9waGFzZXMvZ2VuZXJhdGVfYWR2YW5jZSc7XG5pbXBvcnQge2dlbmVyYXRlUHJvamVjdGlvbkRlZnN9IGZyb20gJy4vcGhhc2VzL2dlbmVyYXRlX3Byb2plY3Rpb25fZGVmJztcbmltcG9ydCB7Z2VuZXJhdGVWYXJpYWJsZXN9IGZyb20gJy4vcGhhc2VzL2dlbmVyYXRlX3ZhcmlhYmxlcyc7XG5pbXBvcnQge2NvbGxlY3RDb25zdEV4cHJlc3Npb25zfSBmcm9tICcuL3BoYXNlcy9oYXNfY29uc3RfZXhwcmVzc2lvbl9jb2xsZWN0aW9uJztcbmltcG9ydCB7cGFyc2VIb3N0U3R5bGVQcm9wZXJ0aWVzfSBmcm9tICcuL3BoYXNlcy9ob3N0X3N0eWxlX3Byb3BlcnR5X3BhcnNpbmcnO1xuaW1wb3J0IHtjb2xsZWN0STE4bkNvbnN0c30gZnJvbSAnLi9waGFzZXMvaTE4bl9jb25zdF9jb2xsZWN0aW9uJztcbmltcG9ydCB7ZXh0cmFjdEkxOG5UZXh0fSBmcm9tICcuL3BoYXNlcy9pMThuX3RleHRfZXh0cmFjdGlvbic7XG5pbXBvcnQge2xpZnRMb2NhbFJlZnN9IGZyb20gJy4vcGhhc2VzL2xvY2FsX3JlZnMnO1xuaW1wb3J0IHttZXJnZUkxOG5Db250ZXh0c30gZnJvbSAnLi9waGFzZXMvbWVyZ2VfaTE4bl9jb250ZXh0cyc7XG5pbXBvcnQge2VtaXROYW1lc3BhY2VDaGFuZ2VzfSBmcm9tICcuL3BoYXNlcy9uYW1lc3BhY2UnO1xuaW1wb3J0IHtuYW1lRnVuY3Rpb25zQW5kVmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy9uYW1pbmcnO1xuaW1wb3J0IHttZXJnZU5leHRDb250ZXh0RXhwcmVzc2lvbnN9IGZyb20gJy4vcGhhc2VzL25leHRfY29udGV4dF9tZXJnaW5nJztcbmltcG9ydCB7Z2VuZXJhdGVOZ0NvbnRhaW5lck9wc30gZnJvbSAnLi9waGFzZXMvbmdfY29udGFpbmVyJztcbmltcG9ydCB7ZGlzYWJsZUJpbmRpbmdzfSBmcm9tICcuL3BoYXNlcy9ub25iaW5kYWJsZSc7XG5pbXBvcnQge2dlbmVyYXRlTnVsbGlzaENvYWxlc2NlRXhwcmVzc2lvbnN9IGZyb20gJy4vcGhhc2VzL251bGxpc2hfY29hbGVzY2luZyc7XG5pbXBvcnQge29yZGVyT3BzfSBmcm9tICcuL3BoYXNlcy9vcmRlcmluZyc7XG5pbXBvcnQge3BhcnNlRXh0cmFjdGVkU3R5bGVzfSBmcm9tICcuL3BoYXNlcy9wYXJzZV9leHRyYWN0ZWRfc3R5bGVzJztcbmltcG9ydCB7cmVtb3ZlQ29udGVudFNlbGVjdG9yc30gZnJvbSAnLi9waGFzZXMvcGhhc2VfcmVtb3ZlX2NvbnRlbnRfc2VsZWN0b3JzJztcbmltcG9ydCB7Y3JlYXRlUGlwZXN9IGZyb20gJy4vcGhhc2VzL3BpcGVfY3JlYXRpb24nO1xuaW1wb3J0IHtjcmVhdGVWYXJpYWRpY1BpcGVzfSBmcm9tICcuL3BoYXNlcy9waXBlX3ZhcmlhZGljJztcbmltcG9ydCB7cHJvcGFnYXRlSTE4bkJsb2Nrc30gZnJvbSAnLi9waGFzZXMvcHJvcGFnYXRlX2kxOG5fYmxvY2tzJztcbmltcG9ydCB7ZXh0cmFjdFB1cmVGdW5jdGlvbnN9IGZyb20gJy4vcGhhc2VzL3B1cmVfZnVuY3Rpb25fZXh0cmFjdGlvbic7XG5pbXBvcnQge2dlbmVyYXRlUHVyZUxpdGVyYWxTdHJ1Y3R1cmVzfSBmcm9tICcuL3BoYXNlcy9wdXJlX2xpdGVyYWxfc3RydWN0dXJlcyc7XG5pbXBvcnQge3JlaWZ5fSBmcm9tICcuL3BoYXNlcy9yZWlmeSc7XG5pbXBvcnQge3JlbW92ZUVtcHR5QmluZGluZ3N9IGZyb20gJy4vcGhhc2VzL3JlbW92ZV9lbXB0eV9iaW5kaW5ncyc7XG5pbXBvcnQge3JlbW92ZUkxOG5Db250ZXh0c30gZnJvbSAnLi9waGFzZXMvcmVtb3ZlX2kxOG5fY29udGV4dHMnO1xuaW1wb3J0IHtnZW5lcmF0ZVJlcGVhdGVyRGVyaXZlZFZhcnN9IGZyb20gJy4vcGhhc2VzL3JlcGVhdGVyX2Rlcml2ZWRfdmFycyc7XG5pbXBvcnQge3Jlc29sdmVDb250ZXh0c30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9jb250ZXh0cyc7XG5pbXBvcnQge3Jlc29sdmVEb2xsYXJFdmVudH0gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9kb2xsYXJfZXZlbnQnO1xuaW1wb3J0IHtyZXNvbHZlSTE4bkVsZW1lbnRQbGFjZWhvbGRlcnN9IGZyb20gJy4vcGhhc2VzL3Jlc29sdmVfaTE4bl9lbGVtZW50X3BsYWNlaG9sZGVycyc7XG5pbXBvcnQge3Jlc29sdmVJMThuRXhwcmVzc2lvblBsYWNlaG9sZGVyc30gZnJvbSAnLi9waGFzZXMvcmVzb2x2ZV9pMThuX2V4cHJlc3Npb25fcGxhY2Vob2xkZXJzJztcbmltcG9ydCB7cmVzb2x2ZU5hbWVzfSBmcm9tICcuL3BoYXNlcy9yZXNvbHZlX25hbWVzJztcbmltcG9ydCB7cmVzb2x2ZVNhbml0aXplcnN9IGZyb20gJy4vcGhhc2VzL3Jlc29sdmVfc2FuaXRpemVycyc7XG5pbXBvcnQge3NhdmVBbmRSZXN0b3JlVmlld30gZnJvbSAnLi9waGFzZXMvc2F2ZV9yZXN0b3JlX3ZpZXcnO1xuaW1wb3J0IHthbGxvY2F0ZVNsb3RzfSBmcm9tICcuL3BoYXNlcy9zbG90X2FsbG9jYXRpb24nO1xuaW1wb3J0IHtzcGVjaWFsaXplU3R5bGVCaW5kaW5nc30gZnJvbSAnLi9waGFzZXMvc3R5bGVfYmluZGluZ19zcGVjaWFsaXphdGlvbic7XG5pbXBvcnQge2dlbmVyYXRlVGVtcG9yYXJ5VmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy90ZW1wb3JhcnlfdmFyaWFibGVzJztcbmltcG9ydCB7Z2VuZXJhdGVUcmFja0Zuc30gZnJvbSAnLi9waGFzZXMvdHJhY2tfZm5fZ2VuZXJhdGlvbic7XG5pbXBvcnQge29wdGltaXplVHJhY2tGbnN9IGZyb20gJy4vcGhhc2VzL3RyYWNrX2ZuX29wdGltaXphdGlvbic7XG5pbXBvcnQge2dlbmVyYXRlVHJhY2tWYXJpYWJsZXN9IGZyb20gJy4vcGhhc2VzL3RyYWNrX3ZhcmlhYmxlcyc7XG5pbXBvcnQge2NvdW50VmFyaWFibGVzfSBmcm9tICcuL3BoYXNlcy92YXJfY291bnRpbmcnO1xuaW1wb3J0IHtvcHRpbWl6ZVZhcmlhYmxlc30gZnJvbSAnLi9waGFzZXMvdmFyaWFibGVfb3B0aW1pemF0aW9uJztcbmltcG9ydCB7d3JhcEkxOG5JY3VzfSBmcm9tICcuL3BoYXNlcy93cmFwX2ljdXMnO1xuXG50eXBlIFBoYXNlID0ge1xuICBmbjogKGpvYjogQ29tcGlsYXRpb25Kb2IpID0+IHZvaWQ7IGtpbmQ6IEtpbmQuQm90aCB8IEtpbmQuSG9zdCB8IEtpbmQuVG1wbDtcbn18e1xuICBmbjogKGpvYjogQ29tcG9uZW50Q29tcGlsYXRpb25Kb2IpID0+IHZvaWQ7XG4gIGtpbmQ6IEtpbmQuVG1wbDtcbn1cbnx7XG4gIGZuOiAoam9iOiBIb3N0QmluZGluZ0NvbXBpbGF0aW9uSm9iKSA9PiB2b2lkO1xuICBraW5kOiBLaW5kLkhvc3Q7XG59O1xuXG5jb25zdCBwaGFzZXM6IFBoYXNlW10gPSBbXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiByZW1vdmVDb250ZW50U2VsZWN0b3JzfSxcbiAge2tpbmQ6IEtpbmQuSG9zdCwgZm46IHBhcnNlSG9zdFN0eWxlUHJvcGVydGllc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBlbWl0TmFtZXNwYWNlQ2hhbmdlc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBzcGVjaWFsaXplU3R5bGVCaW5kaW5nc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBzcGVjaWFsaXplQmluZGluZ3N9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcHJvcGFnYXRlSTE4bkJsb2Nrc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiB3cmFwSTE4bkljdXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogY3JlYXRlSTE4bkNvbnRleHRzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IGV4dHJhY3RBdHRyaWJ1dGVzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHBhcnNlRXh0cmFjdGVkU3R5bGVzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHJlbW92ZUVtcHR5QmluZGluZ3N9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogY29sbGFwc2VTaW5nbGV0b25JbnRlcnBvbGF0aW9uc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBvcmRlck9wc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBnZW5lcmF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogY3JlYXRlUGlwZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogY29uZmlndXJlRGVmZXJJbnN0cnVjdGlvbnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZXh0cmFjdEkxOG5UZXh0fSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGNyZWF0ZUkxOG5JY3VFeHByZXNzaW9uc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBhcHBseUkxOG5FeHByZXNzaW9uc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjcmVhdGVWYXJpYWRpY1BpcGVzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IGdlbmVyYXRlUHVyZUxpdGVyYWxTdHJ1Y3R1cmVzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGdlbmVyYXRlUHJvamVjdGlvbkRlZnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZ2VuZXJhdGVWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogc2F2ZUFuZFJlc3RvcmVWaWV3fSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGRlbGV0ZUFueUNhc3RzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHJlc29sdmVEb2xsYXJFdmVudH0sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBnZW5lcmF0ZVJlcGVhdGVyRGVyaXZlZFZhcnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZ2VuZXJhdGVUcmFja1ZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiByZXNvbHZlTmFtZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcmVzb2x2ZURlZmVyVGFyZ2V0TmFtZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogb3B0aW1pemVUcmFja0Zuc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiByZXNvbHZlQ29udGV4dHN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcmVzb2x2ZVNhbml0aXplcnN9LCAgLy8gVE9ETzogcnVuIGluIGJvdGhcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGxpZnRMb2NhbFJlZnN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogZ2VuZXJhdGVOdWxsaXNoQ29hbGVzY2VFeHByZXNzaW9uc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBleHBhbmRTYWZlUmVhZHN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogZ2VuZXJhdGVUZW1wb3JhcnlWYXJpYWJsZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogYWxsb2NhdGVTbG90c30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBjcmVhdGVEZWZlckRlcHNGbnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcmVzb2x2ZUkxOG5FbGVtZW50UGxhY2Vob2xkZXJzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IHJlc29sdmVJMThuRXhwcmVzc2lvblBsYWNlaG9sZGVyc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBtZXJnZUkxOG5Db250ZXh0c30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBleHRyYWN0STE4bk1lc3NhZ2VzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGdlbmVyYXRlVHJhY2tGbnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogY29sbGVjdEkxOG5Db25zdHN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogY29sbGVjdENvbnN0RXhwcmVzc2lvbnN9LFxuICB7a2luZDogS2luZC5Cb3RoLCBmbjogY29sbGVjdEVsZW1lbnRDb25zdHN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogYXNzaWduSTE4blNsb3REZXBlbmRlbmNpZXN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogcmVtb3ZlSTE4bkNvbnRleHRzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IGNvdW50VmFyaWFibGVzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGdlbmVyYXRlQWR2YW5jZX0sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBvcHRpbWl6ZVZhcmlhYmxlc30sXG4gIHtraW5kOiBLaW5kLkJvdGgsIGZuOiBuYW1lRnVuY3Rpb25zQW5kVmFyaWFibGVzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IG1lcmdlTmV4dENvbnRleHRFeHByZXNzaW9uc30sXG4gIHtraW5kOiBLaW5kLlRtcGwsIGZuOiBnZW5lcmF0ZU5nQ29udGFpbmVyT3BzfSxcbiAge2tpbmQ6IEtpbmQuVG1wbCwgZm46IGNvbGxhcHNlRW1wdHlJbnN0cnVjdGlvbnN9LFxuICB7a2luZDogS2luZC5UbXBsLCBmbjogZGlzYWJsZUJpbmRpbmdzfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IGV4dHJhY3RQdXJlRnVuY3Rpb25zfSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IHJlaWZ5fSxcbiAge2tpbmQ6IEtpbmQuQm90aCwgZm46IGNoYWlufSxcbl07XG5cbi8qKlxuICogUnVuIGFsbCB0cmFuc2Zvcm1hdGlvbiBwaGFzZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYWdhaW5zdCBhIGNvbXBpbGF0aW9uIGpvYi4gQWZ0ZXIgdGhpc1xuICogcHJvY2Vzc2luZywgdGhlIGNvbXBpbGF0aW9uIHNob3VsZCBiZSBpbiBhIHN0YXRlIHdoZXJlIGl0IGNhbiBiZSBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtKGpvYjogQ29tcGlsYXRpb25Kb2IsIGtpbmQ6IEtpbmQpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwaGFzZSBvZiBwaGFzZXMpIHtcbiAgICBpZiAocGhhc2Uua2luZCA9PT0ga2luZCB8fCBwaGFzZS5raW5kID09PSBLaW5kLkJvdGgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGBQaGFzZWAgYWJvdmUgZW5zdXJlcyBpdCBpcyBpbXBvc3NpYmxlIHRvIGNhbGwgYSBwaGFzZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGVcbiAgICAgIC8vIGpvYiBraW5kLlxuICAgICAgcGhhc2UuZm4oam9iIGFzIENvbXBpbGF0aW9uSm9iICYgQ29tcG9uZW50Q29tcGlsYXRpb25Kb2IgJiBIb3N0QmluZGluZ0NvbXBpbGF0aW9uSm9iKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGFsbCB2aWV3cyBpbiB0aGUgZ2l2ZW4gYENvbXBvbmVudENvbXBpbGF0aW9uYCBpbnRvIHRoZSBmaW5hbCB0ZW1wbGF0ZSBmdW5jdGlvbiwgd2hpY2ggbWF5XG4gKiByZWZlcmVuY2UgY29uc3RhbnRzIGRlZmluZWQgaW4gYSBgQ29uc3RhbnRQb29sYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRUZW1wbGF0ZUZuKHRwbDogQ29tcG9uZW50Q29tcGlsYXRpb25Kb2IsIHBvb2w6IENvbnN0YW50UG9vbCk6IG8uRnVuY3Rpb25FeHByIHtcbiAgY29uc3Qgcm9vdEZuID0gZW1pdFZpZXcodHBsLnJvb3QpO1xuICBlbWl0Q2hpbGRWaWV3cyh0cGwucm9vdCwgcG9vbCk7XG4gIHJldHVybiByb290Rm47XG59XG5cbmZ1bmN0aW9uIGVtaXRDaGlsZFZpZXdzKHBhcmVudDogVmlld0NvbXBpbGF0aW9uVW5pdCwgcG9vbDogQ29uc3RhbnRQb29sKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdW5pdCBvZiBwYXJlbnQuam9iLnVuaXRzKSB7XG4gICAgaWYgKHVuaXQucGFyZW50ICE9PSBwYXJlbnQueHJlZikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ2hpbGQgdmlld3MgYXJlIGVtaXR0ZWQgZGVwdGgtZmlyc3QuXG4gICAgZW1pdENoaWxkVmlld3ModW5pdCwgcG9vbCk7XG5cbiAgICBjb25zdCB2aWV3Rm4gPSBlbWl0Vmlldyh1bml0KTtcbiAgICBwb29sLnN0YXRlbWVudHMucHVzaCh2aWV3Rm4udG9EZWNsU3RtdCh2aWV3Rm4ubmFtZSEpKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXQgYSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgYW4gaW5kaXZpZHVhbCBgVmlld0NvbXBpbGF0aW9uYCAod2hpY2ggbWF5IGJlIGVpdGhlciB0aGUgcm9vdCB2aWV3XG4gKiBvciBhbiBlbWJlZGRlZCB2aWV3KS5cbiAqL1xuZnVuY3Rpb24gZW1pdFZpZXcodmlldzogVmlld0NvbXBpbGF0aW9uVW5pdCk6IG8uRnVuY3Rpb25FeHByIHtcbiAgaWYgKHZpZXcuZm5OYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogdmlldyAke3ZpZXcueHJlZn0gaXMgdW5uYW1lZGApO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlU3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wIG9mIHZpZXcuY3JlYXRlKSB7XG4gICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5TdGF0ZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IGV4cGVjdGVkIGFsbCBjcmVhdGUgb3BzIHRvIGhhdmUgYmVlbiBjb21waWxlZCwgYnV0IGdvdCAke1xuICAgICAgICAgIGlyLk9wS2luZFtvcC5raW5kXX1gKTtcbiAgICB9XG4gICAgY3JlYXRlU3RhdGVtZW50cy5wdXNoKG9wLnN0YXRlbWVudCk7XG4gIH1cbiAgY29uc3QgdXBkYXRlU3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wIG9mIHZpZXcudXBkYXRlKSB7XG4gICAgaWYgKG9wLmtpbmQgIT09IGlyLk9wS2luZC5TdGF0ZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uRXJyb3I6IGV4cGVjdGVkIGFsbCB1cGRhdGUgb3BzIHRvIGhhdmUgYmVlbiBjb21waWxlZCwgYnV0IGdvdCAke1xuICAgICAgICAgIGlyLk9wS2luZFtvcC5raW5kXX1gKTtcbiAgICB9XG4gICAgdXBkYXRlU3RhdGVtZW50cy5wdXNoKG9wLnN0YXRlbWVudCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVDb25kID0gbWF5YmVHZW5lcmF0ZVJmQmxvY2soMSwgY3JlYXRlU3RhdGVtZW50cyk7XG4gIGNvbnN0IHVwZGF0ZUNvbmQgPSBtYXliZUdlbmVyYXRlUmZCbG9jaygyLCB1cGRhdGVTdGF0ZW1lbnRzKTtcbiAgcmV0dXJuIG8uZm4oXG4gICAgICBbXG4gICAgICAgIG5ldyBvLkZuUGFyYW0oJ3JmJyksXG4gICAgICAgIG5ldyBvLkZuUGFyYW0oJ2N0eCcpLFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgLi4uY3JlYXRlQ29uZCxcbiAgICAgICAgLi4udXBkYXRlQ29uZCxcbiAgICAgIF0sXG4gICAgICAvKiB0eXBlICovIHVuZGVmaW5lZCwgLyogc291cmNlU3BhbiAqLyB1bmRlZmluZWQsIHZpZXcuZm5OYW1lKTtcbn1cblxuZnVuY3Rpb24gbWF5YmVHZW5lcmF0ZVJmQmxvY2soZmxhZzogbnVtYmVyLCBzdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdKTogby5TdGF0ZW1lbnRbXSB7XG4gIGlmIChzdGF0ZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgby5pZlN0bXQoXG4gICAgICAgIG5ldyBvLkJpbmFyeU9wZXJhdG9yRXhwcihvLkJpbmFyeU9wZXJhdG9yLkJpdHdpc2VBbmQsIG8udmFyaWFibGUoJ3JmJyksIG8ubGl0ZXJhbChmbGFnKSksXG4gICAgICAgIHN0YXRlbWVudHMpLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEhvc3RCaW5kaW5nRnVuY3Rpb24oam9iOiBIb3N0QmluZGluZ0NvbXBpbGF0aW9uSm9iKTogby5GdW5jdGlvbkV4cHJ8bnVsbCB7XG4gIGlmIChqb2Iucm9vdC5mbk5hbWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBob3N0IGJpbmRpbmcgZnVuY3Rpb24gaXMgdW5uYW1lZGApO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlU3RhdGVtZW50czogby5TdGF0ZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wIG9mIGpvYi5yb290LmNyZWF0ZSkge1xuICAgIGlmIChvcC5raW5kICE9PSBpci5PcEtpbmQuU3RhdGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbkVycm9yOiBleHBlY3RlZCBhbGwgY3JlYXRlIG9wcyB0byBoYXZlIGJlZW4gY29tcGlsZWQsIGJ1dCBnb3QgJHtcbiAgICAgICAgICBpci5PcEtpbmRbb3Aua2luZF19YCk7XG4gICAgfVxuICAgIGNyZWF0ZVN0YXRlbWVudHMucHVzaChvcC5zdGF0ZW1lbnQpO1xuICB9XG4gIGNvbnN0IHVwZGF0ZVN0YXRlbWVudHM6IG8uU3RhdGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiBqb2Iucm9vdC51cGRhdGUpIHtcbiAgICBpZiAob3Aua2luZCAhPT0gaXIuT3BLaW5kLlN0YXRlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb25FcnJvcjogZXhwZWN0ZWQgYWxsIHVwZGF0ZSBvcHMgdG8gaGF2ZSBiZWVuIGNvbXBpbGVkLCBidXQgZ290ICR7XG4gICAgICAgICAgaXIuT3BLaW5kW29wLmtpbmRdfWApO1xuICAgIH1cbiAgICB1cGRhdGVTdGF0ZW1lbnRzLnB1c2gob3Auc3RhdGVtZW50KTtcbiAgfVxuXG4gIGlmIChjcmVhdGVTdGF0ZW1lbnRzLmxlbmd0aCA9PT0gMCAmJiB1cGRhdGVTdGF0ZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlQ29uZCA9IG1heWJlR2VuZXJhdGVSZkJsb2NrKDEsIGNyZWF0ZVN0YXRlbWVudHMpO1xuICBjb25zdCB1cGRhdGVDb25kID0gbWF5YmVHZW5lcmF0ZVJmQmxvY2soMiwgdXBkYXRlU3RhdGVtZW50cyk7XG4gIHJldHVybiBvLmZuKFxuICAgICAgW1xuICAgICAgICBuZXcgby5GblBhcmFtKCdyZicpLFxuICAgICAgICBuZXcgby5GblBhcmFtKCdjdHgnKSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIC4uLmNyZWF0ZUNvbmQsXG4gICAgICAgIC4uLnVwZGF0ZUNvbmQsXG4gICAgICBdLFxuICAgICAgLyogdHlwZSAqLyB1bmRlZmluZWQsIC8qIHNvdXJjZVNwYW4gKi8gdW5kZWZpbmVkLCBqb2Iucm9vdC5mbk5hbWUpO1xufVxuIl19