@angular/compiler 19.0.0-next.0 → 19.0.0-next.2

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 (186) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/compiler.mjs +4742 -4473
  3. package/fesm2022/compiler.mjs.map +1 -1
  4. package/index.d.ts +35 -3
  5. package/package.json +2 -4
  6. package/esm2022/compiler.mjs +0 -13
  7. package/esm2022/index.mjs +0 -13
  8. package/esm2022/public_api.mjs +0 -15
  9. package/esm2022/src/assertions.mjs +0 -31
  10. package/esm2022/src/chars.mjs +0 -90
  11. package/esm2022/src/compiler.mjs +0 -88
  12. package/esm2022/src/compiler_facade_interface.mjs +0 -29
  13. package/esm2022/src/config.mjs +0 -20
  14. package/esm2022/src/constant_pool.mjs +0 -285
  15. package/esm2022/src/core.mjs +0 -96
  16. package/esm2022/src/expression_parser/ast.mjs +0 -755
  17. package/esm2022/src/expression_parser/lexer.mjs +0 -421
  18. package/esm2022/src/expression_parser/parser.mjs +0 -1222
  19. package/esm2022/src/i18n/digest.mjs +0 -322
  20. package/esm2022/src/i18n/extractor_merger.mjs +0 -409
  21. package/esm2022/src/i18n/i18n_ast.mjs +0 -212
  22. package/esm2022/src/i18n/i18n_html_parser.mjs +0 -54
  23. package/esm2022/src/i18n/i18n_parser.mjs +0 -247
  24. package/esm2022/src/i18n/index.mjs +0 -16
  25. package/esm2022/src/i18n/message_bundle.mjs +0 -93
  26. package/esm2022/src/i18n/parse_util.mjs +0 -17
  27. package/esm2022/src/i18n/serializers/placeholder.mjs +0 -139
  28. package/esm2022/src/i18n/serializers/serializer.mjs +0 -77
  29. package/esm2022/src/i18n/serializers/xliff.mjs +0 -300
  30. package/esm2022/src/i18n/serializers/xliff2.mjs +0 -349
  31. package/esm2022/src/i18n/serializers/xmb.mjs +0 -188
  32. package/esm2022/src/i18n/serializers/xml_helper.mjs +0 -94
  33. package/esm2022/src/i18n/serializers/xtb.mjs +0 -186
  34. package/esm2022/src/i18n/translation_bundle.mjs +0 -164
  35. package/esm2022/src/injectable_compiler_2.mjs +0 -138
  36. package/esm2022/src/jit_compiler_facade.mjs +0 -681
  37. package/esm2022/src/ml_parser/ast.mjs +0 -167
  38. package/esm2022/src/ml_parser/defaults.mjs +0 -24
  39. package/esm2022/src/ml_parser/entities.mjs +0 -2144
  40. package/esm2022/src/ml_parser/html_parser.mjs +0 -18
  41. package/esm2022/src/ml_parser/html_tags.mjs +0 -156
  42. package/esm2022/src/ml_parser/html_whitespaces.mjs +0 -107
  43. package/esm2022/src/ml_parser/icu_ast_expander.mjs +0 -125
  44. package/esm2022/src/ml_parser/lexer.mjs +0 -1210
  45. package/esm2022/src/ml_parser/parser.mjs +0 -539
  46. package/esm2022/src/ml_parser/tags.mjs +0 -47
  47. package/esm2022/src/ml_parser/tokens.mjs +0 -9
  48. package/esm2022/src/ml_parser/xml_parser.mjs +0 -19
  49. package/esm2022/src/ml_parser/xml_tags.mjs +0 -32
  50. package/esm2022/src/output/abstract_emitter.mjs +0 -524
  51. package/esm2022/src/output/abstract_js_emitter.mjs +0 -130
  52. package/esm2022/src/output/map_util.mjs +0 -19
  53. package/esm2022/src/output/output_ast.mjs +0 -1301
  54. package/esm2022/src/output/output_jit.mjs +0 -138
  55. package/esm2022/src/output/output_jit_trusted_types.mjs +0 -100
  56. package/esm2022/src/output/source_map.mjs +0 -150
  57. package/esm2022/src/parse_util.mjs +0 -198
  58. package/esm2022/src/render3/partial/api.mjs +0 -9
  59. package/esm2022/src/render3/partial/class_metadata.mjs +0 -52
  60. package/esm2022/src/render3/partial/component.mjs +0 -197
  61. package/esm2022/src/render3/partial/directive.mjs +0 -264
  62. package/esm2022/src/render3/partial/factory.mjs +0 -35
  63. package/esm2022/src/render3/partial/injectable.mjs +0 -67
  64. package/esm2022/src/render3/partial/injector.mjs +0 -41
  65. package/esm2022/src/render3/partial/ng_module.mjs +0 -63
  66. package/esm2022/src/render3/partial/pipe.mjs +0 -50
  67. package/esm2022/src/render3/partial/util.mjs +0 -79
  68. package/esm2022/src/render3/r3_ast.mjs +0 -493
  69. package/esm2022/src/render3/r3_class_debug_info_compiler.mjs +0 -35
  70. package/esm2022/src/render3/r3_class_metadata_compiler.mjs +0 -92
  71. package/esm2022/src/render3/r3_control_flow.mjs +0 -421
  72. package/esm2022/src/render3/r3_deferred_blocks.mjs +0 -170
  73. package/esm2022/src/render3/r3_deferred_triggers.mjs +0 -316
  74. package/esm2022/src/render3/r3_factory.mjs +0 -200
  75. package/esm2022/src/render3/r3_identifiers.mjs +0 -480
  76. package/esm2022/src/render3/r3_injector_compiler.mjs +0 -28
  77. package/esm2022/src/render3/r3_jit.mjs +0 -29
  78. package/esm2022/src/render3/r3_module_compiler.mjs +0 -211
  79. package/esm2022/src/render3/r3_pipe_compiler.mjs +0 -35
  80. package/esm2022/src/render3/r3_template_transform.mjs +0 -560
  81. package/esm2022/src/render3/util.mjs +0 -90
  82. package/esm2022/src/render3/view/api.mjs +0 -14
  83. package/esm2022/src/render3/view/compiler.mjs +0 -546
  84. package/esm2022/src/render3/view/i18n/get_msg_utils.mjs +0 -113
  85. package/esm2022/src/render3/view/i18n/icu_serializer.mjs +0 -43
  86. package/esm2022/src/render3/view/i18n/localize_utils.mjs +0 -118
  87. package/esm2022/src/render3/view/i18n/meta.mjs +0 -259
  88. package/esm2022/src/render3/view/i18n/util.mjs +0 -70
  89. package/esm2022/src/render3/view/query_generation.mjs +0 -182
  90. package/esm2022/src/render3/view/t2_api.mjs +0 -9
  91. package/esm2022/src/render3/view/t2_binder.mjs +0 -823
  92. package/esm2022/src/render3/view/template.mjs +0 -113
  93. package/esm2022/src/render3/view/util.mjs +0 -192
  94. package/esm2022/src/resource_loader.mjs +0 -17
  95. package/esm2022/src/schema/dom_element_schema_registry.mjs +0 -471
  96. package/esm2022/src/schema/dom_security_schema.mjs +0 -96
  97. package/esm2022/src/schema/element_schema_registry.mjs +0 -10
  98. package/esm2022/src/schema/trusted_types_sinks.mjs +0 -41
  99. package/esm2022/src/selector.mjs +0 -400
  100. package/esm2022/src/shadow_css.mjs +0 -1053
  101. package/esm2022/src/style_url_resolver.mjs +0 -17
  102. package/esm2022/src/template/pipeline/ir/index.mjs +0 -18
  103. package/esm2022/src/template/pipeline/ir/src/enums.mjs +0 -503
  104. package/esm2022/src/template/pipeline/ir/src/expression.mjs +0 -997
  105. package/esm2022/src/template/pipeline/ir/src/handle.mjs +0 -13
  106. package/esm2022/src/template/pipeline/ir/src/operations.mjs +0 -261
  107. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +0 -405
  108. package/esm2022/src/template/pipeline/ir/src/ops/host.mjs +0 -25
  109. package/esm2022/src/template/pipeline/ir/src/ops/shared.mjs +0 -43
  110. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +0 -277
  111. package/esm2022/src/template/pipeline/ir/src/traits.mjs +0 -64
  112. package/esm2022/src/template/pipeline/ir/src/variable.mjs +0 -13
  113. package/esm2022/src/template/pipeline/src/compilation.mjs +0 -194
  114. package/esm2022/src/template/pipeline/src/conversion.mjs +0 -64
  115. package/esm2022/src/template/pipeline/src/emit.mjs +0 -238
  116. package/esm2022/src/template/pipeline/src/ingest.mjs +0 -1058
  117. package/esm2022/src/template/pipeline/src/instruction.mjs +0 -564
  118. package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +0 -32
  119. package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +0 -63
  120. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +0 -63
  121. package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +0 -138
  122. package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +0 -75
  123. package/esm2022/src/template/pipeline/src/phases/chaining.mjs +0 -112
  124. package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +0 -32
  125. package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +0 -58
  126. package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +0 -214
  127. package/esm2022/src/template/pipeline/src/phases/convert_i18n_bindings.mjs +0 -52
  128. package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +0 -105
  129. package/esm2022/src/template/pipeline/src/phases/deduplicate_text_bindings.mjs +0 -40
  130. package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +0 -29
  131. package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +0 -113
  132. package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +0 -47
  133. package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +0 -192
  134. package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +0 -218
  135. package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +0 -66
  136. package/esm2022/src/template/pipeline/src/phases/generate_local_let_references.mjs +0 -29
  137. package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +0 -46
  138. package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +0 -170
  139. package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +0 -28
  140. package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +0 -81
  141. package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +0 -309
  142. package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +0 -97
  143. package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +0 -43
  144. package/esm2022/src/template/pipeline/src/phases/namespace.mjs +0 -26
  145. package/esm2022/src/template/pipeline/src/phases/naming.mjs +0 -179
  146. package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +0 -75
  147. package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +0 -29
  148. package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +0 -47
  149. package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +0 -33
  150. package/esm2022/src/template/pipeline/src/phases/ordering.mjs +0 -140
  151. package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +0 -137
  152. package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +0 -42
  153. package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +0 -74
  154. package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +0 -30
  155. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +0 -81
  156. package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +0 -55
  157. package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +0 -58
  158. package/esm2022/src/template/pipeline/src/phases/reify.mjs +0 -433
  159. package/esm2022/src/template/pipeline/src/phases/remove_empty_bindings.mjs +0 -31
  160. package/esm2022/src/template/pipeline/src/phases/remove_i18n_contexts.mjs +0 -27
  161. package/esm2022/src/template/pipeline/src/phases/remove_illegal_let_references.mjs +0 -36
  162. package/esm2022/src/template/pipeline/src/phases/remove_unused_i18n_attrs.mjs +0 -33
  163. package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +0 -60
  164. package/esm2022/src/template/pipeline/src/phases/resolve_defer_deps_fns.mjs +0 -31
  165. package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +0 -36
  166. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +0 -266
  167. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +0 -70
  168. package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +0 -124
  169. package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +0 -123
  170. package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +0 -64
  171. package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +0 -62
  172. package/esm2022/src/template/pipeline/src/phases/store_let_optimization.mjs +0 -35
  173. package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +0 -42
  174. package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +0 -87
  175. package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +0 -52
  176. package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +0 -88
  177. package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +0 -36
  178. package/esm2022/src/template/pipeline/src/phases/transform_two_way_binding_set.mjs +0 -43
  179. package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +0 -155
  180. package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +0 -423
  181. package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +0 -41
  182. package/esm2022/src/template/pipeline/src/util/elements.mjs +0 -29
  183. package/esm2022/src/template_parser/binding_parser.mjs +0 -465
  184. package/esm2022/src/template_parser/template_preparser.mjs +0 -84
  185. package/esm2022/src/util.mjs +0 -124
  186. package/esm2022/src/version.mjs +0 -15
