1 | import ts from 'typescript';
|
2 | export function isPrimaryExpression(node) {
|
3 | switch (node.kind) {
|
4 | case ts.SyntaxKind.Identifier:
|
5 | case ts.SyntaxKind.StringLiteral:
|
6 | case ts.SyntaxKind.NullKeyword:
|
7 | case ts.SyntaxKind.TrueKeyword:
|
8 | case ts.SyntaxKind.FalseKeyword:
|
9 | case ts.SyntaxKind.ThisKeyword:
|
10 | case ts.SyntaxKind.SuperKeyword:
|
11 | case ts.SyntaxKind.ImportKeyword:
|
12 | case ts.SyntaxKind.FunctionExpression:
|
13 | case ts.SyntaxKind.RegularExpressionLiteral:
|
14 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
15 | case ts.SyntaxKind.NumericLiteral:
|
16 | case ts.SyntaxKind.TemplateExpression:
|
17 | case ts.SyntaxKind.ParenthesizedExpression:
|
18 | case ts.SyntaxKind.ArrayLiteralExpression:
|
19 | case ts.SyntaxKind.ObjectLiteralExpression:
|
20 | case ts.SyntaxKind.NewExpression:
|
21 | case ts.SyntaxKind.MetaProperty:
|
22 | case ts.SyntaxKind.JsxElement:
|
23 | case ts.SyntaxKind.JsxSelfClosingElement:
|
24 | case ts.SyntaxKind.JsxFragment:
|
25 | case ts.SyntaxKind.ClassExpression:
|
26 | return true;
|
27 | default:
|
28 | return false;
|
29 | }
|
30 | }
|
31 | export function isDeclaration(node) {
|
32 | switch (node.kind) {
|
33 | case ts.SyntaxKind.Identifier:
|
34 | case ts.SyntaxKind.TypeParameter:
|
35 | case ts.SyntaxKind.CallSignature:
|
36 | case ts.SyntaxKind.ConstructSignature:
|
37 | case ts.SyntaxKind.VariableDeclaration:
|
38 | case ts.SyntaxKind.Parameter:
|
39 | case ts.SyntaxKind.BindingElement:
|
40 | case ts.SyntaxKind.PropertySignature:
|
41 | case ts.SyntaxKind.PropertyDeclaration:
|
42 | case ts.SyntaxKind.PropertyAssignment:
|
43 | case ts.SyntaxKind.ShorthandPropertyAssignment:
|
44 | case ts.SyntaxKind.SpreadAssignment:
|
45 | case ts.SyntaxKind.FunctionDeclaration:
|
46 | case ts.SyntaxKind.MethodSignature:
|
47 | case ts.SyntaxKind.MethodDeclaration:
|
48 | case ts.SyntaxKind.Constructor:
|
49 | case ts.SyntaxKind.SemicolonClassElement:
|
50 | case ts.SyntaxKind.GetAccessor:
|
51 | case ts.SyntaxKind.SetAccessor:
|
52 | case ts.SyntaxKind.IndexSignature:
|
53 | case ts.SyntaxKind.FunctionType:
|
54 | case ts.SyntaxKind.ConstructorType:
|
55 | case ts.SyntaxKind.TypeLiteral:
|
56 | case ts.SyntaxKind.MappedType:
|
57 | case ts.SyntaxKind.BinaryExpression:
|
58 | case ts.SyntaxKind.FunctionExpression:
|
59 | case ts.SyntaxKind.ArrowFunction:
|
60 | case ts.SyntaxKind.ObjectLiteralExpression:
|
61 | case ts.SyntaxKind.PropertyAccessExpression:
|
62 | case ts.SyntaxKind.CallExpression:
|
63 | case ts.SyntaxKind.NewExpression:
|
64 | case ts.SyntaxKind.JsxAttribute:
|
65 | case ts.SyntaxKind.JsxSpreadAttribute:
|
66 | case ts.SyntaxKind.MissingDeclaration:
|
67 | case ts.SyntaxKind.ClassDeclaration:
|
68 | case ts.SyntaxKind.ClassExpression:
|
69 | case ts.SyntaxKind.InterfaceDeclaration:
|
70 | case ts.SyntaxKind.TypeAliasDeclaration:
|
71 | case ts.SyntaxKind.EnumMember:
|
72 | case ts.SyntaxKind.EnumDeclaration:
|
73 | case ts.SyntaxKind.ModuleDeclaration:
|
74 | case ts.SyntaxKind.ImportEqualsDeclaration:
|
75 | case ts.SyntaxKind.ImportClause:
|
76 | case ts.SyntaxKind.NamespaceImport:
|
77 | case ts.SyntaxKind.NamespaceExportDeclaration:
|
78 | case ts.SyntaxKind.ExportDeclaration:
|
79 | case ts.SyntaxKind.ImportSpecifier:
|
80 | case ts.SyntaxKind.ExportSpecifier:
|
81 | case ts.SyntaxKind.ExportAssignment:
|
82 | case ts.SyntaxKind.JSDocFunctionType:
|
83 | case ts.SyntaxKind.JSDocTypedefTag:
|
84 | case ts.SyntaxKind.JSDocCallbackTag:
|
85 | case ts.SyntaxKind.JSDocSignature:
|
86 | case ts.SyntaxKind.JSDocPropertyTag:
|
87 | case ts.SyntaxKind.JSDocParameterTag:
|
88 | case ts.SyntaxKind.SourceFile:
|
89 | return true;
|
90 | default:
|
91 | return false;
|
92 | }
|
93 | }
|
94 | export function isMemberExpression(node) {
|
95 | switch (node.kind) {
|
96 | case ts.SyntaxKind.Identifier:
|
97 | case ts.SyntaxKind.StringLiteral:
|
98 | case ts.SyntaxKind.NullKeyword:
|
99 | case ts.SyntaxKind.TrueKeyword:
|
100 | case ts.SyntaxKind.FalseKeyword:
|
101 | case ts.SyntaxKind.ThisKeyword:
|
102 | case ts.SyntaxKind.SuperKeyword:
|
103 | case ts.SyntaxKind.ImportKeyword:
|
104 | case ts.SyntaxKind.FunctionExpression:
|
105 | case ts.SyntaxKind.RegularExpressionLiteral:
|
106 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
107 | case ts.SyntaxKind.NumericLiteral:
|
108 | case ts.SyntaxKind.TemplateExpression:
|
109 | case ts.SyntaxKind.ParenthesizedExpression:
|
110 | case ts.SyntaxKind.ArrayLiteralExpression:
|
111 | case ts.SyntaxKind.ObjectLiteralExpression:
|
112 | case ts.SyntaxKind.PropertyAccessExpression:
|
113 | case ts.SyntaxKind.ElementAccessExpression:
|
114 | case ts.SyntaxKind.NewExpression:
|
115 | case ts.SyntaxKind.TaggedTemplateExpression:
|
116 | case ts.SyntaxKind.MetaProperty:
|
117 | case ts.SyntaxKind.JsxElement:
|
118 | case ts.SyntaxKind.JsxSelfClosingElement:
|
119 | case ts.SyntaxKind.JsxFragment:
|
120 | case ts.SyntaxKind.ClassExpression:
|
121 | return true;
|
122 | default:
|
123 | return false;
|
124 | }
|
125 | }
|
126 | export function isLeftHandSideExpression(node) {
|
127 | switch (node.kind) {
|
128 | case ts.SyntaxKind.Identifier:
|
129 | case ts.SyntaxKind.StringLiteral:
|
130 | case ts.SyntaxKind.PartiallyEmittedExpression:
|
131 | case ts.SyntaxKind.NullKeyword:
|
132 | case ts.SyntaxKind.TrueKeyword:
|
133 | case ts.SyntaxKind.FalseKeyword:
|
134 | case ts.SyntaxKind.ThisKeyword:
|
135 | case ts.SyntaxKind.SuperKeyword:
|
136 | case ts.SyntaxKind.ImportKeyword:
|
137 | case ts.SyntaxKind.FunctionExpression:
|
138 | case ts.SyntaxKind.RegularExpressionLiteral:
|
139 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
140 | case ts.SyntaxKind.NumericLiteral:
|
141 | case ts.SyntaxKind.TemplateExpression:
|
142 | case ts.SyntaxKind.ParenthesizedExpression:
|
143 | case ts.SyntaxKind.ArrayLiteralExpression:
|
144 | case ts.SyntaxKind.ObjectLiteralExpression:
|
145 | case ts.SyntaxKind.PropertyAccessExpression:
|
146 | case ts.SyntaxKind.ElementAccessExpression:
|
147 | case ts.SyntaxKind.CallExpression:
|
148 | case ts.SyntaxKind.NewExpression:
|
149 | case ts.SyntaxKind.TaggedTemplateExpression:
|
150 | case ts.SyntaxKind.NonNullExpression:
|
151 | case ts.SyntaxKind.MetaProperty:
|
152 | case ts.SyntaxKind.JsxElement:
|
153 | case ts.SyntaxKind.JsxSelfClosingElement:
|
154 | case ts.SyntaxKind.JsxFragment:
|
155 | case ts.SyntaxKind.ClassExpression:
|
156 | return true;
|
157 | default:
|
158 | return false;
|
159 | }
|
160 | }
|
161 | export function isUpdateExpression(node) {
|
162 | switch (node.kind) {
|
163 | case ts.SyntaxKind.Identifier:
|
164 | case ts.SyntaxKind.StringLiteral:
|
165 | case ts.SyntaxKind.PartiallyEmittedExpression:
|
166 | case ts.SyntaxKind.PrefixUnaryExpression:
|
167 | case ts.SyntaxKind.PostfixUnaryExpression:
|
168 | case ts.SyntaxKind.NullKeyword:
|
169 | case ts.SyntaxKind.TrueKeyword:
|
170 | case ts.SyntaxKind.FalseKeyword:
|
171 | case ts.SyntaxKind.ThisKeyword:
|
172 | case ts.SyntaxKind.SuperKeyword:
|
173 | case ts.SyntaxKind.ImportKeyword:
|
174 | case ts.SyntaxKind.FunctionExpression:
|
175 | case ts.SyntaxKind.RegularExpressionLiteral:
|
176 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
177 | case ts.SyntaxKind.NumericLiteral:
|
178 | case ts.SyntaxKind.TemplateExpression:
|
179 | case ts.SyntaxKind.ParenthesizedExpression:
|
180 | case ts.SyntaxKind.ArrayLiteralExpression:
|
181 | case ts.SyntaxKind.ObjectLiteralExpression:
|
182 | case ts.SyntaxKind.PropertyAccessExpression:
|
183 | case ts.SyntaxKind.ElementAccessExpression:
|
184 | case ts.SyntaxKind.CallExpression:
|
185 | case ts.SyntaxKind.NewExpression:
|
186 | case ts.SyntaxKind.TaggedTemplateExpression:
|
187 | case ts.SyntaxKind.NonNullExpression:
|
188 | case ts.SyntaxKind.MetaProperty:
|
189 | case ts.SyntaxKind.JsxElement:
|
190 | case ts.SyntaxKind.JsxSelfClosingElement:
|
191 | case ts.SyntaxKind.JsxFragment:
|
192 | case ts.SyntaxKind.ClassExpression:
|
193 | return true;
|
194 | default:
|
195 | return false;
|
196 | }
|
197 | }
|
198 | export function isUnaryExpression(node) {
|
199 | switch (node.kind) {
|
200 | case ts.SyntaxKind.Identifier:
|
201 | case ts.SyntaxKind.StringLiteral:
|
202 | case ts.SyntaxKind.PartiallyEmittedExpression:
|
203 | case ts.SyntaxKind.PrefixUnaryExpression:
|
204 | case ts.SyntaxKind.PostfixUnaryExpression:
|
205 | case ts.SyntaxKind.NullKeyword:
|
206 | case ts.SyntaxKind.TrueKeyword:
|
207 | case ts.SyntaxKind.FalseKeyword:
|
208 | case ts.SyntaxKind.ThisKeyword:
|
209 | case ts.SyntaxKind.SuperKeyword:
|
210 | case ts.SyntaxKind.ImportKeyword:
|
211 | case ts.SyntaxKind.DeleteExpression:
|
212 | case ts.SyntaxKind.TypeOfExpression:
|
213 | case ts.SyntaxKind.VoidExpression:
|
214 | case ts.SyntaxKind.AwaitExpression:
|
215 | case ts.SyntaxKind.FunctionExpression:
|
216 | case ts.SyntaxKind.RegularExpressionLiteral:
|
217 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
218 | case ts.SyntaxKind.NumericLiteral:
|
219 | case ts.SyntaxKind.TemplateExpression:
|
220 | case ts.SyntaxKind.ParenthesizedExpression:
|
221 | case ts.SyntaxKind.ArrayLiteralExpression:
|
222 | case ts.SyntaxKind.ObjectLiteralExpression:
|
223 | case ts.SyntaxKind.PropertyAccessExpression:
|
224 | case ts.SyntaxKind.ElementAccessExpression:
|
225 | case ts.SyntaxKind.CallExpression:
|
226 | case ts.SyntaxKind.NewExpression:
|
227 | case ts.SyntaxKind.TaggedTemplateExpression:
|
228 | case ts.SyntaxKind.TypeAssertionExpression:
|
229 | case ts.SyntaxKind.NonNullExpression:
|
230 | case ts.SyntaxKind.MetaProperty:
|
231 | case ts.SyntaxKind.JsxElement:
|
232 | case ts.SyntaxKind.JsxSelfClosingElement:
|
233 | case ts.SyntaxKind.JsxFragment:
|
234 | case ts.SyntaxKind.ClassExpression:
|
235 | return true;
|
236 | default:
|
237 | return false;
|
238 | }
|
239 | }
|
240 | export function isExpression(node) {
|
241 | switch (node.kind) {
|
242 | case ts.SyntaxKind.Identifier:
|
243 | case ts.SyntaxKind.StringLiteral:
|
244 | case ts.SyntaxKind.OmittedExpression:
|
245 | case ts.SyntaxKind.PartiallyEmittedExpression:
|
246 | case ts.SyntaxKind.PrefixUnaryExpression:
|
247 | case ts.SyntaxKind.PostfixUnaryExpression:
|
248 | case ts.SyntaxKind.NullKeyword:
|
249 | case ts.SyntaxKind.TrueKeyword:
|
250 | case ts.SyntaxKind.FalseKeyword:
|
251 | case ts.SyntaxKind.ThisKeyword:
|
252 | case ts.SyntaxKind.SuperKeyword:
|
253 | case ts.SyntaxKind.ImportKeyword:
|
254 | case ts.SyntaxKind.DeleteExpression:
|
255 | case ts.SyntaxKind.TypeOfExpression:
|
256 | case ts.SyntaxKind.VoidExpression:
|
257 | case ts.SyntaxKind.AwaitExpression:
|
258 | case ts.SyntaxKind.YieldExpression:
|
259 | case ts.SyntaxKind.SyntheticExpression:
|
260 | case ts.SyntaxKind.BinaryExpression:
|
261 | case ts.SyntaxKind.ConditionalExpression:
|
262 | case ts.SyntaxKind.FunctionExpression:
|
263 | case ts.SyntaxKind.ArrowFunction:
|
264 | case ts.SyntaxKind.RegularExpressionLiteral:
|
265 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
266 | case ts.SyntaxKind.NumericLiteral:
|
267 | case ts.SyntaxKind.TemplateExpression:
|
268 | case ts.SyntaxKind.ParenthesizedExpression:
|
269 | case ts.SyntaxKind.ArrayLiteralExpression:
|
270 | case ts.SyntaxKind.SpreadElement:
|
271 | case ts.SyntaxKind.ObjectLiteralExpression:
|
272 | case ts.SyntaxKind.PropertyAccessExpression:
|
273 | case ts.SyntaxKind.ElementAccessExpression:
|
274 | case ts.SyntaxKind.CallExpression:
|
275 | case ts.SyntaxKind.NewExpression:
|
276 | case ts.SyntaxKind.TaggedTemplateExpression:
|
277 | case ts.SyntaxKind.AsExpression:
|
278 | case ts.SyntaxKind.TypeAssertionExpression:
|
279 | case ts.SyntaxKind.NonNullExpression:
|
280 | case ts.SyntaxKind.MetaProperty:
|
281 | case ts.SyntaxKind.JsxElement:
|
282 | case ts.SyntaxKind.JsxOpeningElement:
|
283 | case ts.SyntaxKind.JsxSelfClosingElement:
|
284 | case ts.SyntaxKind.JsxFragment:
|
285 | case ts.SyntaxKind.JsxOpeningFragment:
|
286 | case ts.SyntaxKind.JsxClosingFragment:
|
287 | case ts.SyntaxKind.JsxExpression:
|
288 | case ts.SyntaxKind.CommaListExpression:
|
289 | case ts.SyntaxKind.ClassExpression:
|
290 | return true;
|
291 | default:
|
292 | return false;
|
293 | }
|
294 | }
|
295 | export function isNamedDeclaration(node) {
|
296 | switch (node.kind) {
|
297 | case ts.SyntaxKind.TypeParameter:
|
298 | case ts.SyntaxKind.CallSignature:
|
299 | case ts.SyntaxKind.ConstructSignature:
|
300 | case ts.SyntaxKind.VariableDeclaration:
|
301 | case ts.SyntaxKind.Parameter:
|
302 | case ts.SyntaxKind.BindingElement:
|
303 | case ts.SyntaxKind.PropertySignature:
|
304 | case ts.SyntaxKind.PropertyDeclaration:
|
305 | case ts.SyntaxKind.PropertyAssignment:
|
306 | case ts.SyntaxKind.ShorthandPropertyAssignment:
|
307 | case ts.SyntaxKind.SpreadAssignment:
|
308 | case ts.SyntaxKind.FunctionDeclaration:
|
309 | case ts.SyntaxKind.MethodSignature:
|
310 | case ts.SyntaxKind.MethodDeclaration:
|
311 | case ts.SyntaxKind.Constructor:
|
312 | case ts.SyntaxKind.SemicolonClassElement:
|
313 | case ts.SyntaxKind.GetAccessor:
|
314 | case ts.SyntaxKind.SetAccessor:
|
315 | case ts.SyntaxKind.IndexSignature:
|
316 | case ts.SyntaxKind.FunctionType:
|
317 | case ts.SyntaxKind.ConstructorType:
|
318 | case ts.SyntaxKind.FunctionExpression:
|
319 | case ts.SyntaxKind.ArrowFunction:
|
320 | case ts.SyntaxKind.PropertyAccessExpression:
|
321 | case ts.SyntaxKind.JsxAttribute:
|
322 | case ts.SyntaxKind.JsxSpreadAttribute:
|
323 | case ts.SyntaxKind.MissingDeclaration:
|
324 | case ts.SyntaxKind.ClassDeclaration:
|
325 | case ts.SyntaxKind.ClassExpression:
|
326 | case ts.SyntaxKind.InterfaceDeclaration:
|
327 | case ts.SyntaxKind.TypeAliasDeclaration:
|
328 | case ts.SyntaxKind.EnumMember:
|
329 | case ts.SyntaxKind.EnumDeclaration:
|
330 | case ts.SyntaxKind.ModuleDeclaration:
|
331 | case ts.SyntaxKind.ImportEqualsDeclaration:
|
332 | case ts.SyntaxKind.ImportClause:
|
333 | case ts.SyntaxKind.NamespaceImport:
|
334 | case ts.SyntaxKind.NamespaceExportDeclaration:
|
335 | case ts.SyntaxKind.ExportDeclaration:
|
336 | case ts.SyntaxKind.ImportSpecifier:
|
337 | case ts.SyntaxKind.ExportSpecifier:
|
338 | case ts.SyntaxKind.ExportAssignment:
|
339 | case ts.SyntaxKind.JSDocFunctionType:
|
340 | case ts.SyntaxKind.JSDocTypedefTag:
|
341 | case ts.SyntaxKind.JSDocCallbackTag:
|
342 | return true;
|
343 | default:
|
344 | return false;
|
345 | }
|
346 | }
|
347 | export function isDeclarationStatement(node) {
|
348 | switch (node.kind) {
|
349 | case ts.SyntaxKind.FunctionDeclaration:
|
350 | case ts.SyntaxKind.MissingDeclaration:
|
351 | case ts.SyntaxKind.ClassDeclaration:
|
352 | case ts.SyntaxKind.InterfaceDeclaration:
|
353 | case ts.SyntaxKind.TypeAliasDeclaration:
|
354 | case ts.SyntaxKind.EnumDeclaration:
|
355 | case ts.SyntaxKind.ModuleDeclaration:
|
356 | case ts.SyntaxKind.ImportEqualsDeclaration:
|
357 | case ts.SyntaxKind.NamespaceExportDeclaration:
|
358 | case ts.SyntaxKind.ExportDeclaration:
|
359 | case ts.SyntaxKind.ExportAssignment:
|
360 | return true;
|
361 | default:
|
362 | return false;
|
363 | }
|
364 | }
|
365 | export function isStatement(node) {
|
366 | switch (node.kind) {
|
367 | case ts.SyntaxKind.FunctionDeclaration:
|
368 | case ts.SyntaxKind.NotEmittedStatement:
|
369 | case ts.SyntaxKind.EmptyStatement:
|
370 | case ts.SyntaxKind.DebuggerStatement:
|
371 | case ts.SyntaxKind.MissingDeclaration:
|
372 | case ts.SyntaxKind.Block:
|
373 | case ts.SyntaxKind.VariableStatement:
|
374 | case ts.SyntaxKind.ExpressionStatement:
|
375 | case ts.SyntaxKind.IfStatement:
|
376 | case ts.SyntaxKind.DoStatement:
|
377 | case ts.SyntaxKind.WhileStatement:
|
378 | case ts.SyntaxKind.ForStatement:
|
379 | case ts.SyntaxKind.ForInStatement:
|
380 | case ts.SyntaxKind.ForOfStatement:
|
381 | case ts.SyntaxKind.BreakStatement:
|
382 | case ts.SyntaxKind.ContinueStatement:
|
383 | case ts.SyntaxKind.ReturnStatement:
|
384 | case ts.SyntaxKind.WithStatement:
|
385 | case ts.SyntaxKind.SwitchStatement:
|
386 | case ts.SyntaxKind.LabeledStatement:
|
387 | case ts.SyntaxKind.ThrowStatement:
|
388 | case ts.SyntaxKind.TryStatement:
|
389 | case ts.SyntaxKind.ClassDeclaration:
|
390 | case ts.SyntaxKind.InterfaceDeclaration:
|
391 | case ts.SyntaxKind.TypeAliasDeclaration:
|
392 | case ts.SyntaxKind.EnumDeclaration:
|
393 | case ts.SyntaxKind.ModuleDeclaration:
|
394 | case ts.SyntaxKind.ModuleBlock:
|
395 | case ts.SyntaxKind.ImportEqualsDeclaration:
|
396 | case ts.SyntaxKind.ImportDeclaration:
|
397 | case ts.SyntaxKind.NamespaceExportDeclaration:
|
398 | case ts.SyntaxKind.ExportDeclaration:
|
399 | case ts.SyntaxKind.ExportAssignment:
|
400 | return true;
|
401 | default:
|
402 | return false;
|
403 | }
|
404 | }
|
405 | export function isSignatureDeclarationBase(node) {
|
406 | switch (node.kind) {
|
407 | case ts.SyntaxKind.CallSignature:
|
408 | case ts.SyntaxKind.ConstructSignature:
|
409 | case ts.SyntaxKind.FunctionDeclaration:
|
410 | case ts.SyntaxKind.MethodSignature:
|
411 | case ts.SyntaxKind.MethodDeclaration:
|
412 | case ts.SyntaxKind.Constructor:
|
413 | case ts.SyntaxKind.GetAccessor:
|
414 | case ts.SyntaxKind.SetAccessor:
|
415 | case ts.SyntaxKind.IndexSignature:
|
416 | case ts.SyntaxKind.FunctionType:
|
417 | case ts.SyntaxKind.ConstructorType:
|
418 | case ts.SyntaxKind.FunctionExpression:
|
419 | case ts.SyntaxKind.ArrowFunction:
|
420 | case ts.SyntaxKind.JSDocFunctionType:
|
421 | return true;
|
422 | default:
|
423 | return false;
|
424 | }
|
425 | }
|
426 | export function isParameterDeclaration(node) {
|
427 | switch (node.kind) {
|
428 | case ts.SyntaxKind.Parameter:
|
429 | return true;
|
430 | default:
|
431 | return false;
|
432 | }
|
433 | }
|
434 | export function isFunctionLikeDeclarationBase(node) {
|
435 | switch (node.kind) {
|
436 | case ts.SyntaxKind.FunctionDeclaration:
|
437 | case ts.SyntaxKind.MethodDeclaration:
|
438 | case ts.SyntaxKind.Constructor:
|
439 | case ts.SyntaxKind.GetAccessor:
|
440 | case ts.SyntaxKind.SetAccessor:
|
441 | case ts.SyntaxKind.FunctionExpression:
|
442 | case ts.SyntaxKind.ArrowFunction:
|
443 | return true;
|
444 | default:
|
445 | return false;
|
446 | }
|
447 | }
|
448 | export function isKeywordTypeNode(node) {
|
449 | switch (node.kind) {
|
450 | case ts.SyntaxKind.ThisKeyword:
|
451 | return true;
|
452 | default:
|
453 | return false;
|
454 | }
|
455 | }
|
456 | export function isNodeWithTypeArguments(node) {
|
457 | switch (node.kind) {
|
458 | case ts.SyntaxKind.ImportType:
|
459 | case ts.SyntaxKind.TypeReference:
|
460 | case ts.SyntaxKind.ExpressionWithTypeArguments:
|
461 | return true;
|
462 | default:
|
463 | return false;
|
464 | }
|
465 | }
|
466 | export function isFunctionOrConstructorTypeNodeBase(node) {
|
467 | switch (node.kind) {
|
468 | case ts.SyntaxKind.FunctionType:
|
469 | case ts.SyntaxKind.ConstructorType:
|
470 | return true;
|
471 | default:
|
472 | return false;
|
473 | }
|
474 | }
|
475 | export function isOptionalTypeNode(node) {
|
476 | switch (node.kind) {
|
477 | case ts.SyntaxKind.OptionalType:
|
478 | return true;
|
479 | default:
|
480 | return false;
|
481 | }
|
482 | }
|
483 | export function isRestTypeNode(node) {
|
484 | switch (node.kind) {
|
485 | case ts.SyntaxKind.RestType:
|
486 | return true;
|
487 | default:
|
488 | return false;
|
489 | }
|
490 | }
|
491 | export function isLiteralLikeNode(node) {
|
492 | switch (node.kind) {
|
493 | case ts.SyntaxKind.StringLiteral:
|
494 | case ts.SyntaxKind.RegularExpressionLiteral:
|
495 | case ts.SyntaxKind.NoSubstitutionTemplateLiteral:
|
496 | case ts.SyntaxKind.NumericLiteral:
|
497 | case ts.SyntaxKind.TemplateHead:
|
498 | case ts.SyntaxKind.TemplateMiddle:
|
499 | case ts.SyntaxKind.TemplateTail:
|
500 | return true;
|
501 | default:
|
502 | return false;
|
503 | }
|
504 | }
|
505 | export function isPartiallyEmittedExpression(node) {
|
506 | switch (node.kind) {
|
507 | case ts.SyntaxKind.PartiallyEmittedExpression:
|
508 | return true;
|
509 | default:
|
510 | return false;
|
511 | }
|
512 | }
|
513 | export function isNullLiteral(node) {
|
514 | switch (node.kind) {
|
515 | case ts.SyntaxKind.NullKeyword:
|
516 | return true;
|
517 | default:
|
518 | return false;
|
519 | }
|
520 | }
|
521 | export function isBooleanLiteral(node) {
|
522 | switch (node.kind) {
|
523 | case ts.SyntaxKind.TrueKeyword:
|
524 | case ts.SyntaxKind.FalseKeyword:
|
525 | return true;
|
526 | default:
|
527 | return false;
|
528 | }
|
529 | }
|
530 | export function isThisExpression(node) {
|
531 | switch (node.kind) {
|
532 | case ts.SyntaxKind.ThisKeyword:
|
533 | return true;
|
534 | default:
|
535 | return false;
|
536 | }
|
537 | }
|
538 | export function isSuperExpression(node) {
|
539 | switch (node.kind) {
|
540 | case ts.SyntaxKind.SuperKeyword:
|
541 | return true;
|
542 | default:
|
543 | return false;
|
544 | }
|
545 | }
|
546 | export function isImportExpression(node) {
|
547 | switch (node.kind) {
|
548 | case ts.SyntaxKind.ImportKeyword:
|
549 | return true;
|
550 | default:
|
551 | return false;
|
552 | }
|
553 | }
|
554 | export function isSyntheticExpression(node) {
|
555 | switch (node.kind) {
|
556 | case ts.SyntaxKind.SyntheticExpression:
|
557 | return true;
|
558 | default:
|
559 | return false;
|
560 | }
|
561 | }
|
562 | export function isObjectLiteralExpressionBase(node) {
|
563 | switch (node.kind) {
|
564 | case ts.SyntaxKind.ObjectLiteralExpression:
|
565 | return true;
|
566 | default:
|
567 | return false;
|
568 | }
|
569 | }
|
570 | export function isNotEmittedStatement(node) {
|
571 | switch (node.kind) {
|
572 | case ts.SyntaxKind.NotEmittedStatement:
|
573 | return true;
|
574 | default:
|
575 | return false;
|
576 | }
|
577 | }
|
578 | export function isCommaListExpression(node) {
|
579 | switch (node.kind) {
|
580 | case ts.SyntaxKind.CommaListExpression:
|
581 | return true;
|
582 | default:
|
583 | return false;
|
584 | }
|
585 | }
|
586 | export function isClassLikeDeclarationBase(node) {
|
587 | switch (node.kind) {
|
588 | case ts.SyntaxKind.ClassDeclaration:
|
589 | case ts.SyntaxKind.ClassExpression:
|
590 | return true;
|
591 | default:
|
592 | return false;
|
593 | }
|
594 | }
|
595 | export function isJSDocType(node) {
|
596 | switch (node.kind) {
|
597 | case ts.SyntaxKind.JSDocAllType:
|
598 | case ts.SyntaxKind.JSDocUnknownType:
|
599 | case ts.SyntaxKind.JSDocNonNullableType:
|
600 | case ts.SyntaxKind.JSDocNullableType:
|
601 | case ts.SyntaxKind.JSDocOptionalType:
|
602 | case ts.SyntaxKind.JSDocFunctionType:
|
603 | case ts.SyntaxKind.JSDocVariadicType:
|
604 | case ts.SyntaxKind.JSDocSignature:
|
605 | case ts.SyntaxKind.JSDocTypeLiteral:
|
606 | return true;
|
607 | default:
|
608 | return false;
|
609 | }
|
610 | }
|
611 | export function isJSDocTag(node) {
|
612 | switch (node.kind) {
|
613 | case ts.SyntaxKind.JSDocTag:
|
614 | case ts.SyntaxKind.JSDocAugmentsTag:
|
615 | case ts.SyntaxKind.JSDocClassTag:
|
616 | case ts.SyntaxKind.JSDocThisTag:
|
617 | case ts.SyntaxKind.JSDocTemplateTag:
|
618 | case ts.SyntaxKind.JSDocReturnTag:
|
619 | case ts.SyntaxKind.JSDocTypeTag:
|
620 | case ts.SyntaxKind.JSDocTypedefTag:
|
621 | case ts.SyntaxKind.JSDocCallbackTag:
|
622 | case ts.SyntaxKind.JSDocPropertyTag:
|
623 | case ts.SyntaxKind.JSDocParameterTag:
|
624 | return true;
|
625 | default:
|
626 | return false;
|
627 | }
|
628 | }
|
629 | export function isJSDocUnknownTag(node) {
|
630 | switch (node.kind) {
|
631 | case ts.SyntaxKind.JSDocTag:
|
632 | return true;
|
633 | default:
|
634 | return false;
|
635 | }
|
636 | }
|
637 | export function isInputFiles(node) {
|
638 | switch (node.kind) {
|
639 | case ts.SyntaxKind.InputFiles:
|
640 | return true;
|
641 | default:
|
642 | return false;
|
643 | }
|
644 | }
|
645 | export function isJsonMinusNumericLiteral(node) {
|
646 | switch (node.kind) {
|
647 | case ts.SyntaxKind.PrefixUnaryExpression:
|
648 | return true;
|
649 | default:
|
650 | return false;
|
651 | }
|
652 | }
|
653 |
|
654 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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LEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNwQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2Q7WUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYTtJQUM3QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDZDtZQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBYTtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDZDtZQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFhO0lBQ3JELFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNqQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMscUJBQXFCO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2Q7WUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNILENBQUMiLCJmaWxlIjoibmVvLW9uZS10cy11dGlscy9zcmMvZ3VhcmRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGVcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWFyeUV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuUHJpbWFyeUV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZGVudGlmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN1cGVyS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0S2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5SZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5vU3Vic3RpdHV0aW9uVGVtcGxhdGVMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdW1lcmljTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGVtcGxhdGVFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJlbnRoZXNpemVkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5EZWNsYXJhdGlvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVQYXJhbWV0ZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNhbGxTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdFNpZ25hdHVyZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVmFyaWFibGVEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyYW1ldGVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5CaW5kaW5nRWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5QXNzaWdubWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TcHJlYWRBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NZXRob2RTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGhvZERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db25zdHJ1Y3RvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2VtaWNvbG9uQ2xhc3NFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5HZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2V0QWNjZXNzb3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1hcHBlZFR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkJpbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyb3dGdW5jdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeEF0dHJpYnV0ZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U3ByZWFkQXR0cmlidXRlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NaXNzaW5nRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJmYWNlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtTWVtYmVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0Q2xhdXNlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VJbXBvcnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0U3BlY2lmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnRTcGVjaWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jRnVuY3Rpb25UeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVkZWZUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jQ2FsbGJhY2tUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jU2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1Byb3BlcnR5VGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1BhcmFtZXRlclRhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU291cmNlRmlsZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVtYmVyRXhwcmVzc2lvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5NZW1iZXJFeHByZXNzaW9uIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSWRlbnRpZmllcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVndWxhckV4cHJlc3Npb25MaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OZXdFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkxlZnRIYW5kU2lkZUV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZGVudGlmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJ0aWFsbHlFbWl0dGVkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVndWxhckV4cHJlc3Npb25MaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTmV3RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob25OdWxsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTWV0YVByb3BlcnR5OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hTZWxmQ2xvc2luZ0VsZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeEZyYWdtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0V4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwZGF0ZUV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuVXBkYXRlRXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN0cmluZ0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcnRpYWxseUVtaXR0ZWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QcmVmaXhVbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBvc3RmaXhVbmFyeUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UaGlzS2V5d29yZDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3VwZXJLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UZW1wbGF0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbGVtZW50QWNjZXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9uTnVsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmFyeUV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuVW5hcnlFeHByZXNzaW9uIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSWRlbnRpZmllcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3RyaW5nTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFydGlhbGx5RW1pdHRlZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByZWZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkRlbGV0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVPZkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Bd2FpdEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVndWxhckV4cHJlc3Npb25MaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob1N1YnN0aXR1dGlvblRlbXBsYXRlTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtZXJpY0xpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycmF5TGl0ZXJhbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTmV3RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9uTnVsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U2VsZkNsb3NpbmdFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZGVudGlmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5PbWl0dGVkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFydGlhbGx5RW1pdHRlZEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByZWZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUG9zdGZpeFVuYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkRlbGV0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVPZkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Bd2FpdEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLllpZWxkRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU3ludGhldGljRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQmluYXJ5RXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ29uZGl0aW9uYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycm93RnVuY3Rpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWVyaWNMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UZW1wbGF0ZUV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheUxpdGVyYWxFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TcHJlYWRFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbGVtZW50QWNjZXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5ld0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXNFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTm9uTnVsbEV4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGFQcm9wZXJ0eTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4T3BlbmluZ0VsZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeFNlbGZDbG9zaW5nRWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4RnJhZ21lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeE9wZW5pbmdGcmFnbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4Q2xvc2luZ0ZyYWdtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Kc3hFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db21tYUxpc3RFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0V4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuTmFtZWREZWNsYXJhdGlvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVQYXJhbWV0ZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNhbGxTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdFNpZ25hdHVyZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVmFyaWFibGVEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyYW1ldGVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5CaW5kaW5nRWxlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUHJvcGVydHlTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlByb3BlcnR5QXNzaWdubWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TcHJlYWRBc3NpZ25tZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NZXRob2RTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGhvZERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db25zdHJ1Y3RvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2VtaWNvbG9uQ2xhc3NFbGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5HZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2V0QWNjZXNzb3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpzeEF0dHJpYnV0ZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSnN4U3ByZWFkQXR0cmlidXRlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NaXNzaW5nRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJmYWNlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtTWVtYmVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0Q2xhdXNlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VJbXBvcnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0U3BlY2lmaWVyOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHBvcnRTcGVjaWZpZXI6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jRnVuY3Rpb25UeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVkZWZUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jQ2FsbGJhY2tUYWc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlY2xhcmF0aW9uU3RhdGVtZW50KG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkRlY2xhcmF0aW9uU3RhdGVtZW50IHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTWlzc2luZ0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcmZhY2VEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUFsaWFzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkVudW1EZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTW9kdWxlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEVxdWFsc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRXhwb3J0RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXRlbWVudChub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5TdGF0ZW1lbnQge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob3RFbWl0dGVkU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbXB0eVN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRGVidWdnZXJTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1pc3NpbmdEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQmxvY2s6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZhcmlhYmxlU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHByZXNzaW9uU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JZlN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRG9TdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLldoaWxlU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Gb3JTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZvckluU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Gb3JPZlN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQnJlYWtTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnRpbnVlU3RhdGVtZW50OlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5SZXR1cm5TdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLldpdGhTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN3aXRjaFN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTGFiZWxlZFN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhyb3dTdGF0ZW1lbnQ6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRyeVN0YXRlbWVudDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW50ZXJmYWNlRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVBbGlhc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FbnVtRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Nb2R1bGVCbG9jazpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydERlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRXhwb3J0RGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkV4cG9ydEFzc2lnbm1lbnQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpZ25hdHVyZURlY2xhcmF0aW9uQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5TaWduYXR1cmVEZWNsYXJhdGlvbkJhc2Uge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DYWxsU2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db25zdHJ1Y3RTaWduYXR1cmU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk1ldGhvZFNpZ25hdHVyZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTWV0aG9kRGVjbGFyYXRpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5HZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuU2V0QWNjZXNzb3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0Z1bmN0aW9uVHlwZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYW1ldGVyRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuUGFyYW1ldGVyRGVjbGFyYXRpb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJhbWV0ZXI6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uTGlrZURlY2xhcmF0aW9uQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5GdW5jdGlvbkxpa2VEZWNsYXJhdGlvbkJhc2Uge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5NZXRob2REZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ29uc3RydWN0b3I6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkdldEFjY2Vzc29yOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TZXRBY2Nlc3NvcjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25FeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLZXl3b3JkVHlwZU5vZGUobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuS2V5d29yZFR5cGVOb2RlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVXaXRoVHlwZUFyZ3VtZW50cyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5Ob2RlV2l0aFR5cGVBcmd1bWVudHMge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbXBvcnRUeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5FeHByZXNzaW9uV2l0aFR5cGVBcmd1bWVudHM6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGVOb2RlQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5GdW5jdGlvbk9yQ29uc3RydWN0b3JUeXBlTm9kZUJhc2Uge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkNvbnN0cnVjdG9yVHlwZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT3B0aW9uYWxUeXBlTm9kZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5PcHRpb25hbFR5cGVOb2RlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuT3B0aW9uYWxUeXBlOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXN0VHlwZU5vZGUobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuUmVzdFR5cGVOb2RlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUmVzdFR5cGU6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWxMaWtlTm9kZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5MaXRlcmFsTGlrZU5vZGUge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5SZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk5vU3Vic3RpdHV0aW9uVGVtcGxhdGVMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdW1lcmljTGl0ZXJhbDpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGVtcGxhdGVIZWFkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UZW1wbGF0ZU1pZGRsZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGVtcGxhdGVUYWlsOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJ0aWFsbHlFbWl0dGVkRXhwcmVzc2lvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5QYXJ0aWFsbHlFbWl0dGVkRXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlBhcnRpYWxseUVtaXR0ZWRFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsTGl0ZXJhbChub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5OdWxsTGl0ZXJhbCB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuTGl0ZXJhbChub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5Cb29sZWFuTGl0ZXJhbCB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GYWxzZUtleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RoaXNFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLlRoaXNFeHByZXNzaW9uIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N1cGVyRXhwcmVzc2lvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5TdXBlckV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ltcG9ydEV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuSW1wb3J0RXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkltcG9ydEtleXdvcmQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bnRoZXRpY0V4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuU3ludGhldGljRXhwcmVzc2lvbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN5bnRoZXRpY0V4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdExpdGVyYWxFeHByZXNzaW9uQmFzZShub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbkJhc2U8YW55PiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk9iamVjdExpdGVyYWxFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RFbWl0dGVkU3RhdGVtZW50KG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLk5vdEVtaXR0ZWRTdGF0ZW1lbnQge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Ob3RFbWl0dGVkU3RhdGVtZW50OlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYUxpc3RFeHByZXNzaW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkNvbW1hTGlzdEV4cHJlc3Npb24ge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Db21tYUxpc3RFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDbGFzc0xpa2VEZWNsYXJhdGlvbkJhc2Uobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuQ2xhc3NMaWtlRGVjbGFyYXRpb25CYXNlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NEZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNKU0RvY1R5cGUobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuSlNEb2NUeXBlIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NBbGxUeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1Vua25vd25UeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY05vbk51bGxhYmxlVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NOdWxsYWJsZVR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jT3B0aW9uYWxUeXBlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0Z1bmN0aW9uVHlwZTpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NWYXJpYWRpY1R5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jU2lnbmF0dXJlOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVMaXRlcmFsOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNKU0RvY1RhZyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5KU0RvY1RhZyB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0F1Z21lbnRzVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY0NsYXNzVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1RoaXNUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jVGVtcGxhdGVUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jUmV0dXJuVGFnOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1R5cGVUYWc6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkpTRG9jVHlwZWRlZlRhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NDYWxsYmFja1RhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NQcm9wZXJ0eVRhZzpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSlNEb2NQYXJhbWV0ZXJUYWc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0pTRG9jVW5rbm93blRhZyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5KU0RvY1Vua25vd25UYWcge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5KU0RvY1RhZzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5wdXRGaWxlcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5JbnB1dEZpbGVzIHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5wdXRGaWxlczpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSnNvbk1pbnVzTnVtZXJpY0xpdGVyYWwobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuSnNvbk1pbnVzTnVtZXJpY0xpdGVyYWwge1xuICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QcmVmaXhVbmFyeUV4cHJlc3Npb246XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|