@@ -1,198 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as chars from './chars';
9
- import { stringify } from './util';
10
- export class ParseLocation {
11
- constructor(file, offset, line, col) {
12
- this.file = file;
13
- this.offset = offset;
14
- this.line = line;
15
- this.col = col;
16
- }
17
- toString() {
18
- return this.offset != null ? `${this.file.url}@${this.line}:${this.col}` : this.file.url;
19
- }
20
- moveBy(delta) {
21
- const source = this.file.content;
22
- const len = source.length;
23
- let offset = this.offset;
24
- let line = this.line;
25
- let col = this.col;
26
- while (offset > 0 && delta < 0) {
27
- offset--;
28
- delta++;
29
- const ch = source.charCodeAt(offset);
30
- if (ch == chars.$LF) {
31
- line--;
32
- const priorLine = source
33
- .substring(0, offset - 1)
34
- .lastIndexOf(String.fromCharCode(chars.$LF));
35
- col = priorLine > 0 ? offset - priorLine : offset;
36
- }
37
- else {
38
- col--;
39
- }
40
- }
41
- while (offset < len && delta > 0) {
42
- const ch = source.charCodeAt(offset);
43
- offset++;
44
- delta--;
45
- if (ch == chars.$LF) {
46
- line++;
47
- col = 0;
48
- }
49
- else {
50
- col++;
51
- }
52
- }
53
- return new ParseLocation(this.file, offset, line, col);
54
- }
55
- // Return the source around the location
56
- // Up to `maxChars` or `maxLines` on each side of the location
57
- getContext(maxChars, maxLines) {
58
- const content = this.file.content;
59
- let startOffset = this.offset;
60
- if (startOffset != null) {
61
- if (startOffset > content.length - 1) {
62
- startOffset = content.length - 1;
63
- }
64
- let endOffset = startOffset;
65
- let ctxChars = 0;
66
- let ctxLines = 0;
67
- while (ctxChars < maxChars && startOffset > 0) {
68
- startOffset--;
69
- ctxChars++;
70
- if (content[startOffset] == '\n') {
71
- if (++ctxLines == maxLines) {
72
- break;
73
- }
74
- }
75
- }
76
- ctxChars = 0;
77
- ctxLines = 0;
78
- while (ctxChars < maxChars && endOffset < content.length - 1) {
79
- endOffset++;
80
- ctxChars++;
81
- if (content[endOffset] == '\n') {
82
- if (++ctxLines == maxLines) {
83
- break;
84
- }
85
- }
86
- }
87
- return {
88
- before: content.substring(startOffset, this.offset),
89
- after: content.substring(this.offset, endOffset + 1),
90
- };
91
- }
92
- return null;
93
- }
94
- }
95
- export class ParseSourceFile {
96
- constructor(content, url) {
97
- this.content = content;
98
- this.url = url;
99
- }
100
- }
101
- export class ParseSourceSpan {
102
- /**
103
- * Create an object that holds information about spans of tokens/nodes captured during
104
- * lexing/parsing of text.
105
- *
106
- * @param start
107
- * The location of the start of the span (having skipped leading trivia).
108
- * Skipping leading trivia makes source-spans more "user friendly", since things like HTML
109
- * elements will appear to begin at the start of the opening tag, rather than at the start of any
110
- * leading trivia, which could include newlines.
111
- *
112
- * @param end
113
- * The location of the end of the span.
114
- *
115
- * @param fullStart
116
- * The start of the token without skipping the leading trivia.
117
- * This is used by tooling that splits tokens further, such as extracting Angular interpolations
118
- * from text tokens. Such tooling creates new source-spans relative to the original token's
119
- * source-span. If leading trivia characters have been skipped then the new source-spans may be
120
- * incorrectly offset.
121
- *
122
- * @param details
123
- * Additional information (such as identifier names) that should be associated with the span.
124
- */
125
- constructor(start, end, fullStart = start, details = null) {
126
- this.start = start;
127
- this.end = end;
128
- this.fullStart = fullStart;
129
- this.details = details;
130
- }
131
- toString() {
132
- return this.start.file.content.substring(this.start.offset, this.end.offset);
133
- }
134
- }
135
- export var ParseErrorLevel;
136
- (function (ParseErrorLevel) {
137
- ParseErrorLevel[ParseErrorLevel["WARNING"] = 0] = "WARNING";
138
- ParseErrorLevel[ParseErrorLevel["ERROR"] = 1] = "ERROR";
139
- })(ParseErrorLevel || (ParseErrorLevel = {}));
140
- export class ParseError {
141
- constructor(span, msg, level = ParseErrorLevel.ERROR) {
142
- this.span = span;
143
- this.msg = msg;
144
- this.level = level;
145
- }
146
- contextualMessage() {
147
- const ctx = this.span.start.getContext(100, 3);
148
- return ctx
149
- ? `${this.msg} ("${ctx.before}[${ParseErrorLevel[this.level]} ->]${ctx.after}")`
150
- : this.msg;
151
- }
152
- toString() {
153
- const details = this.span.details ? `, ${this.span.details}` : '';
154
- return `${this.contextualMessage()}: ${this.span.start}${details}`;
155
- }
156
- }
157
- /**
158
- * Generates Source Span object for a given R3 Type for JIT mode.
159
- *
160
- * @param kind Component or Directive.
161
- * @param typeName name of the Component or Directive.
162
- * @param sourceUrl reference to Component or Directive source.
163
- * @returns instance of ParseSourceSpan that represent a given Component or Directive.
164
- */
165
- export function r3JitTypeSourceSpan(kind, typeName, sourceUrl) {
166
- const sourceFileName = `in ${kind} ${typeName} in ${sourceUrl}`;
167
- const sourceFile = new ParseSourceFile('', sourceFileName);
168
- return new ParseSourceSpan(new ParseLocation(sourceFile, -1, -1, -1), new ParseLocation(sourceFile, -1, -1, -1));
169
- }
170
- let _anonymousTypeIndex = 0;
171
- export function identifierName(compileIdentifier) {
172
- if (!compileIdentifier || !compileIdentifier.reference) {
173
- return null;
174
- }
175
- const ref = compileIdentifier.reference;
176
- if (ref['__anonymousType']) {
177
- return ref['__anonymousType'];
178
- }
179
- if (ref['__forward_ref__']) {
180
- // We do not want to try to stringify a `forwardRef()` function because that would cause the
181
- // inner function to be evaluated too early, defeating the whole point of the `forwardRef`.
182
- return '__forward_ref__';
183
- }
184
- let identifier = stringify(ref);
185
- if (identifier.indexOf('(') >= 0) {
186
- // case: anonymous functions!
187
- identifier = `anonymous_${_anonymousTypeIndex++}`;
188
- ref['__anonymousType'] = identifier;
189
- }
190
- else {
191
- identifier = sanitizeIdentifier(identifier);
192
- }
193
- return identifier;
194
- }
195
- export function sanitizeIdentifier(name) {
196
- return name.replace(/\W/g, '_');
197
- }
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy9wYXJzZV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFakMsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFDUyxJQUFxQixFQUNyQixNQUFjLEVBQ2QsSUFBWSxFQUNaLEdBQVc7UUFIWCxTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFFBQUcsR0FBSCxHQUFHLENBQVE7SUFDakIsQ0FBQztJQUVKLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMzRixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDakMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixPQUFPLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lB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b3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIGNoYXJzIGZyb20gJy4vY2hhcnMnO1xuaW1wb3J0IHtzdHJpbmdpZnl9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBQYXJzZUxvY2F0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGZpbGU6IFBhcnNlU291cmNlRmlsZSxcbiAgICBwdWJsaWMgb2Zmc2V0OiBudW1iZXIsXG4gICAgcHVibGljIGxpbmU6IG51bWJlcixcbiAgICBwdWJsaWMgY29sOiBudW1iZXIsXG4gICkge31cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9mZnNldCAhPSBudWxsID8gYCR7dGhpcy5maWxlLnVybH1AJHt0aGlzLmxpbmV9OiR7dGhpcy5jb2x9YCA6IHRoaXMuZmlsZS51cmw7XG4gIH1cblxuICBtb3ZlQnkoZGVsdGE6IG51bWJlcik6IFBhcnNlTG9jYXRpb24ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuZmlsZS5jb250ZW50O1xuICAgIGNvbnN0IGxlbiA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIGxldCBsaW5lID0gdGhpcy5saW5lO1xuICAgIGxldCBjb2wgPSB0aGlzLmNvbDtcbiAgICB3aGlsZSAob2Zmc2V0ID4gMCAmJiBkZWx0YSA8IDApIHtcbiAgICAgIG9mZnNldC0tO1xuICAgICAgZGVsdGErKztcbiAgICAgIGNvbnN0IGNoID0gc291cmNlLmNoYXJDb2RlQXQob2Zmc2V0KTtcbiAgICAgIGlmIChjaCA9PSBjaGFycy4kTEYpIHtcbiAgICAgICAgbGluZS0tO1xuICAgICAgICBjb25zdCBwcmlvckxpbmUgPSBzb3VyY2VcbiAgICAgICAgICAuc3Vic3RyaW5nKDAsIG9mZnNldCAtIDEpXG4gICAgICAgICAgLmxhc3RJbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcnMuJExGKSk7XG4gICAgICAgIGNvbCA9IHByaW9yTGluZSA+IDAgPyBvZmZzZXQgLSBwcmlvckxpbmUgOiBvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2wtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKG9mZnNldCA8IGxlbiAmJiBkZWx0YSA+IDApIHtcbiAgICAgIGNvbnN0IGNoID0gc291cmNlLmNoYXJDb2RlQXQob2Zmc2V0KTtcbiAgICAgIG9mZnNldCsrO1xuICAgICAgZGVsdGEtLTtcbiAgICAgIGlmIChjaCA9PSBjaGFycy4kTEYpIHtcbiAgICAgICAgbGluZSsrO1xuICAgICAgICBjb2wgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUGFyc2VMb2NhdGlvbih0aGlzLmZpbGUsIG9mZnNldCwgbGluZSwgY29sKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgc291cmNlIGFyb3VuZCB0aGUgbG9jYXRpb25cbiAgLy8gVXAgdG8gYG1heENoYXJzYCBvciBgbWF4TGluZXNgIG9uIGVhY2ggc2lkZSBvZiB0aGUgbG9jYXRpb25cbiAgZ2V0Q29udGV4dChtYXhDaGFyczogbnVtYmVyLCBtYXhMaW5lczogbnVtYmVyKToge2JlZm9yZTogc3RyaW5nOyBhZnRlcjogc3RyaW5nfSB8IG51bGwge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmZpbGUuY29udGVudDtcbiAgICBsZXQgc3RhcnRPZmZzZXQgPSB0aGlzLm9mZnNldDtcblxuICAgIGlmIChzdGFydE9mZnNldCAhPSBudWxsKSB7XG4gICAgICBpZiAoc3RhcnRPZmZzZXQgPiBjb250ZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgc3RhcnRPZmZzZXQgPSBjb250ZW50Lmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBsZXQgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICBsZXQgY3R4Q2hhcnMgPSAwO1xuICAgICAgbGV0IGN0eExpbmVzID0gMDtcblxuICAgICAgd2hpbGUgKGN0eENoYXJzIDwgbWF4Q2hhcnMgJiYgc3RhcnRPZmZzZXQgPiAwKSB7XG4gICAgICAgIHN0YXJ0T2Zmc2V0LS07XG4gICAgICAgIGN0eENoYXJzKys7XG4gICAgICAgIGlmIChjb250ZW50W3N0YXJ0T2Zmc2V0XSA9PSAnXFxuJykge1xuICAgICAgICAgIGlmICgrK2N0eExpbmVzID09IG1heExpbmVzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3R4Q2hhcnMgPSAwO1xuICAgICAgY3R4TGluZXMgPSAwO1xuICAgICAgd2hpbGUgKGN0eENoYXJzIDwgbWF4Q2hhcnMgJiYgZW5kT2Zmc2V0IDwgY29udGVudC5sZW5ndGggLSAxKSB7XG4gICAgICAgIGVuZE9mZnNldCsrO1xuICAgICAgICBjdHhDaGFycysrO1xuICAgICAgICBpZiAoY29udGVudFtlbmRPZmZzZXRdID09ICdcXG4nKSB7XG4gICAgICAgICAgaWYgKCsrY3R4TGluZXMgPT0gbWF4TGluZXMpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBiZWZvcmU6IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCB0aGlzLm9mZnNldCksXG4gICAgICAgIGFmdGVyOiBjb250ZW50LnN1YnN0cmluZyh0aGlzLm9mZnNldCwgZW5kT2Zmc2V0ICsgMSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJzZVNvdXJjZUZpbGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29udGVudDogc3RyaW5nLFxuICAgIHB1YmxpYyB1cmw6IHN0cmluZyxcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgUGFyc2VTb3VyY2VTcGFuIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBzcGFucyBvZiB0b2tlbnMvbm9kZXMgY2FwdHVyZWQgZHVyaW5nXG4gICAqIGxleGluZy9wYXJzaW5nIG9mIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBzdGFydFxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBzcGFuIChoYXZpbmcgc2tpcHBlZCBsZWFkaW5nIHRyaXZpYSkuXG4gICAqIFNraXBwaW5nIGxlYWRpbmcgdHJpdmlhIG1ha2VzIHNvdXJjZS1zcGFucyBtb3JlIFwidXNlciBmcmllbmRseVwiLCBzaW5jZSB0aGluZ3MgbGlrZSBIVE1MXG4gICAqIGVsZW1lbnRzIHdpbGwgYXBwZWFyIHRvIGJlZ2luIGF0IHRoZSBzdGFydCBvZiB0aGUgb3BlbmluZyB0YWcsIHJhdGhlciB0aGFuIGF0IHRoZSBzdGFydCBvZiBhbnlcbiAgICogbGVhZGluZyB0cml2aWEsIHdoaWNoIGNvdWxkIGluY2x1ZGUgbmV3bGluZXMuXG4gICAqXG4gICAqIEBwYXJhbSBlbmRcbiAgICogVGhlIGxvY2F0aW9uIG9mIHRoZSBlbmQgb2YgdGhlIHNwYW4uXG4gICAqXG4gICAqIEBwYXJhbSBmdWxsU3RhcnRcbiAgICogVGhlIHN0YXJ0IG9mIHRoZSB0b2tlbiB3aXRob3V0IHNraXBwaW5nIHRoZSBsZWFkaW5nIHRyaXZpYS5cbiAgICogVGhpcyBpcyB1c2VkIGJ5IHRvb2xpbmcgdGhhdCBzcGxpdHMgdG9rZW5zIGZ1cnRoZXIsIHN1Y2ggYXMgZXh0cmFjdGluZyBBbmd1bGFyIGludGVycG9sYXRpb25zXG4gICAqIGZyb20gdGV4dCB0b2tlbnMuIFN1Y2ggdG9vbGluZyBjcmVhdGVzIG5ldyBzb3VyY2Utc3BhbnMgcmVsYXRpdmUgdG8gdGhlIG9yaWdpbmFsIHRva2VuJ3NcbiAgICogc291cmNlLXNwYW4uIElmIGxlYWRpbmcgdHJpdmlhIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHNraXBwZWQgdGhlbiB0aGUgbmV3IHNvdXJjZS1zcGFucyBtYXkgYmVcbiAgICogaW5jb3JyZWN0bHkgb2Zmc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZGV0YWlsc1xuICAgKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIChzdWNoIGFzIGlkZW50aWZpZXIgbmFtZXMpIHRoYXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Bhbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGFydDogUGFyc2VMb2NhdGlvbixcbiAgICBwdWJsaWMgZW5kOiBQYXJzZUxvY2F0aW9uLFxuICAgIHB1YmxpYyBmdWxsU3RhcnQ6IFBhcnNlTG9jYXRpb24gPSBzdGFydCxcbiAgICBwdWJsaWMgZGV0YWlsczogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICkge31cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmZpbGUuY29udGVudC5zdWJzdHJpbmcodGhpcy5zdGFydC5vZmZzZXQsIHRoaXMuZW5kLm9mZnNldCk7XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gUGFyc2VFcnJvckxldmVsIHtcbiAgV0FSTklORyxcbiAgRVJST1IsXG59XG5cbmV4cG9ydCBjbGFzcyBQYXJzZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHNwYW46IFBhcnNlU291cmNlU3BhbixcbiAgICBwdWJsaWMgbXNnOiBzdHJpbmcsXG4gICAgcHVibGljIGxldmVsOiBQYXJzZUVycm9yTGV2ZWwgPSBQYXJzZUVycm9yTGV2ZWwuRVJST1IsXG4gICkge31cblxuICBjb250ZXh0dWFsTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuc3Bhbi5zdGFydC5nZXRDb250ZXh0KDEwMCwgMyk7XG4gICAgcmV0dXJuIGN0eFxuICAgICAgPyBgJHt0aGlzLm1zZ30gKFwiJHtjdHguYmVmb3JlfVske1BhcnNlRXJyb3JMZXZlbFt0aGlzLmxldmVsXX0gLT5dJHtjdHguYWZ0ZXJ9XCIpYFxuICAgICAgOiB0aGlzLm1zZztcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuc3Bhbi5kZXRhaWxzID8gYCwgJHt0aGlzLnNwYW4uZGV0YWlsc31gIDogJyc7XG4gICAgcmV0dXJuIGAke3RoaXMuY29udGV4dHVhbE1lc3NhZ2UoKX06ICR7dGhpcy5zcGFuLnN0YXJ0fSR7ZGV0YWlsc31gO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIFNvdXJjZSBTcGFuIG9iamVjdCBmb3IgYSBnaXZlbiBSMyBUeXBlIGZvciBKSVQgbW9kZS5cbiAqXG4gKiBAcGFyYW0ga2luZCBDb21wb25lbnQgb3IgRGlyZWN0aXZlLlxuICogQHBhcmFtIHR5cGVOYW1lIG5hbWUgb2YgdGhlIENvbXBvbmVudCBvciBEaXJlY3RpdmUuXG4gKiBAcGFyYW0gc291cmNlVXJsIHJlZmVyZW5jZSB0byBDb21wb25lbnQgb3IgRGlyZWN0aXZlIHNvdXJjZS5cbiAqIEByZXR1cm5zIGluc3RhbmNlIG9mIFBhcnNlU291cmNlU3BhbiB0aGF0IHJlcHJlc2VudCBhIGdpdmVuIENvbXBvbmVudCBvciBEaXJlY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByM0ppdFR5cGVTb3VyY2VTcGFuKFxuICBraW5kOiBzdHJpbmcsXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHNvdXJjZVVybDogc3RyaW5nLFxuKTogUGFyc2VTb3VyY2VTcGFuIHtcbiAgY29uc3Qgc291cmNlRmlsZU5hbWUgPSBgaW4gJHtraW5kfSAke3R5cGVOYW1lfSBpbiAke3NvdXJjZVVybH1gO1xuICBjb25zdCBzb3VyY2VGaWxlID0gbmV3IFBhcnNlU291cmNlRmlsZSgnJywgc291cmNlRmlsZU5hbWUpO1xuICByZXR1cm4gbmV3IFBhcnNlU291cmNlU3BhbihcbiAgICBuZXcgUGFyc2VMb2NhdGlvbihzb3VyY2VGaWxlLCAtMSwgLTEsIC0xKSxcbiAgICBuZXcgUGFyc2VMb2NhdGlvbihzb3VyY2VGaWxlLCAtMSwgLTEsIC0xKSxcbiAgKTtcbn1cblxubGV0IF9hbm9ueW1vdXNUeXBlSW5kZXggPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllck5hbWUoXG4gIGNvbXBpbGVJZGVudGlmaWVyOiBDb21waWxlSWRlbnRpZmllck1ldGFkYXRhIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWNvbXBpbGVJZGVudGlmaWVyIHx8ICFjb21waWxlSWRlbnRpZmllci5yZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWYgPSBjb21waWxlSWRlbnRpZmllci5yZWZlcmVuY2U7XG4gIGlmIChyZWZbJ19fYW5vbnltb3VzVHlwZSddKSB7XG4gICAgcmV0dXJuIHJlZlsnX19hbm9ueW1vdXNUeXBlJ107XG4gIH1cbiAgaWYgKHJlZlsnX19mb3J3YXJkX3JlZl9fJ10pIHtcbiAgICAvLyBXZSBkbyBub3Qgd2FudCB0byB0cnkgdG8gc3RyaW5naWZ5IGEgYGZvcndhcmRSZWYoKWAgZnVuY3Rpb24gYmVjYXVzZSB0aGF0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGlubmVyIGZ1bmN0aW9uIHRvIGJlIGV2YWx1YXRlZCB0b28gZWFybHksIGRlZmVhdGluZyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIGBmb3J3YXJkUmVmYC5cbiAgICByZXR1cm4gJ19fZm9yd2FyZF9yZWZfXyc7XG4gIH1cbiAgbGV0IGlkZW50aWZpZXIgPSBzdHJpbmdpZnkocmVmKTtcbiAgaWYgKGlkZW50aWZpZXIuaW5kZXhPZignKCcpID49IDApIHtcbiAgICAvLyBjYXNlOiBhbm9ueW1vdXMgZnVuY3Rpb25zIVxuICAgIGlkZW50aWZpZXIgPSBgYW5vbnltb3VzXyR7X2Fub255bW91c1R5cGVJbmRleCsrfWA7XG4gICAgcmVmWydfX2Fub255bW91c1R5cGUnXSA9IGlkZW50aWZpZXI7XG4gIH0gZWxzZSB7XG4gICAgaWRlbnRpZmllciA9IHNhbml0aXplSWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlSWRlbnRpZmllck1ldGFkYXRhIHtcbiAgcmVmZXJlbmNlOiBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlkZW50aWZpZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXFxXL2csICdfJyk7XG59XG4iXX0=
@@ -1,9 +0,0 @@
1
- export var FactoryTarget;
2
- (function (FactoryTarget) {
3
- FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
4
- FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
5
- FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
6
- FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
7
- FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
8
- })(FactoryTarget || (FactoryTarget = {}));
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3JlbmRlcjMvcGFydGlhbC9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNmJBLE1BQU0sQ0FBTixJQUFZLGFBTVg7QUFORCxXQUFZLGFBQWE7SUFDdkIsMkRBQWEsQ0FBQTtJQUNiLDJEQUFhLENBQUE7SUFDYiw2REFBYyxDQUFBO0lBQ2QsaURBQVEsQ0FBQTtJQUNSLHlEQUFZLENBQUE7QUFDZCxDQUFDLEVBTlcsYUFBYSxLQUFiLGFBQWEsUUFNeEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCAqIGFzIG8gZnJvbSAnLi4vLi4vb3V0cHV0L291dHB1dF9hc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFIzUGFydGlhbERlY2xhcmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIGNvbXBpbGVyIHRoYXQgY2FuIHByb2Nlc3MgdGhpcyBwYXJ0aWFsIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgbWluVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgQW5ndWxhciBjb21waWxlciB0aGF0IHdhcyB1c2VkIHRvIGNvbXBpbGUgdGhpcyBkZWNsYXJhdGlvbi4gVGhlIGxpbmtlclxuICAgKiB3aWxsIGJlIGFibGUgdG8gZGV0ZWN0IHdoaWNoIHZlcnNpb24gYSBsaWJyYXJ5IGlzIHVzaW5nIGFuZCBpbnRlcnByZXQgaXRzIG1ldGFkYXRhIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgYEBhbmd1bGFyL2NvcmVgIEVTIG1vZHVsZSwgd2hpY2ggYWxsb3dzIGFjY2Vzc1xuICAgKiB0byBhbGwgQW5ndWxhciBleHBvcnRzLCBpbmNsdWRpbmcgSXZ5IGluc3RydWN0aW9ucy5cbiAgICovXG4gIG5nSW1wb3J0OiBvLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgZGVjb3JhdGVkIGNsYXNzLCB3aGljaCBpcyBzdWJqZWN0IHRvIHRoaXMgcGFydGlhbCBkZWNsYXJhdGlvbi5cbiAgICovXG4gIHR5cGU6IG8uRXhwcmVzc2lvbjtcbn1cblxuLy8gVE9ETyhsZWdhY3ktcGFydGlhbC1vdXRwdXQtaW5wdXRzKTogUmVtb3ZlIGluIHYxOC5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kNGI0MjM2OTAyMTA4NzJiNWMzMmEzMjJhNjA5MGJlZGEzMGIwNWEzL3BhY2thZ2VzL2NvcmUvc3JjL2NvbXBpbGVyL2NvbXBpbGVyX2ZhY2FkZV9pbnRlcmZhY2UudHMjTDE5Ny1MMTk5XG5leHBvcnQgdHlwZSBMZWdhY3lJbnB1dFBhcnRpYWxNYXBwaW5nID1cbiAgfCBzdHJpbmdcbiAgfCBbYmluZGluZ1Byb3BlcnR5TmFtZTogc3RyaW5nLCBjbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nLCB0cmFuc2Zvcm1GdW5jdGlvbj86IG8uRXhwcmVzc2lvbl07XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IHRoYXQgdGhlIGDJtcm1bmdEZWNsYXJlRGlyZWN0aXZlKClgIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlRGlyZWN0aXZlTWV0YWRhdGEgZXh0ZW5kcyBSM1BhcnRpYWxEZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBVbnBhcnNlZCBzZWxlY3RvciBvZiB0aGUgZGlyZWN0aXZlLlxuICAgKi9cbiAgc2VsZWN0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBpbnB1dHMgZnJvbSBjbGFzcyBwcm9wZXJ0eSBuYW1lcyB0byBiaW5kaW5nIHByb3BlcnR5IG5hbWVzLCBvciB0byBhIHR1cGxlIG9mXG4gICAqIGJpbmRpbmcgcHJvcGVydHkgbmFtZSBhbmQgY2xhc3MgcHJvcGVydHkgbmFtZSBpZiB0aGUgbmFtZXMgYXJlIGRpZmZlcmVudC5cbiAgICovXG4gIGlucHV0cz86IHtcbiAgICBbZmllbGROYW1lOiBzdHJpbmddOlxuICAgICAgfCB7XG4gICAgICAgICAgY2xhc3NQcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgICAgICAgICBwdWJsaWNOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgaXNTaWduYWw6IGJvb2xlYW47XG4gICAgICAgICAgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgICAgICAgICB0cmFuc2Zvcm1GdW5jdGlvbjogby5FeHByZXNzaW9uIHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfCBMZWdhY3lJbnB1dFBhcnRpYWxNYXBwaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2Ygb3V0cHV0cyBmcm9tIGNsYXNzIHByb3BlcnR5IG5hbWVzIHRvIGJpbmRpbmcgcHJvcGVydHkgbmFtZXMuXG4gICAqL1xuICBvdXRwdXRzPzoge1tjbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nXTogc3RyaW5nfTtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgaG9zdCBiaW5kaW5ncyBwcmVzZW50IG9uIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBob3N0Pzoge1xuICAgIC8qKlxuICAgICAqIEEgbWFwcGluZyBvZiBhdHRyaWJ1dGUgbmFtZXMgdG8gdGhlaXIgdmFsdWUgZXhwcmVzc2lvbi5cbiAgICAgKi9cbiAgICBhdHRyaWJ1dGVzPzoge1trZXk6IHN0cmluZ106IG8uRXhwcmVzc2lvbn07XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcHBpbmcgb2YgZXZlbnQgbmFtZXMgdG8gdGhlaXIgdW5wYXJzZWQgZXZlbnQgaGFuZGxlciBleHByZXNzaW9uLlxuICAgICAqL1xuICAgIGxpc3RlbmVyczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG5cbiAgICAvKipcbiAgICAgKiBBIG1hcHBpbmcgb2YgYm91bmQgcHJvcGVydGllcyB0byB0aGVpciB1bnBhcnNlZCBiaW5kaW5nIGV4cHJlc3Npb24uXG4gICAgICovXG4gICAgcHJvcGVydGllcz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHZhbHVlIG9mIHRoZSBjbGFzcyBhdHRyaWJ1dGUsIGlmIHByZXNlbnQuIFRoaXMgaXMgc3RvcmVkIG91dHNpZGUgb2YgYGF0dHJpYnV0ZXNgIGFzIGl0c1xuICAgICAqIHN0cmluZyB2YWx1ZSBtdXN0IGJlIGtub3duIHN0YXRpY2FsbHkuXG4gICAgICovXG4gICAgY2xhc3NBdHRyaWJ1dGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHN0eWxlIGF0dHJpYnV0ZSwgaWYgcHJlc2VudC4gVGhpcyBpcyBzdG9yZWQgb3V0c2lkZSBvZiBgYXR0cmlidXRlc2AgYXMgaXRzXG4gICAgICogc3RyaW5nIHZhbHVlIG11c3QgYmUga25vd24gc3RhdGljYWxseS5cbiAgICAgKi9cbiAgICBzdHlsZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRlbnQgcXVlcmllcyBtYWRlIGJ5IHRoZSBkaXJlY3RpdmUuXG4gICAqL1xuICBxdWVyaWVzPzogUjNEZWNsYXJlUXVlcnlNZXRhZGF0YVtdO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdmlldyBxdWVyaWVzIG1hZGUgYnkgdGhlIGRpcmVjdGl2ZS5cbiAgICovXG4gIHZpZXdRdWVyaWVzPzogUjNEZWNsYXJlUXVlcnlNZXRhZGF0YVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBwcm92aWRlcnMgcHJvdmlkZWQgYnkgdGhlIGRpcmVjdGl2ZS5cbiAgICovXG4gIHByb3ZpZGVycz86IG8uRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWVzIGJ5IHdoaWNoIHRoZSBkaXJlY3RpdmUgaXMgZXhwb3J0ZWQuXG4gICAqL1xuICBleHBvcnRBcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaGFzIGFuIGluaGVyaXRhbmNlIGNsYXVzZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICB1c2VzSW5oZXJpdGFuY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaW1wbGVtZW50cyB0aGUgYG5nT25DaGFuZ2VzYCBob29rLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIHVzZXNPbkNoYW5nZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaXMgc3RhbmRhbG9uZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBpc1N0YW5kYWxvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXJlY3RpdmUgaXMgYSBzaWduYWwtYmFzZWQgZGlyZWN0aXZlLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIGlzU2lnbmFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBkaXJlY3RpdmVzIGFwcGxpZWQgdG8gdGhlIGRpcmVjdGl2ZSBob3N0LlxuICAgKi9cbiAgaG9zdERpcmVjdGl2ZXM/OiBSM0RlY2xhcmVIb3N0RGlyZWN0aXZlTWV0YWRhdGFbXTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHNoYXBlIG9mIHRoZSBvYmplY3QgdGhhdCB0aGUgYMm1ybVuZ0RlY2xhcmVDb21wb25lbnQoKWAgZnVuY3Rpb24gYWNjZXB0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVDb21wb25lbnRNZXRhZGF0YSBleHRlbmRzIFIzRGVjbGFyZURpcmVjdGl2ZU1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQncyB1bnBhcnNlZCB0ZW1wbGF0ZSBzdHJpbmcgYXMgb3BhcXVlIGV4cHJlc3Npb24uIFRoZSB0ZW1wbGF0ZSBpcyByZXByZXNlbnRlZFxuICAgKiB1c2luZyBlaXRoZXIgYSBzdHJpbmcgbGl0ZXJhbCBvciB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGhvdXQgc3Vic3RpdHV0aW9ucywgYnV0IGl0cyB2YWx1ZSBpc1xuICAgKiBub3QgcmVhZCBkaXJlY3RseS4gSW5zdGVhZCwgdGhlIHRlbXBsYXRlIHBhcnNlciBpcyBnaXZlbiB0aGUgZnVsbCBzb3VyY2UgZmlsZSdzIHRleHQgYW5kXG4gICAqIHRoZSByYW5nZSBvZiB0aGlzIGV4cHJlc3Npb24gdG8gcGFyc2UgZGlyZWN0bHkgZnJvbSBzb3VyY2UuXG4gICAqL1xuICB0ZW1wbGF0ZTogby5FeHByZXNzaW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0ZW1wbGF0ZSB3YXMgaW5saW5lICh1c2luZyBgdGVtcGxhdGVgKSBvciBleHRlcm5hbCAodXNpbmcgYHRlbXBsYXRlVXJsYCkuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgaXNJbmxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDU1MgZnJvbSBpbmxpbmUgc3R5bGVzIGFuZCBpbmNsdWRlZCBzdHlsZVVybHMuXG4gICAqL1xuICBzdHlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIG1hdGNoZWQgaW4gdGhlIHRlbXBsYXRlLCBpbmNsdWRpbmcgc3VmZmljaWVudFxuICAgKiBtZXRhZGF0YSBmb3IgZWFjaCBkaXJlY3RpdmUgdG8gYXR0cmlidXRlIGJpbmRpbmdzIGFuZCByZWZlcmVuY2VzIHdpdGhpblxuICAgKiB0aGUgdGVtcGxhdGUgdG8gZWFjaCBkaXJlY3RpdmUgc3BlY2lmaWNhbGx5LCBpZiB0aGUgcnVudGltZSBpbnN0cnVjdGlvbnNcbiAgICogc3VwcG9ydCB0aGlzLlxuICAgKi9cbiAgY29tcG9uZW50cz86IFIzRGVjbGFyZURpcmVjdGl2ZURlcGVuZGVuY3lNZXRhZGF0YVtdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGRpcmVjdGl2ZXMgd2hpY2ggbWF0Y2hlZCBpbiB0aGUgdGVtcGxhdGUsIGluY2x1ZGluZyBzdWZmaWNpZW50XG4gICAqIG1ldGFkYXRhIGZvciBlYWNoIGRpcmVjdGl2ZSB0byBhdHRyaWJ1dGUgYmluZGluZ3MgYW5kIHJlZmVyZW5jZXMgd2l0aGluXG4gICAqIHRoZSB0ZW1wbGF0ZSB0byBlYWNoIGRpcmVjdGl2ZSBzcGVjaWZpY2FsbHksIGlmIHRoZSBydW50aW1lIGluc3RydWN0aW9uc1xuICAgKiBzdXBwb3J0IHRoaXMuXG4gICAqL1xuICBkaXJlY3RpdmVzPzogUjNEZWNsYXJlRGlyZWN0aXZlRGVwZW5kZW5jeU1ldGFkYXRhW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZGVwZW5kZW5jaWVzIHdoaWNoIG1hdGNoZWQgaW4gdGhlIHRlbXBsYXRlLCBpbmNsdWRpbmcgc3VmZmljaWVudFxuICAgKiBtZXRhZGF0YSBmb3IgZWFjaCBkaXJlY3RpdmUvcGlwZSB0byBhdHRyaWJ1dGUgYmluZGluZ3MgYW5kIHJlZmVyZW5jZXMgd2l0aGluXG4gICAqIHRoZSB0ZW1wbGF0ZSB0byBlYWNoIGRpcmVjdGl2ZSBzcGVjaWZpY2FsbHksIGlmIHRoZSBydW50aW1lIGluc3RydWN0aW9uc1xuICAgKiBzdXBwb3J0IHRoaXMuXG4gICAqL1xuICBkZXBlbmRlbmNpZXM/OiBSM0RlY2xhcmVUZW1wbGF0ZURlcGVuZGVuY3lNZXRhZGF0YVtdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGRlZmVyIGJsb2NrIGRlcGVuZGVuY3kgZnVuY3Rpb25zLCBvcmRlcmVkIGJ5IHRoZSBhcHBlYXJhbmNlXG4gICAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRlZmVycmVkIGJsb2NrIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIGRlZmVyQmxvY2tEZXBlbmRlbmNpZXM/OiBvLkV4cHJlc3Npb25bXTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgcGlwZSBuYW1lcyB0byBhbiBleHByZXNzaW9uIHJlZmVyZW5jaW5nIHRoZSBwaXBlIHR5cGUgKHBvc3NpYmx5IGEgZm9yd2FyZCByZWZlcmVuY2VcbiAgICogd3JhcHBlZCBpbiBhIGBmb3J3YXJkUmVmYCBpbnZvY2F0aW9uKSB3aGljaCBhcmUgdXNlZCBpbiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBwaXBlcz86IHtbcGlwZU5hbWU6IHN0cmluZ106IG8uRXhwcmVzc2lvbiB8ICgoKSA9PiBvLkV4cHJlc3Npb24pfTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdmlldyBwcm92aWRlcnMgZGVmaW5lZCBpbiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgdmlld1Byb3ZpZGVycz86IG8uRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIGFuaW1hdGlvbiB0cmlnZ2VycyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgY29tcG9uZW50IHRlbXBsYXRlLlxuICAgKi9cbiAgYW5pbWF0aW9ucz86IG8uRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogU3RyYXRlZ3kgdXNlZCBmb3IgZGV0ZWN0aW5nIGNoYW5nZXMgaW4gdGhlIGNvbXBvbmVudC5cbiAgICogRGVmYXVsdHMgdG8gYENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHRgLlxuICAgKi9cbiAgY2hhbmdlRGV0ZWN0aW9uPzogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEFuIGVuY2Fwc3VsYXRpb24gcG9saWN5IGZvciB0aGUgY29tcG9uZW50J3Mgc3R5bGluZy5cbiAgICogRGVmYXVsdHMgdG8gYFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkYC5cbiAgICovXG4gIGVuY2Fwc3VsYXRpb24/OiBWaWV3RW5jYXBzdWxhdGlvbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGludGVycG9sYXRpb24gc3RhcnQgYW5kIGVuZCBkZWxpbWl0ZXJzLiBEZWZhdWx0cyB0byB7eyBhbmQgfX0uXG4gICAqL1xuICBpbnRlcnBvbGF0aW9uPzogW3N0cmluZywgc3RyaW5nXTtcblxuICAvKipcbiAgICogV2hldGhlciB3aGl0ZXNwYWNlIGluIHRoZSB0ZW1wbGF0ZSBzaG91bGQgYmUgcHJlc2VydmVkLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBSM0RlY2xhcmVUZW1wbGF0ZURlcGVuZGVuY3lNZXRhZGF0YSA9XG4gIHwgUjNEZWNsYXJlRGlyZWN0aXZlRGVwZW5kZW5jeU1ldGFkYXRhXG4gIHwgUjNEZWNsYXJlUGlwZURlcGVuZGVuY3lNZXRhZGF0YVxuICB8IFIzRGVjbGFyZU5nTW9kdWxlRGVwZW5kZW5jeU1ldGFkYXRhO1xuXG5leHBvcnQgaW50ZXJmYWNlIFIzRGVjbGFyZURpcmVjdGl2ZURlcGVuZGVuY3lNZXRhZGF0YSB7XG4gIGtpbmQ6ICdkaXJlY3RpdmUnIHwgJ2NvbXBvbmVudCc7XG5cbiAgLyoqXG4gICAqIFNlbGVjdG9yIG9mIHRoZSBkaXJlY3RpdmUuXG4gICAqL1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGRpcmVjdGl2ZSBjbGFzcyAocG9zc2libHkgYSBmb3J3YXJkIHJlZmVyZW5jZSB3cmFwcGVkIGluIGEgYGZvcndhcmRSZWZgXG4gICAqIGludm9jYXRpb24pLlxuICAgKi9cbiAgdHlwZTogby5FeHByZXNzaW9uIHwgKCgpID0+IG8uRXhwcmVzc2lvbik7XG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IG5hbWVzIG9mIHRoZSBkaXJlY3RpdmUncyBpbnB1dHMuXG4gICAqL1xuICBpbnB1dHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRXZlbnQgbmFtZXMgb2YgdGhlIGRpcmVjdGl2ZSdzIG91dHB1dHMuXG4gICAqL1xuICBvdXRwdXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWVzIGJ5IHdoaWNoIHRoaXMgZGlyZWN0aXZlIGV4cG9ydHMgaXRzZWxmIGZvciByZWZlcmVuY2VzLlxuICAgKi9cbiAgZXhwb3J0QXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVQaXBlRGVwZW5kZW5jeU1ldGFkYXRhIHtcbiAga2luZDogJ3BpcGUnO1xuXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBwaXBlIGNsYXNzIChwb3NzaWJseSBhIGZvcndhcmQgcmVmZXJlbmNlIHdyYXBwZWQgaW4gYSBgZm9yd2FyZFJlZmBcbiAgICogaW52b2NhdGlvbikuXG4gICAqL1xuICB0eXBlOiBvLkV4cHJlc3Npb24gfCAoKCkgPT4gby5FeHByZXNzaW9uKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVOZ01vZHVsZURlcGVuZGVuY3lNZXRhZGF0YSB7XG4gIGtpbmQ6ICduZ21vZHVsZSc7XG5cbiAgdHlwZTogby5FeHByZXNzaW9uIHwgKCgpID0+IG8uRXhwcmVzc2lvbik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlUXVlcnlNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgY2xhc3MgdG8gdXBkYXRlIHdpdGggcXVlcnkgcmVzdWx0cy5cbiAgICovXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlYWQgb25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgcmVzdWx0LCBvciBhbiBhcnJheSBvZiByZXN1bHRzLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICovXG4gIGZpcnN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRWl0aGVyIGFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIGEgdHlwZSAocG9zc2libHkgd3JhcHBlZCBpbiBhIGBmb3J3YXJkUmVmKClgKSBvclxuICAgKiBgSW5qZWN0aW9uVG9rZW5gIGZvciB0aGUgcXVlcnkgcHJlZGljYXRlLCBvciBhIHNldCBvZiBzdHJpbmcgc2VsZWN0b3JzLlxuICAgKi9cbiAgcHJlZGljYXRlOiBvLkV4cHJlc3Npb24gfCBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIG9ubHkgZGlyZWN0IGNoaWxkcmVuIG9yIGFsbCBkZXNjZW5kYW50cy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBkZXNjZW5kYW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRydWUgdG8gb25seSBmaXJlIGNoYW5nZXMgaWYgdGhlcmUgYXJlIHVuZGVybHlpbmcgY2hhbmdlcyB0byB0aGUgcXVlcnkuXG4gICAqL1xuICBlbWl0RGlzdGluY3RDaGFuZ2VzT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIGEgdHlwZSB0byByZWFkIGZyb20gZWFjaCBtYXRjaGVkIG5vZGUsIG9yIG51bGwgaWYgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICogZm9yIGEgZ2l2ZW4gbm9kZSBpcyB0byBiZSByZXR1cm5lZC5cbiAgICovXG4gIHJlYWQ/OiBvLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoaXMgcXVlcnkgc2hvdWxkIGNvbGxlY3Qgb25seSBzdGF0aWMgcmVzdWx0cy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqXG4gICAqIElmIHN0YXRpYyBpcyB0cnVlLCB0aGUgcXVlcnkncyByZXN1bHRzIHdpbGwgYmUgc2V0IG9uIHRoZSBjb21wb25lbnQgYWZ0ZXIgbm9kZXMgYXJlIGNyZWF0ZWQsXG4gICAqIGJ1dCBiZWZvcmUgY2hhbmdlIGRldGVjdGlvbiBydW5zLiBUaGlzIG1lYW5zIHRoYXQgYW55IHJlc3VsdHMgdGhhdCByZWxpZWQgdXBvbiBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqIHRvIHJ1biAoZS5nLiByZXN1bHRzIGluc2lkZSAqbmdJZiBvciAqbmdGb3Igdmlld3MpIHdpbGwgbm90IGJlIGNvbGxlY3RlZC4gUXVlcnkgcmVzdWx0cyBhcmVcbiAgICogYXZhaWxhYmxlIGluIHRoZSBuZ09uSW5pdCBob29rLlxuICAgKlxuICAgKiBJZiBzdGF0aWMgaXMgZmFsc2UsIHRoZSBxdWVyeSdzIHJlc3VsdHMgd2lsbCBiZSBzZXQgb24gdGhlIGNvbXBvbmVudCBhZnRlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqIHJ1bnMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcXVlcnkgcmVzdWx0cyBjYW4gY29udGFpbiBub2RlcyBpbnNpZGUgKm5nSWYgb3IgKm5nRm9yIHZpZXdzLCBidXRcbiAgICogdGhlIHJlc3VsdHMgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBuZ09uSW5pdCBob29rIChvbmx5IGluIHRoZSBuZ0FmdGVyQ29udGVudEluaXQgZm9yXG4gICAqIGNvbnRlbnQgaG9va3MgYW5kIG5nQWZ0ZXJWaWV3SW5pdCBmb3IgdmlldyBob29rcykuXG4gICAqL1xuICBzdGF0aWM/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBxdWVyeSBpcyBzaWduYWwtYmFzZWQuICovXG4gIGlzU2lnbmFsOiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgc2hhcGUgb2YgdGhlIG9iamVjdHMgdGhhdCB0aGUgYMm1ybVuZ0RlY2xhcmVOZ01vZHVsZSgpYCBhY2NlcHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFIzRGVjbGFyZU5nTW9kdWxlTWV0YWRhdGEgZXh0ZW5kcyBSM1BhcnRpYWxEZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBleHByZXNzaW9ucyByZXByZXNlbnRpbmcgdGhlIGJvb3RzdHJhcCBjb21wb25lbnRzIHNwZWNpZmllZCBieSB0aGUgbW9kdWxlLlxuICAgKi9cbiAgYm9vdHN0cmFwPzogby5FeHByZXNzaW9uW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGV4cHJlc3Npb25zIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0aXZlcyBhbmQgcGlwZXMgZGVjbGFyZWQgYnkgdGhlIG1vZHVsZS5cbiAgICovXG4gIGRlY2xhcmF0aW9ucz86IG8uRXhwcmVzc2lvbltdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBleHByZXNzaW9ucyByZXByZXNlbnRpbmcgdGhlIGltcG9ydHMgb2YgdGhlIG1vZHVsZS5cbiAgICovXG4gIGltcG9ydHM/OiBvLkV4cHJlc3Npb25bXTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZXhwcmVzc2lvbnMgcmVwcmVzZW50aW5nIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGUuXG4gICAqL1xuICBleHBvcnRzPzogby5FeHByZXNzaW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2Ygc2NoZW1hcyB0aGF0IGRlY2xhcmUgZWxlbWVudHMgdG8gYmUgYWxsb3dlZCBpbiB0aGUgTmdNb2R1bGUuXG4gICAqL1xuICBzY2hlbWFzPzogby5FeHByZXNzaW9uW107XG5cbiAgLyoqIFVuaXF1ZSBJRCBvciBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgdW5pcXVlIElEIG9mIGFuIE5nTW9kdWxlLiAqL1xuICBpZD86IG8uRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHNoYXBlIG9mIHRoZSBvYmplY3RzIHRoYXQgdGhlIGDJtcm1bmdEZWNsYXJlSW5qZWN0b3IoKWAgYWNjZXB0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVJbmplY3Rvck1ldGFkYXRhIGV4dGVuZHMgUjNQYXJ0aWFsRGVjbGFyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcHJvdmlkZXJzIHByb3ZpZGVkIGJ5IHRoZSBpbmplY3Rvci5cbiAgICovXG4gIHByb3ZpZGVycz86IG8uRXhwcmVzc2lvbjtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGltcG9ydHMgaW50byB0aGUgaW5qZWN0b3IuXG4gICAqL1xuICBpbXBvcnRzPzogby5FeHByZXNzaW9uW107XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IHRoYXQgdGhlIGDJtcm1bmdEZWNsYXJlUGlwZSgpYCBmdW5jdGlvbiBhY2NlcHRzLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIHNlcnZlcyBwcmltYXJpbHkgYXMgZG9jdW1lbnRhdGlvbiwgYXMgY29uZm9ybWFuY2UgdG8gdGhpcyBpbnRlcmZhY2UgaXMgbm90XG4gKiBlbmZvcmNlZCBkdXJpbmcgbGlua2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVQaXBlTWV0YWRhdGEgZXh0ZW5kcyBSM1BhcnRpYWxEZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSB0byB1c2UgaW4gdGVtcGxhdGVzIHRvIHJlZmVyIHRvIHRoaXMgcGlwZS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHBpcGUgaXMgXCJwdXJlXCIuXG4gICAqXG4gICAqIEEgcHVyZSBwaXBlJ3MgYHRyYW5zZm9ybSgpYCBtZXRob2QgaXMgb25seSBpbnZva2VkIHdoZW4gaXRzIGlucHV0IGFyZ3VtZW50cyBjaGFuZ2UuXG4gICAqXG4gICAqIERlZmF1bHQ6IHRydWUuXG4gICAqL1xuICBwdXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGlwZSBpcyBzdGFuZGFsb25lLlxuICAgKlxuICAgKiBEZWZhdWx0OiBmYWxzZS5cbiAgICovXG4gIGlzU3RhbmRhbG9uZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IHRoYXQgdGhlIGDJtcm1bmdEZWNsYXJlRmFjdG9yeSgpYCBmdW5jdGlvbiBhY2NlcHRzLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIHNlcnZlcyBwcmltYXJpbHkgYXMgZG9jdW1lbnRhdGlvbiwgYXMgY29uZm9ybWFuY2UgdG8gdGhpcyBpbnRlcmZhY2UgaXMgbm90XG4gKiBlbmZvcmNlZCBkdXJpbmcgbGlua2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVGYWN0b3J5TWV0YWRhdGEgZXh0ZW5kcyBSM1BhcnRpYWxEZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGNvbGxlY3Rpb24gb2YgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBmYWN0b3J5IHJlbGllcyB1cG9uLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGBudWxsYCwgdGhlbiB0aGUgdHlwZSdzIGNvbnN0cnVjdG9yIGlzIG5vbmV4aXN0ZW50IGFuZCB3aWxsIGJlIGluaGVyaXRlZCBmcm9tIGFuXG4gICAqIGFuY2VzdG9yIG9mIHRoZSB0eXBlLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGAnaW52YWxpZCdgLCB0aGVuIG9uZSBvciBtb3JlIG9mIHRoZSBwYXJhbWV0ZXJzIHdhc24ndCByZXNvbHZhYmxlIGFuZCBhbnkgYXR0ZW1wdCB0b1xuICAgKiB1c2UgdGhlc2UgZGVwcyB3aWxsIHJlc3VsdCBpbiBhIHJ1bnRpbWUgZXJyb3IuXG4gICAqL1xuICBkZXBzOiBSM0RlY2xhcmVEZXBlbmRlbmN5TWV0YWRhdGFbXSB8ICdpbnZhbGlkJyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIHRhcmdldCBiZWluZyBjcmVhdGVkIGJ5IHRoZSBmYWN0b3J5LlxuICAgKi9cbiAgdGFyZ2V0OiBGYWN0b3J5VGFyZ2V0O1xufVxuXG5leHBvcnQgZW51bSBGYWN0b3J5VGFyZ2V0IHtcbiAgRGlyZWN0aXZlID0gMCxcbiAgQ29tcG9uZW50ID0gMSxcbiAgSW5qZWN0YWJsZSA9IDIsXG4gIFBpcGUgPSAzLFxuICBOZ01vZHVsZSA9IDQsXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IHRoYXQgdGhlIGDJtcm1bmdEZWNsYXJlSW5qZWN0YWJsZSgpYCBmdW5jdGlvbiBhY2NlcHRzLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIHNlcnZlcyBwcmltYXJpbHkgYXMgZG9jdW1lbnRhdGlvbiwgYXMgY29uZm9ybWFuY2UgdG8gdGhpcyBpbnRlcmZhY2UgaXMgbm90XG4gKiBlbmZvcmNlZCBkdXJpbmcgbGlua2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVJbmplY3RhYmxlTWV0YWRhdGEgZXh0ZW5kcyBSM1BhcnRpYWxEZWNsYXJhdGlvbiB7XG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgc3BlY2lmaWVzIHRoYXQgdGhlIGRlY2xhcmVkIGluamVjdGFibGUgYmVsb25ncyB0byBhIHBhcnRpY3VsYXIgaW5qZWN0b3I6XG4gICAqIC0gYEluamVjdG9yVHlwZWAgc3VjaCBhcyBgTmdNb2R1bGVgLFxuICAgKiAtIGAncm9vdCdgIHRoZSByb290IGluamVjdG9yXG4gICAqIC0gYCdhbnknYCBhbGwgaW5qZWN0b3JzLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZW4gaXQgZG9lcyBub3QgYmVsb25nIHRvIGFueSBpbmplY3Rvci4gTXVzdCBiZSBleHBsaWNpdGx5IGxpc3RlZCBpbiB0aGVcbiAgICogcHJvdmlkZXJzIG9mIGFuIGluamVjdG9yLlxuICAgKi9cbiAgcHJvdmlkZWRJbj86IG8uRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIGFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYSBjbGFzcyB0byB1c2Ugd2hlbiBjcmVhdGluZyBhbiBpbnN0YW5jZSBvZiB0aGlzXG4gICAqIGluamVjdGFibGUuXG4gICAqL1xuICB1c2VDbGFzcz86IG8uRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogSWYgcHJvdmlkZWQsIGFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYSBmdW5jdGlvbiB0byB1c2Ugd2hlbiBjcmVhdGluZyBhbiBpbnN0YW5jZSBvZlxuICAgKiB0aGlzIGluamVjdGFibGUuXG4gICAqL1xuICB1c2VGYWN0b3J5Pzogby5FeHByZXNzaW9uO1xuXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBhIHRva2VuIG9mIGFub3RoZXIgaW5qZWN0YWJsZSB0aGF0IHRoaXMgaW5qZWN0YWJsZVxuICAgKiBhbGlhc2VzLlxuICAgKi9cbiAgdXNlRXhpc3Rpbmc/OiBvLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBhbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBpbmplY3RhYmxlLlxuICAgKi9cbiAgdXNlVmFsdWU/OiBvLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGRlcGVuZGVuY2llcyB0byBzdXBwb3J0IGluc3RhbnRpYXRpbmcgdGhpcyBpbmplY3RhYmxlIHZpYSBgdXNlQ2xhc3NgIG9yXG4gICAqIGB1c2VGYWN0b3J5YC5cbiAgICovXG4gIGRlcHM/OiBSM0RlY2xhcmVEZXBlbmRlbmN5TWV0YWRhdGFbXTtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBpbmRpY2F0aW5nIGhvdyBhIGRlcGVuZGVuY3kgc2hvdWxkIGJlIGluamVjdGVkIGludG8gYSBmYWN0b3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFIzRGVjbGFyZURlcGVuZGVuY3lNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgdG9rZW4gb3IgdmFsdWUgdG8gYmUgaW5qZWN0ZWQsIG9yIGBudWxsYCBpZiB0aGUgZGVwZW5kZW5jeSBpc1xuICAgKiBub3QgdmFsaWQuXG4gICAqXG4gICAqIElmIHRoaXMgZGVwZW5kZW5jeSBpcyBkdWUgdG8gdGhlIGBAQXR0cmlidXRlKClgIGRlY29yYXRvciwgdGhlbiB0aGlzIGlzIGFuIGV4cHJlc3Npb25cbiAgICogZXZhbHVhdGluZyB0byB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgdG9rZW46IG8uRXhwcmVzc2lvbiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRlcGVuZGVuY3kgaXMgaW5qZWN0aW5nIGFuIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogRGVmYXVsdDogZmFsc2UuXG4gICAqL1xuICBhdHRyaWJ1dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkZXBlbmRlbmN5IGhhcyBhbiBASG9zdCBxdWFsaWZpZXIuXG4gICAqIERlZmF1bHQ6IGZhbHNlLFxuICAgKi9cbiAgaG9zdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRlcGVuZGVuY3kgaGFzIGFuIEBPcHRpb25hbCBxdWFsaWZpZXIuXG4gICAqIERlZmF1bHQ6IGZhbHNlLFxuICAgKi9cbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkZXBlbmRlbmN5IGhhcyBhbiBAU2VsZiBxdWFsaWZpZXIuXG4gICAqIERlZmF1bHQ6IGZhbHNlLFxuICAgKi9cbiAgc2VsZj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRlcGVuZGVuY3kgaGFzIGFuIEBTa2lwU2VsZiBxdWFsaWZpZXIuXG4gICAqIERlZmF1bHQ6IGZhbHNlLFxuICAgKi9cbiAgc2tpcFNlbGY/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgc2hhcGUgb2YgdGhlIG9iamVjdCB0aGF0IHRoZSBgybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoKWAgZnVuY3Rpb24gYWNjZXB0cy5cbiAqXG4gKiBUaGlzIGludGVyZmFjZSBzZXJ2ZXMgcHJpbWFyaWx5IGFzIGRvY3VtZW50YXRpb24sIGFzIGNvbmZvcm1hbmNlIHRvIHRoaXMgaW50ZXJmYWNlIGlzIG5vdFxuICogZW5mb3JjZWQgZHVyaW5nIGxpbmtpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlQ2xhc3NNZXRhZGF0YSBleHRlbmRzIFIzUGFydGlhbERlY2xhcmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBbmd1bGFyIGRlY29yYXRvcnMgb2YgdGhlIGNsYXNzLlxuICAgKi9cbiAgZGVjb3JhdG9yczogby5FeHByZXNzaW9uO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVycywgdGhlaXIgdHlwZXMgYW5kIHRoZSBBbmd1bGFyIGRlY29yYXRvcnMgb2YgZWFjaFxuICAgKiBwYXJhbWV0ZXIuIFRoaXMgcHJvcGVydHkgaXMgb21pdHRlZCBpZiB0aGUgY2xhc3MgZG9lcyBub3QgaGF2ZSBhIGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgY3RvclBhcmFtZXRlcnM/OiBvLkV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSBBbmd1bGFyIGRlY29yYXRvcnMgYXBwbGllZCB0byB0aGUgY2xhc3MgcHJvcGVydGllcy4gVGhpcyBwcm9wZXJ0eSBpc1xuICAgKiBvbWl0dGVkIGlmIG5vIHByb3BlcnRpZXMgaGF2ZSBhbnkgZGVjb3JhdG9ycy5cbiAgICovXG4gIHByb3BEZWNvcmF0b3JzPzogby5FeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgc2hhcGUgb2YgdGhlIG9iamVjdCB0aGF0IHRoZSBgybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGFBc3luYygpYCBmdW5jdGlvbiBhY2NlcHRzLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIHNlcnZlcyBwcmltYXJpbHkgYXMgZG9jdW1lbnRhdGlvbiwgYXMgY29uZm9ybWFuY2UgdG8gdGhpcyBpbnRlcmZhY2UgaXMgbm90XG4gKiBlbmZvcmNlZCBkdXJpbmcgbGlua2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVDbGFzc01ldGFkYXRhQXN5bmMgZXh0ZW5kcyBSM1BhcnRpYWxEZWNsYXJhdGlvbiB7XG4gIC8qKiBGdW5jdGlvbiB0aGF0IGxvYWRzIHRoZSBkZWZlcnJlZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnQuICovXG4gIHJlc29sdmVEZWZlcnJlZERlcHM6IG8uRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdGhhdCwgd2hlbiBpbnZva2VkIHdpdGggdGhlIHJlc29sdmVkIGRlZmVycmVkXG4gICAqIGRlcGVuZGVuY2llcywgd2lsbCByZXR1cm4gdGhlIGNsYXNzIG1ldGFkYXRhLlxuICAgKi9cbiAgcmVzb2x2ZU1ldGFkYXRhOiBvLkV4cHJlc3Npb247XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IGxpdGVyYWwgdGhhdCBjYW4gYmVcbiAqIHBhc3NlZCBpbiBhcyBhIHBhcnQgb2YgdGhlIGBob3N0RGlyZWN0aXZlc2AgYXJyYXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlSG9zdERpcmVjdGl2ZU1ldGFkYXRhIHtcbiAgZGlyZWN0aXZlOiBvLkV4cHJlc3Npb247XG4gIGlucHV0cz86IHN0cmluZ1tdO1xuICBvdXRwdXRzPzogc3RyaW5nW107XG59XG4iXX0=
@@ -1,52 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as o from '../../output/output_ast';
9
- import { compileComponentMetadataAsyncResolver, } from '../r3_class_metadata_compiler';
10
- import { Identifiers as R3 } from '../r3_identifiers';
11
- import { DefinitionMap } from '../view/util';
12
- /**
13
- * Every time we make a breaking change to the declaration interface or partial-linker behavior, we
14
- * must update this constant to prevent old partial-linkers from incorrectly processing the
15
- * declaration.
16
- *
17
- * Do not include any prerelease in these versions as they are ignored.
18
- */
19
- const MINIMUM_PARTIAL_LINKER_VERSION = '12.0.0';
20
- /**
21
- * Minimum version at which deferred blocks are supported in the linker.
22
- */
23
- const MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION = '18.0.0';
24
- export function compileDeclareClassMetadata(metadata) {
25
- const definitionMap = new DefinitionMap();
26
- definitionMap.set('minVersion', o.literal(MINIMUM_PARTIAL_LINKER_VERSION));
27
- definitionMap.set('version', o.literal('19.0.0-next.0'));
28
- definitionMap.set('ngImport', o.importExpr(R3.core));
29
- definitionMap.set('type', metadata.type);
30
- definitionMap.set('decorators', metadata.decorators);
31
- definitionMap.set('ctorParameters', metadata.ctorParameters);
32
- definitionMap.set('propDecorators', metadata.propDecorators);
33
- return o.importExpr(R3.declareClassMetadata).callFn([definitionMap.toLiteralMap()]);
34
- }
35
- export function compileComponentDeclareClassMetadata(metadata, dependencies) {
36
- if (dependencies === null || dependencies.length === 0) {
37
- return compileDeclareClassMetadata(metadata);
38
- }
39
- const definitionMap = new DefinitionMap();
40
- const callbackReturnDefinitionMap = new DefinitionMap();
41
- callbackReturnDefinitionMap.set('decorators', metadata.decorators);
42
- callbackReturnDefinitionMap.set('ctorParameters', metadata.ctorParameters ?? o.literal(null));
43
- callbackReturnDefinitionMap.set('propDecorators', metadata.propDecorators ?? o.literal(null));
44
- definitionMap.set('minVersion', o.literal(MINIMUM_PARTIAL_LINKER_DEFER_SUPPORT_VERSION));
45
- definitionMap.set('version', o.literal('19.0.0-next.0'));
46
- definitionMap.set('ngImport', o.importExpr(R3.core));
47
- definitionMap.set('type', metadata.type);
48
- definitionMap.set('resolveDeferredDeps', compileComponentMetadataAsyncResolver(dependencies));
49
- definitionMap.set('resolveMetadata', o.arrowFn(dependencies.map((dep) => new o.FnParam(dep.symbolName, o.DYNAMIC_TYPE)), callbackReturnDefinitionMap.toLiteralMap()));
50
- return o.importExpr(R3.declareClassMetadataAsync).callFn([definitionMap.toLiteralMap()]);
51
- }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NfbWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvcmVuZGVyMy9wYXJ0aWFsL2NsYXNzX21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sS0FBSyxDQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0MsT0FBTyxFQUNMLHFDQUFxQyxHQUV0QyxNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUkzQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLDhCQUE4QixHQUFHLFFBQVEsQ0FBQztBQUVoRDs7R0FFRztBQUNILE1BQU0sNENBQTRDLEdBQUcsUUFBUSxDQUFDO0FBRTlELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxRQUF5QjtJQUNuRSxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBMEIsQ0FBQztJQUNsRSxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztJQUMzRSxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM3RCxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0QsYUFBYSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFN0QsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVELE1BQU0sVUFBVSxvQ0FBb0MsQ0FDbEQsUUFBeUIsRUFDekIsWUFBb0Q7SUFFcEQsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkQsT0FBTywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQStCLENBQUM7SUFDdkUsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGFBQWEsRUFBbUIsQ0FBQztJQUN6RSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUYsMkJBQTJCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTlGLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsNENBQTRDLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzdELGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLGFBQWEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUscUNBQXFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM5RixhQUFhLENBQUMsR0FBRyxDQUNmLGlCQUFpQixFQUNqQixDQUFDLENBQUMsT0FBTyxDQUNQLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUN4RSwyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FDM0MsQ0FDRixDQUFDO0lBRUYsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgbyBmcm9tICcuLi8uLi9vdXRwdXQvb3V0cHV0X2FzdCc7XG5pbXBvcnQge1xuICBjb21waWxlQ29tcG9uZW50TWV0YWRhdGFBc3luY1Jlc29sdmVyLFxuICBSM0NsYXNzTWV0YWRhdGEsXG59IGZyb20gJy4uL3IzX2NsYXNzX21ldGFkYXRhX2NvbXBpbGVyJztcbmltcG9ydCB7SWRlbnRpZmllcnMgYXMgUjN9IGZyb20gJy4uL3IzX2lkZW50aWZpZXJzJztcbmltcG9ydCB7UjNEZWZlclBlckNvbXBvbmVudERlcGVuZGVuY3l9IGZyb20gJy4uL3ZpZXcvYXBpJztcbmltcG9ydCB7RGVmaW5pdGlvbk1hcH0gZnJvbSAnLi4vdmlldy91dGlsJztcblxuaW1wb3J0IHtSM0RlY2xhcmVDbGFzc01ldGFkYXRhLCBSM0RlY2xhcmVDbGFzc01ldGFkYXRhQXN5bmN9IGZyb20gJy4vYXBpJztcblxuLyoqXG4gKiBFdmVyeSB0aW1lIHdlIG1ha2UgYSBicmVha2luZyBjaGFuZ2UgdG8gdGhlIGRlY2xhcmF0aW9uIGludGVyZmFjZSBvciBwYXJ0aWFsLWxpbmtlciBiZWhhdmlvciwgd2VcbiAqIG11c3QgdXBkYXRlIHRoaXMgY29uc3RhbnQgdG8gcHJldmVudCBvbGQgcGFydGlhbC1saW5rZXJzIGZyb20gaW5jb3JyZWN0bHkgcHJvY2Vzc2luZyB0aGVcbiAqIGRlY2xhcmF0aW9uLlxuICpcbiAqIERvIG5vdCBpbmNsdWRlIGFueSBwcmVyZWxlYXNlIGluIHRoZXNlIHZlcnNpb25zIGFzIHRoZXkgYXJlIGlnbm9yZWQuXG4gKi9cbmNvbnN0IE1JTklNVU1fUEFSVElBTF9MSU5LRVJfVkVSU0lPTiA9ICcxMi4wLjAnO1xuXG4vKipcbiAqIE1pbmltdW0gdmVyc2lvbiBhdCB3aGljaCBkZWZlcnJlZCBibG9ja3MgYXJlIHN1cHBvcnRlZCBpbiB0aGUgbGlua2VyLlxuICovXG5jb25zdCBNSU5JTVVNX1BBUlRJQUxfTElOS0VSX0RFRkVSX1NVUFBPUlRfVkVSU0lPTiA9ICcxOC4wLjAnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZURlY2xhcmVDbGFzc01ldGFkYXRhKG1ldGFkYXRhOiBSM0NsYXNzTWV0YWRhdGEpOiBvLkV4cHJlc3Npb24ge1xuICBjb25zdCBkZWZpbml0aW9uTWFwID0gbmV3IERlZmluaXRpb25NYXA8UjNEZWNsYXJlQ2xhc3NNZXRhZGF0YT4oKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ21pblZlcnNpb24nLCBvLmxpdGVyYWwoTUlOSU1VTV9QQVJUSUFMX0xJTktFUl9WRVJTSU9OKSk7XG4gIGRlZmluaXRpb25NYXAuc2V0KCd2ZXJzaW9uJywgby5saXRlcmFsKCcwLjAuMC1QTEFDRUhPTERFUicpKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ25nSW1wb3J0Jywgby5pbXBvcnRFeHByKFIzLmNvcmUpKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ3R5cGUnLCBtZXRhZGF0YS50eXBlKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ2RlY29yYXRvcnMnLCBtZXRhZGF0YS5kZWNvcmF0b3JzKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ2N0b3JQYXJhbWV0ZXJzJywgbWV0YWRhdGEuY3RvclBhcmFtZXRlcnMpO1xuICBkZWZpbml0aW9uTWFwLnNldCgncHJvcERlY29yYXRvcnMnLCBtZXRhZGF0YS5wcm9wRGVjb3JhdG9ycyk7XG5cbiAgcmV0dXJuIG8uaW1wb3J0RXhwcihSMy5kZWNsYXJlQ2xhc3NNZXRhZGF0YSkuY2FsbEZuKFtkZWZpbml0aW9uTWFwLnRvTGl0ZXJhbE1hcCgpXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29tcG9uZW50RGVjbGFyZUNsYXNzTWV0YWRhdGEoXG4gIG1ldGFkYXRhOiBSM0NsYXNzTWV0YWRhdGEsXG4gIGRlcGVuZGVuY2llczogUjNEZWZlclBlckNvbXBvbmVudERlcGVuZGVuY3lbXSB8IG51bGwsXG4pOiBvLkV4cHJlc3Npb24ge1xuICBpZiAoZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY29tcGlsZURlY2xhcmVDbGFzc01ldGFkYXRhKG1ldGFkYXRhKTtcbiAgfVxuXG4gIGNvbnN0IGRlZmluaXRpb25NYXAgPSBuZXcgRGVmaW5pdGlvbk1hcDxSM0RlY2xhcmVDbGFzc01ldGFkYXRhQXN5bmM+KCk7XG4gIGNvbnN0IGNhbGxiYWNrUmV0dXJuRGVmaW5pdGlvbk1hcCA9IG5ldyBEZWZpbml0aW9uTWFwPFIzQ2xhc3NNZXRhZGF0YT4oKTtcbiAgY2FsbGJhY2tSZXR1cm5EZWZpbml0aW9uTWFwLnNldCgnZGVjb3JhdG9ycycsIG1ldGFkYXRhLmRlY29yYXRvcnMpO1xuICBjYWxsYmFja1JldHVybkRlZmluaXRpb25NYXAuc2V0KCdjdG9yUGFyYW1ldGVycycsIG1ldGFkYXRhLmN0b3JQYXJhbWV0ZXJzID8/IG8ubGl0ZXJhbChudWxsKSk7XG4gIGNhbGxiYWNrUmV0dXJuRGVmaW5pdGlvbk1hcC5zZXQoJ3Byb3BEZWNvcmF0b3JzJywgbWV0YWRhdGEucHJvcERlY29yYXRvcnMgPz8gby5saXRlcmFsKG51bGwpKTtcblxuICBkZWZpbml0aW9uTWFwLnNldCgnbWluVmVyc2lvbicsIG8ubGl0ZXJhbChNSU5JTVVNX1BBUlRJQUxfTElOS0VSX0RFRkVSX1NVUFBPUlRfVkVSU0lPTikpO1xuICBkZWZpbml0aW9uTWFwLnNldCgndmVyc2lvbicsIG8ubGl0ZXJhbCgnMC4wLjAtUExBQ0VIT0xERVInKSk7XG4gIGRlZmluaXRpb25NYXAuc2V0KCduZ0ltcG9ydCcsIG8uaW1wb3J0RXhwcihSMy5jb3JlKSk7XG4gIGRlZmluaXRpb25NYXAuc2V0KCd0eXBlJywgbWV0YWRhdGEudHlwZSk7XG4gIGRlZmluaXRpb25NYXAuc2V0KCdyZXNvbHZlRGVmZXJyZWREZXBzJywgY29tcGlsZUNvbXBvbmVudE1ldGFkYXRhQXN5bmNSZXNvbHZlcihkZXBlbmRlbmNpZXMpKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoXG4gICAgJ3Jlc29sdmVNZXRhZGF0YScsXG4gICAgby5hcnJvd0ZuKFxuICAgICAgZGVwZW5kZW5jaWVzLm1hcCgoZGVwKSA9PiBuZXcgby5GblBhcmFtKGRlcC5zeW1ib2xOYW1lLCBvLkRZTkFNSUNfVFlQRSkpLFxuICAgICAgY2FsbGJhY2tSZXR1cm5EZWZpbml0aW9uTWFwLnRvTGl0ZXJhbE1hcCgpLFxuICAgICksXG4gICk7XG5cbiAgcmV0dXJuIG8uaW1wb3J0RXhwcihSMy5kZWNsYXJlQ2xhc3NNZXRhZGF0YUFzeW5jKS5jYWxsRm4oW2RlZmluaXRpb25NYXAudG9MaXRlcmFsTWFwKCldKTtcbn1cbiJdfQ==
@@ -1,197 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as core from '../../core';
9
- import { DEFAULT_INTERPOLATION_CONFIG } from '../../ml_parser/defaults';
10
- import * as o from '../../output/output_ast';
11
- import { ParseLocation, ParseSourceFile, ParseSourceSpan } from '../../parse_util';
12
- import { RecursiveVisitor, visitAll } from '../r3_ast';
13
- import { Identifiers as R3 } from '../r3_identifiers';
14
- import { generateForwardRef } from '../util';
15
- import { R3TemplateDependencyKind, } from '../view/api';
16
- import { createComponentType } from '../view/compiler';
17
- import { DefinitionMap } from '../view/util';
18
- import { createDirectiveDefinitionMap } from './directive';
19
- import { toOptionalLiteralArray } from './util';
20
- /**
21
- * Compile a component declaration defined by the `R3ComponentMetadata`.
22
- */
23
- export function compileDeclareComponentFromMetadata(meta, template, additionalTemplateInfo) {
24
- const definitionMap = createComponentDefinitionMap(meta, template, additionalTemplateInfo);
25
- const expression = o.importExpr(R3.declareComponent).callFn([definitionMap.toLiteralMap()]);
26
- const type = createComponentType(meta);
27
- return { expression, type, statements: [] };
28
- }
29
- /**
30
- * Gathers the declaration fields for a component into a `DefinitionMap`.
31
- */
32
- export function createComponentDefinitionMap(meta, template, templateInfo) {
33
- const definitionMap = createDirectiveDefinitionMap(meta);
34
- const blockVisitor = new BlockPresenceVisitor();
35
- visitAll(blockVisitor, template.nodes);
36
- definitionMap.set('template', getTemplateExpression(template, templateInfo));
37
- if (templateInfo.isInline) {
38
- definitionMap.set('isInline', o.literal(true));
39
- }
40
- // Set the minVersion to 17.0.0 if the component is using at least one block in its template.
41
- // We don't do this for templates without blocks, in order to preserve backwards compatibility.
42
- if (blockVisitor.hasBlocks) {
43
- definitionMap.set('minVersion', o.literal('17.0.0'));
44
- }
45
- definitionMap.set('styles', toOptionalLiteralArray(meta.styles, o.literal));
46
- definitionMap.set('dependencies', compileUsedDependenciesMetadata(meta));
47
- definitionMap.set('viewProviders', meta.viewProviders);
48
- definitionMap.set('animations', meta.animations);
49
- if (meta.changeDetection !== null) {
50
- if (typeof meta.changeDetection === 'object') {
51
- throw new Error('Impossible state! Change detection flag is not resolved!');
52
- }
53
- definitionMap.set('changeDetection', o
54
- .importExpr(R3.ChangeDetectionStrategy)
55
- .prop(core.ChangeDetectionStrategy[meta.changeDetection]));
56
- }
57
- if (meta.encapsulation !== core.ViewEncapsulation.Emulated) {
58
- definitionMap.set('encapsulation', o.importExpr(R3.ViewEncapsulation).prop(core.ViewEncapsulation[meta.encapsulation]));
59
- }
60
- if (meta.interpolation !== DEFAULT_INTERPOLATION_CONFIG) {
61
- definitionMap.set('interpolation', o.literalArr([o.literal(meta.interpolation.start), o.literal(meta.interpolation.end)]));
62
- }
63
- if (template.preserveWhitespaces === true) {
64
- definitionMap.set('preserveWhitespaces', o.literal(true));
65
- }
66
- if (meta.defer.mode === 0 /* DeferBlockDepsEmitMode.PerBlock */) {
67
- const resolvers = [];
68
- let hasResolvers = false;
69
- for (const deps of meta.defer.blocks.values()) {
70
- // Note: we need to push a `null` even if there are no dependencies, because matching of
71
- // defer resolver functions to defer blocks happens by index and not adding an array
72
- // entry for a block can throw off the blocks coming after it.
73
- if (deps === null) {
74
- resolvers.push(o.literal(null));
75
- }
76
- else {
77
- resolvers.push(deps);
78
- hasResolvers = true;
79
- }
80
- }
81
- // If *all* the resolvers are null, we can skip the field.
82
- if (hasResolvers) {
83
- definitionMap.set('deferBlockDependencies', o.literalArr(resolvers));
84
- }
85
- }
86
- else {
87
- throw new Error('Unsupported defer function emit mode in partial compilation');
88
- }
89
- return definitionMap;
90
- }
91
- function getTemplateExpression(template, templateInfo) {
92
- // If the template has been defined using a direct literal, we use that expression directly
93
- // without any modifications. This is ensures proper source mapping from the partially
94
- // compiled code to the source file declaring the template. Note that this does not capture
95
- // template literals referenced indirectly through an identifier.
96
- if (templateInfo.inlineTemplateLiteralExpression !== null) {
97
- return templateInfo.inlineTemplateLiteralExpression;
98
- }
99
- // If the template is defined inline but not through a literal, the template has been resolved
100
- // through static interpretation. We create a literal but cannot provide any source span. Note
101
- // that we cannot use the expression defining the template because the linker expects the template
102
- // to be defined as a literal in the declaration.
103
- if (templateInfo.isInline) {
104
- return o.literal(templateInfo.content, null, null);
105
- }
106
- // The template is external so we must synthesize an expression node with
107
- // the appropriate source-span.
108
- const contents = templateInfo.content;
109
- const file = new ParseSourceFile(contents, templateInfo.sourceUrl);
110
- const start = new ParseLocation(file, 0, 0, 0);
111
- const end = computeEndLocation(file, contents);
112
- const span = new ParseSourceSpan(start, end);
113
- return o.literal(contents, null, span);
114
- }
115
- function computeEndLocation(file, contents) {
116
- const length = contents.length;
117
- let lineStart = 0;
118
- let lastLineStart = 0;
119
- let line = 0;
120
- do {
121
- lineStart = contents.indexOf('\n', lastLineStart);
122
- if (lineStart !== -1) {
123
- lastLineStart = lineStart + 1;
124
- line++;
125
- }
126
- } while (lineStart !== -1);
127
- return new ParseLocation(file, length, line, length - lastLineStart);
128
- }
129
- function compileUsedDependenciesMetadata(meta) {
130
- const wrapType = meta.declarationListEmitMode !== 0 /* DeclarationListEmitMode.Direct */
131
- ? generateForwardRef
132
- : (expr) => expr;
133
- if (meta.declarationListEmitMode === 3 /* DeclarationListEmitMode.RuntimeResolved */) {
134
- throw new Error(`Unsupported emit mode`);
135
- }
136
- return toOptionalLiteralArray(meta.declarations, (decl) => {
137
- switch (decl.kind) {
138
- case R3TemplateDependencyKind.Directive:
139
- const dirMeta = new DefinitionMap();
140
- dirMeta.set('kind', o.literal(decl.isComponent ? 'component' : 'directive'));
141
- dirMeta.set('type', wrapType(decl.type));
142
- dirMeta.set('selector', o.literal(decl.selector));
143
- dirMeta.set('inputs', toOptionalLiteralArray(decl.inputs, o.literal));
144
- dirMeta.set('outputs', toOptionalLiteralArray(decl.outputs, o.literal));
145
- dirMeta.set('exportAs', toOptionalLiteralArray(decl.exportAs, o.literal));
146
- return dirMeta.toLiteralMap();
147
- case R3TemplateDependencyKind.Pipe:
148
- const pipeMeta = new DefinitionMap();
149
- pipeMeta.set('kind', o.literal('pipe'));
150
- pipeMeta.set('type', wrapType(decl.type));
151
- pipeMeta.set('name', o.literal(decl.name));
152
- return pipeMeta.toLiteralMap();
153
- case R3TemplateDependencyKind.NgModule:
154
- const ngModuleMeta = new DefinitionMap();
155
- ngModuleMeta.set('kind', o.literal('ngmodule'));
156
- ngModuleMeta.set('type', wrapType(decl.type));
157
- return ngModuleMeta.toLiteralMap();
158
- }
159
- });
160
- }
161
- class BlockPresenceVisitor extends RecursiveVisitor {
162
- constructor() {
163
- super(...arguments);
164
- this.hasBlocks = false;
165
- }
166
- visitDeferredBlock() {
167
- this.hasBlocks = true;
168
- }
169
- visitDeferredBlockPlaceholder() {
170
- this.hasBlocks = true;
171
- }
172
- visitDeferredBlockLoading() {
173
- this.hasBlocks = true;
174
- }
175
- visitDeferredBlockError() {
176
- this.hasBlocks = true;
177
- }
178
- visitIfBlock() {
179
- this.hasBlocks = true;
180
- }
181
- visitIfBlockBranch() {
182
- this.hasBlocks = true;
183
- }
184
- visitForLoopBlock() {
185
- this.hasBlocks = true;
186
- }
187
- visitForLoopBlockEmpty() {
188
- this.hasBlocks = true;
189
- }
190
- visitSwitchBlock() {
191
- this.hasBlocks = true;
192
- }
193
- visitSwitchBlockCase() {
194
- this.hasBlocks = true;
195
- }
196
- }
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3JlbmRlcjMvcGFydGlhbC9jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxLQUFLLENBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ3JELE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGtCQUFrQixFQUF1QixNQUFNLFNBQVMsQ0FBQztBQUNqRSxPQUFPLEVBSUwsd0JBQXdCLEdBRXpCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFRM0MsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQStCOUM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBQ2pELElBQXVELEVBQ3ZELFFBQXdCLEVBQ3hCLHNCQUFvRDtJQUVwRCxNQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFFM0YsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVB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IEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQge0RFRkFVTFRfSU5URVJQT0xBVElPTl9DT05GSUd9IGZyb20gJy4uLy4uL21sX3BhcnNlci9kZWZhdWx0cyc7XG5pbXBvcnQgKiBhcyBvIGZyb20gJy4uLy4uL291dHB1dC9vdXRwdXRfYXN0JztcbmltcG9ydCB7UGFyc2VMb2NhdGlvbiwgUGFyc2VTb3VyY2VGaWxlLCBQYXJzZVNvdXJjZVNwYW59IGZyb20gJy4uLy4uL3BhcnNlX3V0aWwnO1xuaW1wb3J0IHtSZWN1cnNpdmVWaXNpdG9yLCB2aXNpdEFsbH0gZnJvbSAnLi4vcjNfYXN0JztcbmltcG9ydCB7SWRlbnRpZmllcnMgYXMgUjN9IGZyb20gJy4uL3IzX2lkZW50aWZpZXJzJztcbmltcG9ydCB7Z2VuZXJhdGVGb3J3YXJkUmVmLCBSM0NvbXBpbGVkRXhwcmVzc2lvbn0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge1xuICBEZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSxcbiAgRGVmZXJCbG9ja0RlcHNFbWl0TW9kZSxcbiAgUjNDb21wb25lbnRNZXRhZGF0YSxcbiAgUjNUZW1wbGF0ZURlcGVuZGVuY3lLaW5kLFxuICBSM1RlbXBsYXRlRGVwZW5kZW5jeU1ldGFkYXRhLFxufSBmcm9tICcuLi92aWV3L2FwaSc7XG5pbXBvcnQge2NyZWF0ZUNvbXBvbmVudFR5cGV9IGZyb20gJy4uL3ZpZXcvY29tcGlsZXInO1xuaW1wb3J0IHtQYXJzZWRUZW1wbGF0ZX0gZnJvbSAnLi4vdmlldy90ZW1wbGF0ZSc7XG5pbXBvcnQge0RlZmluaXRpb25NYXB9IGZyb20gJy4uL3ZpZXcvdXRpbCc7XG5cbmltcG9ydCB7XG4gIFIzRGVjbGFyZUNvbXBvbmVudE1ldGFkYXRhLFxuICBSM0RlY2xhcmVEaXJlY3RpdmVEZXBlbmRlbmN5TWV0YWRhdGEsXG4gIFIzRGVjbGFyZU5nTW9kdWxlRGVwZW5kZW5jeU1ldGFkYXRhLFxuICBSM0RlY2xhcmVQaXBlRGVwZW5kZW5jeU1ldGFkYXRhLFxufSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge2NyZWF0ZURpcmVjdGl2ZURlZmluaXRpb25NYXB9IGZyb20gJy4vZGlyZWN0aXZlJztcbmltcG9ydCB7dG9PcHRpb25hbExpdGVyYWxBcnJheX0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBEZWNsYXJlQ29tcG9uZW50VGVtcGxhdGVJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgY29udGVudHMgb2YgdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBcImxvZ2ljYWxcIiB0ZW1wbGF0ZSBzdHJpbmcsIGFmdGVyIGV4cGFuc2lvbiBvZiBhbnkgZXNjYXBlZCBjaGFyYWN0ZXJzIChmb3IgaW5saW5lXG4gICAqIHRlbXBsYXRlcykuIFRoaXMgbWF5IGRpZmZlciBmcm9tIHRoZSBhY3R1YWwgdGVtcGxhdGUgYnl0ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIC50cyBmaWxlLlxuICAgKi9cbiAgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB3aGljaCBjb250YWlucyB0aGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIGVpdGhlciB0aGUgb3JpZ2luYWwgLnRzIGZpbGUgaWYgdGhlIHRlbXBsYXRlIGlzIGlubGluZSwgb3IgdGhlIC5odG1sIGZpbGUgaWYgYW5cbiAgICogZXh0ZXJuYWwgZmlsZSB3YXMgdXNlZC5cbiAgICovXG4gIHNvdXJjZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0ZW1wbGF0ZSB3YXMgaW5saW5lICh1c2luZyBgdGVtcGxhdGVgKSBvciBleHRlcm5hbCAodXNpbmcgYHRlbXBsYXRlVXJsYCkuXG4gICAqL1xuICBpc0lubGluZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhlIHRlbXBsYXRlIHdhcyBkZWZpbmVkIGlubGluZSBieSBhIGRpcmVjdCBzdHJpbmcgbGl0ZXJhbCwgdGhlbiB0aGlzIGlzIHRoYXQgbGl0ZXJhbFxuICAgKiBleHByZXNzaW9uLiBPdGhlcndpc2UgYG51bGxgLCBpZiB0aGUgdGVtcGxhdGUgd2FzIG5vdCBkZWZpbmVkIGlubGluZSBvciB3YXMgbm90IGEgbGl0ZXJhbC5cbiAgICovXG4gIGlubGluZVRlbXBsYXRlTGl0ZXJhbEV4cHJlc3Npb246IG8uRXhwcmVzc2lvbiB8IG51bGw7XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGNvbXBvbmVudCBkZWNsYXJhdGlvbiBkZWZpbmVkIGJ5IHRoZSBgUjNDb21wb25lbnRNZXRhZGF0YWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRGVjbGFyZUNvbXBvbmVudEZyb21NZXRhZGF0YShcbiAgbWV0YTogUjNDb21wb25lbnRNZXRhZGF0YTxSM1RlbXBsYXRlRGVwZW5kZW5jeU1ldGFkYXRhPixcbiAgdGVtcGxhdGU6IFBhcnNlZFRlbXBsYXRlLFxuICBhZGRpdGlvbmFsVGVtcGxhdGVJbmZvOiBEZWNsYXJlQ29tcG9uZW50VGVtcGxhdGVJbmZvLFxuKTogUjNDb21waWxlZEV4cHJlc3Npb24ge1xuICBjb25zdCBkZWZpbml0aW9uTWFwID0gY3JlYXRlQ29tcG9uZW50RGVmaW5pdGlvbk1hcChtZXRhLCB0ZW1wbGF0ZSwgYWRkaXRpb25hbFRlbXBsYXRlSW5mbyk7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IG8uaW1wb3J0RXhwcihSMy5kZWNsYXJlQ29tcG9uZW50KS5jYWxsRm4oW2RlZmluaXRpb25NYXAudG9MaXRlcmFsTWFwKCldKTtcbiAgY29uc3QgdHlwZSA9IGNyZWF0ZUNvbXBvbmVudFR5cGUobWV0YSk7XG5cbiAgcmV0dXJuIHtleHByZXNzaW9uLCB0eXBlLCBzdGF0ZW1lbnRzOiBbXX07XG59XG5cbi8qKlxuICogR2F0aGVycyB0aGUgZGVjbGFyYXRpb24gZmllbGRzIGZvciBhIGNvbXBvbmVudCBpbnRvIGEgYERlZmluaXRpb25NYXBgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50RGVmaW5pdGlvbk1hcChcbiAgbWV0YTogUjNDb21wb25lbnRNZXRhZGF0YTxSM1RlbXBsYXRlRGVwZW5kZW5jeU1ldGFkYXRhPixcbiAgdGVtcGxhdGU6IFBhcnNlZFRlbXBsYXRlLFxuICB0ZW1wbGF0ZUluZm86IERlY2xhcmVDb21wb25lbnRUZW1wbGF0ZUluZm8sXG4pOiBEZWZpbml0aW9uTWFwPFIzRGVjbGFyZUNvbXBvbmVudE1ldGFkYXRhPiB7XG4gIGNvbnN0IGRlZmluaXRpb25NYXA6IERlZmluaXRpb25NYXA8UjNEZWNsYXJlQ29tcG9uZW50TWV0YWRhdGE+ID1cbiAgICBjcmVhdGVEaXJlY3RpdmVEZWZpbml0aW9uTWFwKG1ldGEpO1xuICBjb25zdCBibG9ja1Zpc2l0b3IgPSBuZXcgQmxvY2tQcmVzZW5jZVZpc2l0b3IoKTtcbiAgdmlzaXRBbGwoYmxvY2tWaXNpdG9yLCB0ZW1wbGF0ZS5ub2Rlcyk7XG5cbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ3RlbXBsYXRlJywgZ2V0VGVtcGxhdGVFeHByZXNzaW9uKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8pKTtcblxuICBpZiAodGVtcGxhdGVJbmZvLmlzSW5saW5lKSB7XG4gICAgZGVmaW5pdGlvbk1hcC5zZXQoJ2lzSW5saW5lJywgby5saXRlcmFsKHRydWUpKTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgbWluVmVyc2lvbiB0byAxNy4wLjAgaWYgdGhlIGNvbXBvbmVudCBpcyB1c2luZyBhdCBsZWFzdCBvbmUgYmxvY2sgaW4gaXRzIHRlbXBsYXRlLlxuICAvLyBXZSBkb24ndCBkbyB0aGlzIGZvciB0ZW1wbGF0ZXMgd2l0aG91dCBibG9ja3MsIGluIG9yZGVyIHRvIHByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICBpZiAoYmxvY2tWaXNpdG9yLmhhc0Jsb2Nrcykge1xuICAgIGRlZmluaXRpb25NYXAuc2V0KCdtaW5WZXJzaW9uJywgby5saXRlcmFsKCcxNy4wLjAnKSk7XG4gIH1cblxuICBkZWZpbml0aW9uTWFwLnNldCgnc3R5bGVzJywgdG9PcHRpb25hbExpdGVyYWxBcnJheShtZXRhLnN0eWxlcywgby5saXRlcmFsKSk7XG4gIGRlZmluaXRpb25NYXAuc2V0KCdkZXBlbmRlbmNpZXMnLCBjb21waWxlVXNlZERlcGVuZGVuY2llc01ldGFkYXRhKG1ldGEpKTtcbiAgZGVmaW5pdGlvbk1hcC5zZXQoJ3ZpZXdQcm92aWRlcnMnLCBtZXRhLnZpZXdQcm92aWRlcnMpO1xuICBkZWZpbml0aW9uTWFwLnNldCgnYW5pbWF0aW9ucycsIG1ldGEuYW5pbWF0aW9ucyk7XG5cbiAgaWYgKG1ldGEuY2hhbmdlRGV0ZWN0aW9uICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBtZXRhLmNoYW5nZURldGVjdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3NzaWJsZSBzdGF0ZSEgQ2hhbmdlIGRldGVjdGlvbiBmbGFnIGlzIG5vdCByZXNvbHZlZCEnKTtcbiAgICB9XG5cbiAgICBkZWZpbml0aW9uTWFwLnNldChcbiAgICAgICdjaGFuZ2VEZXRlY3Rpb24nLFxuICAgICAgb1xuICAgICAgICAuaW1wb3J0RXhwcihSMy5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSlcbiAgICAgICAgLnByb3AoY29yZS5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVttZXRhLmNoYW5nZURldGVjdGlvbl0pLFxuICAgICk7XG4gIH1cbiAgaWYgKG1ldGEuZW5jYXBzdWxhdGlvbiAhPT0gY29yZS5WaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCkge1xuICAgIGRlZmluaXRpb25NYXAuc2V0KFxuICAgICAgJ2VuY2Fwc3VsYXRpb24nLFxuICAgICAgby5pbXBvcnRFeHByKFIzLlZpZXdFbmNhcHN1bGF0aW9uKS5wcm9wKGNvcmUuVmlld0VuY2Fwc3VsYXRpb25bbWV0YS5lbmNhcHN1bGF0aW9uXSksXG4gICAgKTtcbiAgfVxuICBpZiAobWV0YS5pbnRlcnBvbGF0aW9uICE9PSBERUZBVUxUX0lOVEVSUE9MQVRJT05fQ09ORklHKSB7XG4gICAgZGVmaW5pdGlvbk1hcC5zZXQoXG4gICAgICAnaW50ZXJwb2xhdGlvbicsXG4gICAgICBvLmxpdGVyYWxBcnIoW28ubGl0ZXJhbChtZXRhLmludGVycG9sYXRpb24uc3RhcnQpLCBvLmxpdGVyYWwobWV0YS5pbnRlcnBvbGF0aW9uLmVuZCldKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHRlbXBsYXRlLnByZXNlcnZlV2hpdGVzcGFjZXMgPT09IHRydWUpIHtcbiAgICBkZWZpbml0aW9uTWFwLnNldCgncHJlc2VydmVXaGl0ZXNwYWNlcycsIG8ubGl0ZXJhbCh0cnVlKSk7XG4gIH1cblxuICBpZiAobWV0YS5kZWZlci5tb2RlID09PSBEZWZlckJsb2NrRGVwc0VtaXRNb2RlLlBlckJsb2NrKSB7XG4gICAgY29uc3QgcmVzb2x2ZXJzOiBvLkV4cHJlc3Npb25bXSA9IFtdO1xuICAgIGxldCBoYXNSZXNvbHZlcnMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZGVwcyBvZiBtZXRhLmRlZmVyLmJsb2Nrcy52YWx1ZXMoKSkge1xuICAgICAgLy8gTm90ZTogd2UgbmVlZCB0byBwdXNoIGEgYG51bGxgIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGRlcGVuZGVuY2llcywgYmVjYXVzZSBtYXRjaGluZyBvZlxuICAgICAgLy8gZGVmZXIgcmVzb2x2ZXIgZnVuY3Rpb25zIHRvIGRlZmVyIGJsb2NrcyBoYXBwZW5zIGJ5IGluZGV4IGFuZCBub3QgYWRkaW5nIGFuIGFycmF5XG4gICAgICAvLyBlbnRyeSBmb3IgYSBibG9jayBjYW4gdGhyb3cgb2ZmIHRoZSBibG9ja3MgY29taW5nIGFmdGVyIGl0LlxuICAgICAgaWYgKGRlcHMgPT09IG51bGwpIHtcbiAgICAgICAgcmVzb2x2ZXJzLnB1c2goby5saXRlcmFsKG51bGwpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmVycy5wdXNoKGRlcHMpO1xuICAgICAgICBoYXNSZXNvbHZlcnMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiAqYWxsKiB0aGUgcmVzb2x2ZXJzIGFyZSBudWxsLCB3ZSBjYW4gc2tpcCB0aGUgZmllbGQuXG4gICAgaWYgKGhhc1Jlc29sdmVycykge1xuICAgICAgZGVmaW5pdGlvbk1hcC5zZXQoJ2RlZmVyQmxvY2tEZXBlbmRlbmNpZXMnLCBvLmxpdGVyYWxBcnIocmVzb2x2ZXJzKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGVmZXIgZnVuY3Rpb24gZW1pdCBtb2RlIGluIHBhcnRpYWwgY29tcGlsYXRpb24nKTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbml0aW9uTWFwO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZUV4cHJlc3Npb24oXG4gIHRlbXBsYXRlOiBQYXJzZWRUZW1wbGF0ZSxcbiAgdGVtcGxhdGVJbmZvOiBEZWNsYXJlQ29tcG9uZW50VGVtcGxhdGVJbmZvLFxuKTogby5FeHByZXNzaW9uIHtcbiAgLy8gSWYgdGhlIHRlbXBsYXRlIGhhcyBiZWVuIGRlZmluZWQgdXNpbmcgYSBkaXJlY3QgbGl0ZXJhbCwgd2UgdXNlIHRoYXQgZXhwcmVzc2lvbiBkaXJlY3RseVxuICAvLyB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIGVuc3VyZXMgcHJvcGVyIHNvdXJjZSBtYXBwaW5nIGZyb20gdGhlIHBhcnRpYWxseVxuICAvLyBjb21waWxlZCBjb2RlIHRvIHRoZSBzb3VyY2UgZmlsZSBkZWNsYXJpbmcgdGhlIHRlbXBsYXRlLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjYXB0dXJlXG4gIC8vIHRlbXBsYXRlIGxpdGVyYWxzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSB0aHJvdWdoIGFuIGlkZW50aWZpZXIuXG4gIGlmICh0ZW1wbGF0ZUluZm8uaW5saW5lVGVtcGxhdGVMaXRlcmFsRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0ZW1wbGF0ZUluZm8uaW5saW5lVGVtcGxhdGVMaXRlcmFsRXhwcmVzc2lvbjtcbiAgfVxuXG4gIC8vIElmIHRoZSB0ZW1wbGF0ZSBpcyBkZWZpbmVkIGlubGluZSBidXQgbm90IHRocm91Z2ggYSBsaXRlcmFsLCB0aGUgdGVtcGxhdGUgaGFzIGJlZW4gcmVzb2x2ZWRcbiAgLy8gdGhyb3VnaCBzdGF0aWMgaW50ZXJwcmV0YXRpb24uIFdlIGNyZWF0ZSBhIGxpdGVyYWwgYnV0IGNhbm5vdCBwcm92aWRlIGFueSBzb3VyY2Ugc3Bhbi4gTm90ZVxuICAvLyB0aGF0IHdlIGNhbm5vdCB1c2UgdGhlIGV4cHJlc3Npb24gZGVmaW5pbmcgdGhlIHRlbXBsYXRlIGJlY2F1c2UgdGhlIGxpbmtlciBleHBlY3RzIHRoZSB0ZW1wbGF0ZVxuICAvLyB0byBiZSBkZWZpbmVkIGFzIGEgbGl0ZXJhbCBpbiB0aGUgZGVjbGFyYXRpb24uXG4gIGlmICh0ZW1wbGF0ZUluZm8uaXNJbmxpbmUpIHtcbiAgICByZXR1cm4gby5saXRlcmFsKHRlbXBsYXRlSW5mby5jb250ZW50LCBudWxsLCBudWxsKTtcbiAgfVxuXG4gIC8vIFRoZSB0ZW1wbGF0ZSBpcyBleHRlcm5hbCBzbyB3ZSBtdXN0IHN5bnRoZXNpemUgYW4gZXhwcmVzc2lvbiBub2RlIHdpdGhcbiAgLy8gdGhlIGFwcHJvcHJpYXRlIHNvdXJjZS1zcGFuLlxuICBjb25zdCBjb250ZW50cyA9IHRlbXBsYXRlSW5mby5jb250ZW50O1xuICBjb25zdCBmaWxlID0gbmV3IFBhcnNlU291cmNlRmlsZShjb250ZW50cywgdGVtcGxhdGVJbmZvLnNvdXJjZVVybCk7XG4gIGNvbnN0IHN0YXJ0ID0gbmV3IFBhcnNlTG9jYXRpb24oZmlsZSwgMCwgMCwgMCk7XG4gIGNvbnN0IGVuZCA9IGNvbXB1dGVFbmRMb2NhdGlvbihmaWxlLCBjb250ZW50cyk7XG4gIGNvbnN0IHNwYW4gPSBuZXcgUGFyc2VTb3VyY2VTcGFuKHN0YXJ0LCBlbmQpO1xuICByZXR1cm4gby5saXRlcmFsKGNvbnRlbnRzLCBudWxsLCBzcGFuKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUVuZExvY2F0aW9uKGZpbGU6IFBhcnNlU291cmNlRmlsZSwgY29udGVudHM6IHN0cmluZyk6IFBhcnNlTG9jYXRpb24ge1xuICBjb25zdCBsZW5ndGggPSBjb250ZW50cy5sZW5ndGg7XG4gIGxldCBsaW5lU3RhcnQgPSAwO1xuICBsZXQgbGFzdExpbmVTdGFydCA9IDA7XG4gIGxldCBsaW5lID0gMDtcbiAgZG8ge1xuICAgIGxpbmVTdGFydCA9IGNvbnRlbnRzLmluZGV4T2YoJ1xcbicsIGxhc3RMaW5lU3RhcnQpO1xuICAgIGlmIChsaW5lU3RhcnQgIT09IC0xKSB7XG4gICAgICBsYXN0TGluZVN0YXJ0ID0gbGluZVN0YXJ0ICsgMTtcbiAgICAgIGxpbmUrKztcbiAgICB9XG4gIH0gd2hpbGUgKGxpbmVTdGFydCAhPT0gLTEpO1xuXG4gIHJldHVybiBuZXcgUGFyc2VMb2NhdGlvbihmaWxlLCBsZW5ndGgsIGxpbmUsIGxlbmd0aCAtIGxhc3RMaW5lU3RhcnQpO1xufVxuXG5mdW5jdGlvbiBjb21waWxlVXNlZERlcGVuZGVuY2llc01ldGFkYXRhKFxuICBtZXRhOiBSM0NvbXBvbmVudE1ldGFkYXRhPFIzVGVtcGxhdGVEZXBlbmRlbmN5TWV0YWRhdGE+LFxuKTogby5MaXRlcmFsQXJyYXlFeHByIHwgbnVsbCB7XG4gIGNvbnN0IHdyYXBUeXBlID1cbiAgICBtZXRhLmRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlICE9PSBEZWNsYXJhdGlvbkxpc3RFbWl0TW9kZS5EaXJlY3RcbiAgICAgID8gZ2VuZXJhdGVGb3J3YXJkUmVmXG4gICAgICA6IChleHByOiBvLkV4cHJlc3Npb24pID0+IGV4cHI7XG5cbiAgaWYgKG1ldGEuZGVjbGFyYXRpb25MaXN0RW1pdE1vZGUgPT09IERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLlJ1bnRpbWVSZXNvbHZlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZW1pdCBtb2RlYCk7XG4gIH1cblxuICByZXR1cm4gdG9PcHRpb25hbExpdGVyYWxBcnJheShtZXRhLmRlY2xhcmF0aW9ucywgKGRlY2wpID0+IHtcbiAgICBzd2l0Y2ggKGRlY2wua2luZCkge1xuICAgICAgY2FzZSBSM1RlbXBsYXRlRGVwZW5kZW5jeUtpbmQuRGlyZWN0aXZlOlxuICAgICAgICBjb25zdCBkaXJNZXRhID0gbmV3IERlZmluaXRpb25NYXA8UjNEZWNsYXJlRGlyZWN0aXZlRGVwZW5kZW5jeU1ldGFkYXRhPigpO1xuICAgICAgICBkaXJNZXRhLnNldCgna2luZCcsIG8ubGl0ZXJhbChkZWNsLmlzQ29tcG9uZW50ID8gJ2NvbXBvbmVudCcgOiAnZGlyZWN0aXZlJykpO1xuICAgICAgICBkaXJNZXRhLnNldCgndHlwZScsIHdyYXBUeXBlKGRlY2wudHlwZSkpO1xuICAgICAgICBkaXJNZXRhLnNldCgnc2VsZWN0b3InLCBvLmxpdGVyYWwoZGVjbC5zZWxlY3RvcikpO1xuICAgICAgICBkaXJNZXRhLnNldCgnaW5wdXRzJywgdG9PcHRpb25hbExpdGVyYWxBcnJheShkZWNsLmlucHV0cywgby5saXRlcmFsKSk7XG4gICAgICAgIGRpck1ldGEuc2V0KCdvdXRwdXRzJywgdG9PcHRpb25hbExpdGVyYWxBcnJheShkZWNsLm91dHB1dHMsIG8ubGl0ZXJhbCkpO1xuICAgICAgICBkaXJNZXRhLnNldCgnZXhwb3J0QXMnLCB0b09wdGlvbmFsTGl0ZXJhbEFycmF5KGRlY2wuZXhwb3J0QXMsIG8ubGl0ZXJhbCkpO1xuICAgICAgICByZXR1cm4gZGlyTWV0YS50b0xpdGVyYWxNYXAoKTtcbiAgICAgIGNhc2UgUjNUZW1wbGF0ZURlcGVuZGVuY3lLaW5kLlBpcGU6XG4gICAgICAgIGNvbnN0IHBpcGVNZXRhID0gbmV3IERlZmluaXRpb25NYXA8UjNEZWNsYXJlUGlwZURlcGVuZGVuY3lNZXRhZGF0YT4oKTtcbiAgICAgICAgcGlwZU1ldGEuc2V0KCdraW5kJywgby5saXRlcmFsKCdwaXBlJykpO1xuICAgICAgICBwaXBlTWV0YS5zZXQoJ3R5cGUnLCB3cmFwVHlwZShkZWNsLnR5cGUpKTtcbiAgICAgICAgcGlwZU1ldGEuc2V0KCduYW1lJywgby5saXRlcmFsKGRlY2wubmFtZSkpO1xuICAgICAgICByZXR1cm4gcGlwZU1ldGEudG9MaXRlcmFsTWFwKCk7XG4gICAgICBjYXNlIFIzVGVtcGxhdGVEZXBlbmRlbmN5S2luZC5OZ01vZHVsZTpcbiAgICAgICAgY29uc3QgbmdNb2R1bGVNZXRhID0gbmV3IERlZmluaXRpb25NYXA8UjNEZWNsYXJlTmdNb2R1bGVEZXBlbmRlbmN5TWV0YWRhdGE+KCk7XG4gICAgICAgIG5nTW9kdWxlTWV0YS5zZXQoJ2tpbmQnLCBvLmxpdGVyYWwoJ25nbW9kdWxlJykpO1xuICAgICAgICBuZ01vZHVsZU1ldGEuc2V0KCd0eXBlJywgd3JhcFR5cGUoZGVjbC50eXBlKSk7XG4gICAgICAgIHJldHVybiBuZ01vZHVsZU1ldGEudG9MaXRlcmFsTWFwKCk7XG4gICAgfVxuICB9KTtcbn1cblxuY2xhc3MgQmxvY2tQcmVzZW5jZVZpc2l0b3IgZXh0ZW5kcyBSZWN1cnNpdmVWaXNpdG9yIHtcbiAgaGFzQmxvY2tzID0gZmFsc2U7XG5cbiAgb3ZlcnJpZGUgdmlzaXREZWZlcnJlZEJsb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQmxvY2tzID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0RGVmZXJyZWRCbG9ja1BsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQmxvY2tzID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0RGVmZXJyZWRCbG9ja0xvYWRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNCbG9ja3MgPSB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXREZWZlcnJlZEJsb2NrRXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNCbG9ja3MgPSB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRJZkJsb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQmxvY2tzID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0SWZCbG9ja0JyYW5jaCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0Jsb2NrcyA9IHRydWU7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdEZvckxvb3BCbG9jaygpOiB2b2lkIHtcbiAgICB0aGlzLmhhc0Jsb2NrcyA9IHRydWU7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdEZvckxvb3BCbG9ja0VtcHR5KCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQmxvY2tzID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0U3dpdGNoQmxvY2soKTogdm9pZCB7XG4gICAgdGhpcy5oYXNCbG9ja3MgPSB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRTd2l0Y2hCbG9ja0Nhc2UoKTogdm9pZCB7XG4gICAgdGhpcy5oYXNCbG9ja3MgPSB0cnVlO1xuICB9XG59XG4iXX0=