n8n-nodes-qiniu-ai 0.4.0 → 0.5.0
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.
|
@@ -556,20 +556,28 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
556
556
|
// Execute with AgentGraph if auto-execute is enabled and there are tools
|
|
557
557
|
const hasTools = Object.keys(toolsRecord).length > 0;
|
|
558
558
|
// Initialize Checkpointer if configured
|
|
559
|
-
|
|
560
|
-
// This is a placeholder for future full implementation
|
|
559
|
+
let checkpointer;
|
|
561
560
|
let checkpointerInfo = null;
|
|
562
561
|
if (options.checkpointerType && options.checkpointerType !== 'none') {
|
|
563
562
|
if (options.checkpointerType === 'memory') {
|
|
563
|
+
// Use MemoryCheckpointer for in-memory state persistence
|
|
564
|
+
checkpointer = new qiniu_ai_sdk_1.MemoryCheckpointer({ maxItems: 100 });
|
|
564
565
|
checkpointerInfo = 'memory';
|
|
565
566
|
}
|
|
566
567
|
else if (options.checkpointerType === 'redis') {
|
|
568
|
+
// Redis requires ioredis client - placeholder for future implementation
|
|
569
|
+
// Users need to provide connection string
|
|
567
570
|
checkpointerInfo = `redis:${options.checkpointerConnection || 'not-configured'}`;
|
|
571
|
+
// TODO: Implement RedisCheckpointer when ioredis is available
|
|
568
572
|
}
|
|
569
573
|
else if (options.checkpointerType === 'postgres') {
|
|
574
|
+
// PostgreSQL requires pg pool - placeholder for future implementation
|
|
570
575
|
checkpointerInfo = `postgres:${options.checkpointerConnection || 'not-configured'}`;
|
|
576
|
+
// TODO: Implement PostgresCheckpointer when pg is available
|
|
571
577
|
}
|
|
572
578
|
}
|
|
579
|
+
// Generate threadId if not provided but checkpointer is enabled
|
|
580
|
+
const threadId = options.threadId || (checkpointer ? `thread-${Date.now()}` : undefined);
|
|
573
581
|
const result = await (0, qiniu_ai_sdk_1.generateTextWithGraph)({
|
|
574
582
|
client,
|
|
575
583
|
model,
|
|
@@ -579,6 +587,10 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
579
587
|
maxSteps: options.maxSteps || 10,
|
|
580
588
|
temperature: options.temperature,
|
|
581
589
|
tools: hasTools && autoExecuteTools ? toolsRecord : undefined,
|
|
590
|
+
// Checkpointer integration (SDK v0.14.0+)
|
|
591
|
+
checkpointer,
|
|
592
|
+
threadId,
|
|
593
|
+
resumeFromCheckpoint: true,
|
|
582
594
|
});
|
|
583
595
|
return {
|
|
584
596
|
content: result.text || '',
|
|
@@ -591,7 +603,7 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
591
603
|
text: step.text,
|
|
592
604
|
})) || [],
|
|
593
605
|
toolsExecuted: result.steps?.filter((s) => s.type === 'tool_call').length || 0,
|
|
594
|
-
threadId:
|
|
606
|
+
threadId: threadId || null,
|
|
595
607
|
checkpointer: checkpointerInfo,
|
|
596
608
|
usage: result.usage
|
|
597
609
|
? {
|
|
@@ -696,4 +708,4 @@ async function handleTools(context, client, itemIndex) {
|
|
|
696
708
|
}
|
|
697
709
|
throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Unknown tools operation: ${operation}`, { itemIndex });
|
|
698
710
|
}
|
|
699
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUWluaXVBaS5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvUWluaXVBaS9RaW5pdUFpLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBUXNCO0FBRXRCLHdEQUFpRjtBQUVqRixvRUFBNEU7QUFDNUUsc0VBQStFO0FBQy9FLHNFQUErRTtBQUMvRSxzRUFBK0U7QUFDL0Usc0VBQStFO0FBQy9FLHNFQUErRTtBQUUvRSxNQUFhLE9BQU87SUFBcEI7UUFDSSxnQkFBVyxHQUF5QjtZQUNoQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLDhEQUE4RDtZQUN4RSxXQUFXLEVBQUUsc0VBQXNFO1lBQ25GLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsVUFBVTthQUNuQjtZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNUO29CQUNJLElBQUksRUFBRSxZQUFZO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDakI7YUFDSjtZQUNELFVBQVUsRUFBRTtnQkFDUixXQUFXO2dCQUNYO29CQUNJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxNQUFNOzRCQUNiLFdBQVcsRUFBRSwyQkFBMkI7eUJBQzNDO3dCQUNEOzRCQUNJLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRSxPQUFPOzRCQUNkLFdBQVcsRUFBRSx5QkFB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QUFrQixDQUFDLENBQUM7WUFDeEYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3Qyw4Q0FBOEM7WUFDOUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsUUFBUSxXQUFXLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEQsT0FBTztZQUNILElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtZQUMzQixJQUFJLEVBQUUsTUFBZ0M7U0FDekMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLElBQUksaUNBQWtCLENBQ3hCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFDakIsNEJBQTRCLFNBQVMsRUFBRSxFQUN2QyxFQUFFLFNBQVMsRUFBRSxDQUNoQixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgSU5vZGVFeGVjdXRpb25EYXRhLFxuICAgIElOb2RlVHlwZSxcbiAgICBJTm9kZVR5cGVEZXNjcmlwdGlvbixcbiAgICBOb2RlT3BlcmF0aW9uRXJyb3IsXG4gICAgSURhdGFPYmplY3QsXG4gICAgSUJpbmFyeUtleURhdGEsXG59IGZyb20gJ244bi13b3JrZmxvdyc7XG5cbmltcG9ydCB7IFFpbml1QUksIGdlbmVyYXRlVGV4dFdpdGhHcmFwaCwgQVBJRXJyb3IgfSBmcm9tICdAYm93ZW5xdC9xaW5pdS1haS1zZGsnO1xuXG5pbXBvcnQgeyBjaGF0T3BlcmF0aW9ucywgY2hhdEZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0NoYXREZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBpbWFnZU9wZXJhdGlvbnMsIGltYWdlRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvSW1hZ2VEZXNjcmlwdGlvbic7XG5pbXBvcnQgeyB2aWRlb09wZXJhdGlvbnMsIHZpZGVvRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvVmlkZW9EZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBhZ2VudE9wZXJhdGlvbnMsIGFnZW50RmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvQWdlbnREZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBhdWRpb09wZXJhdGlvbnMsIGF1ZGlvRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvQXVkaW9EZXNjcmlwdGlvbic7XG5pbXBvcnQgeyB0b29sc09wZXJhdGlvbnMsIHRvb2xzRmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvVG9vbHNEZXNjcmlwdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBRaW5pdUFpIGltcGxlbWVudHMgSU5vZGVUeXBlIHtcbiAgICBkZXNjcmlwdGlvbjogSU5vZGVUeXBlRGVzY3JpcHRpb24gPSB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUWluaXUgQUknLFxuICAgICAgICBuYW1lOiAncWluaXVBaScsXG4gICAgICAgIGljb246ICdmaWxlOnFpbml1LnN2ZycsXG4gICAgICAgIGdyb3VwOiBbJ3RyYW5zZm9ybSddLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBzdWJ0aXRsZTogJz17eyRwYXJhbWV0ZXJbXCJvcGVyYXRpb25cIl0gKyBcIjogXCIgKyAkcGFyYW1ldGVyW1wicmVzb3VyY2VcIl19fScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJhY3Qgd2l0aCBRaW5pdSBBSSBzZXJ2aWNlcyAtIENoYXQsIEltYWdlLCBWaWRlbywgQWdlbnQgYW5kIG1vcmUnLFxuICAgICAgICBkZWZhdWx0czoge1xuICAgICAgICAgICAgbmFtZTogJ1Fpbml1IEFJJyxcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXRzOiBbJ21haW4nXSxcbiAgICAgICAgb3V0cHV0czogWydtYWluJ10sXG4gICAgICAgIGNyZWRlbnRpYWxzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Fpbml1QWlBcGknLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAgLy8gUmVzb3VyY2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAncmVzb3VyY2UnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdvcHRpb25zJyxcbiAgICAgICAgICAgICAgICBub0RhdGFFeHByZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NoYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdjaGF0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgY2hhdCBjb21wbGV0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdJbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2ltYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgb3IgZWRpdCBpbWFnZXMnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICd2aWRlbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIHZpZGVvcycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBZ2VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2FnZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUnVuIEFJIGFnZW50IHdpdGggdG9vbHMgYW5kIG1lbW9yeScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBdWRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2F1ZGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGV4dC10by1TcGVlY2ggYW5kIFNwZWVjaC10by1UZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1Rvb2xzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndG9vbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdXZWIgU2VhcmNoLCBPQ1IgYW5kIG1vcmUnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJ2NoYXQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIE9wZXJhdGlvbnMgYW5kIGZpZWxkc1xuICAgICAgICAgICAgLi4uY2hhdE9wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5jaGF0RmllbGRzLFxuICAgICAgICAgICAgLi4uaW1hZ2VPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uaW1hZ2VGaWVsZHMsXG4gICAgICAgICAgICAuLi52aWRlb09wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi52aWRlb0ZpZWxkcyxcbiAgICAgICAgICAgIC4uLmFnZW50T3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmFnZW50RmllbGRzLFxuICAgICAgICAgICAgLi4uYXVkaW9PcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uYXVkaW9GaWVsZHMsXG4gICAgICAgICAgICAuLi50b29sc09wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi50b29sc0ZpZWxkcyxcbiAgICAgICAgXSxcbiAgICB9O1xuXG4gICAgYXN5bmMgZXhlY3V0ZSh0aGlzOiBJRXhlY3V0ZUZ1bmN0aW9ucyk6IFByb21pc2U8SU5vZGVFeGVjdXRpb25EYXRhW11bXT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SW5wdXREYXRhKCk7XG4gICAgICAgIGNvbnN0IHJldHVybkRhdGE6IElOb2RlRXhlY3V0aW9uRGF0YVtdID0gW107XG5cbiAgICAgICAgLy8gR2V0IGNyZWRlbnRpYWxzXG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygncWluaXVBaUFwaScpO1xuICAgICAgICBjb25zdCBhcGlLZXkgPSBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gKGNyZWRlbnRpYWxzLmJhc2VVcmwgYXMgc3RyaW5nKSB8fCAnaHR0cHM6Ly9hcGkucW5haWdjLmNvbS92MSc7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBjbGllbnRcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFFpbml1QUkoeyBhcGlLZXksIGJhc2VVcmwgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3Jlc291cmNlJywgMCkgYXMgc3RyaW5nO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogSURhdGFPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAvLyBSb3V0ZSB0byBhcHByb3ByaWF0ZSBoYW5kbGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlID09PSAnY2hhdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ2hhdCh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2UgbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBmb3IgYmluYXJ5IG91dHB1dFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVJlc3VsdCA9IGF3YWl0IGhhbmRsZUltYWdlKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBpbWFnZVJlc3VsdC5qc29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5OiBpbWFnZVJlc3VsdC5iaW5hcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWlyZWRJdGVtOiB7IGl0ZW06IGkgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlVmlkZW8odGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAnYWdlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZUFnZW50KHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVBdWRpbyh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICd0b29scycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlVG9vbHModGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBgVW5rbm93biByZXNvdXJjZTogJHtyZXNvdXJjZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpdGVtSW5kZXg6IGkgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgcGFpcmVkSXRlbTogeyBpdGVtOiBpIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFQSUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBRaW5pdSBBSSBBUEkgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYFN0YXR1czogJHtlcnJvci5zdGF0dXN9LCBDb2RlOiAkeyhlcnJvciBhcyBhbnkpLmNvZGUgfHwgJ3Vua25vd24nfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtyZXR1cm5EYXRhXTtcbiAgICB9XG59XG5cbi8vIENoYXQgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ2hhdChcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbW9kZWwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2lucHV0VHlwZScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyB7XG4gICAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICAgICAgICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gICAgICAgIGpzb25Nb2RlPzogYm9vbGVhbjtcbiAgICAgICAgdG9wUD86IG51bWJlcjtcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgbWVzc2FnZXNcbiAgICBsZXQgbWVzc2FnZXM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT4gPSBbXTtcblxuICAgIGlmIChpbnB1dFR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHN5c3RlbU1lc3NhZ2UgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N5c3RlbU1lc3NhZ2UnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgaWYgKHN5c3RlbU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goeyByb2xlOiAnc3lzdGVtJywgY29udGVudDogc3lzdGVtTWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiBwcm9tcHQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZXNEYXRhID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtZXNzYWdlcycsIGl0ZW1JbmRleCkgYXMge1xuICAgICAgICAgICAgbWVzc2FnZVZhbHVlcz86IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT47XG4gICAgICAgIH07XG4gICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhLm1lc3NhZ2VWYWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBBUElcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5jaGF0LmNyZWF0ZSh7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBtZXNzYWdlczogbWVzc2FnZXMgYXMgYW55LFxuICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy50ZW1wZXJhdHVyZSxcbiAgICAgICAgbWF4X3Rva2Vuczogb3B0aW9ucy5tYXhUb2tlbnMsXG4gICAgICAgIHRvcF9wOiBvcHRpb25zLnRvcFAsXG4gICAgICAgIHJlc3BvbnNlX2Zvcm1hdDogb3B0aW9ucy5qc29uTW9kZSA/IHsgdHlwZTogJ2pzb25fb2JqZWN0JyB9IDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsaXplIG91dHB1dFxuICAgIGNvbnN0IGNob2ljZSA9IHJlc3BvbnNlLmNob2ljZXM/LlswXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBjaG9pY2U/Lm1lc3NhZ2U/LmNvbnRlbnQgfHwgJycsXG4gICAgICAgIHJvbGU6IGNob2ljZT8ubWVzc2FnZT8ucm9sZSB8fCAnYXNzaXN0YW50JyxcbiAgICAgICAgZmluaXNoUmVhc29uOiBjaG9pY2U/LmZpbmlzaF9yZWFzb24gfHwgbnVsbCxcbiAgICAgICAgdXNhZ2U6IHJlc3BvbnNlLnVzYWdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwcm9tcHRUb2tlbnM6IHJlc3BvbnNlLnVzYWdlLnByb21wdF90b2tlbnMsXG4gICAgICAgICAgICAgICAgY29tcGxldGlvblRva2VuczogcmVzcG9uc2UudXNhZ2UuY29tcGxldGlvbl90b2tlbnMsXG4gICAgICAgICAgICAgICAgdG90YWxUb2tlbnM6IHJlc3BvbnNlLnVzYWdlLnRvdGFsX3Rva2VucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgX3JhdzogcmVzcG9uc2UgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICB9O1xufVxuXG4vLyBJbWFnZSBoYW5kbGVyIC0gcmV0dXJucyB7IGpzb24sIGJpbmFyeSB9IGZvciBwcm9wZXIgbjhuIGJpbmFyeSBkYXRhIGhhbmRsaW5nXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVJbWFnZShcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8eyBqc29uOiBJRGF0YU9iamVjdDsgYmluYXJ5PzogSUJpbmFyeUtleURhdGEgfT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCB3YWl0Rm9yQ29tcGxldGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignd2FpdEZvckNvbXBsZXRpb24nLCBpdGVtSW5kZXgsIHRydWUpIGFzIGJvb2xlYW47XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIG5lZ2F0aXZlX3Byb21wdDogb3B0aW9ucy5uZWdhdGl2ZVByb21wdCxcbiAgICAgICAgYXNwZWN0X3JhdGlvOiBvcHRpb25zLmFzcGVjdFJhdGlvLFxuICAgICAgICBuOiBvcHRpb25zLm4sXG4gICAgfTtcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdlZGl0Jykge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3JlZmVyZW5jZUltYWdlVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgICAgICBpZiAocmVmZXJlbmNlVXJsKSB7XG4gICAgICAgICAgICBwYXJhbXMuaW1hZ2VfdXJsID0gcmVmZXJlbmNlVXJsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm1hc2spIHtcbiAgICAgICAgICAgIHBhcmFtcy5tYXNrID0gb3B0aW9ucy5tYXNrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtcy5zdHJlbmd0aCA9IG9wdGlvbnMuc3RyZW5ndGg7XG4gICAgICAgIHBhcmFtcy5pbWFnZV9yZWZlcmVuY2UgPSBvcHRpb25zLmltYWdlUmVmZXJlbmNlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBpbWFnZV9jb25maWdcbiAgICBpZiAob3B0aW9ucy5pbWFnZVNpemUpIHtcbiAgICAgICAgcGFyYW1zLmltYWdlX2NvbmZpZyA9IHsgaW1hZ2Vfc2l6ZTogb3B0aW9ucy5pbWFnZVNpemUgfTtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBpbWFnZSByZWZlcmVuY2VzIChnZW5lcmF0ZSBvbmx5KVxuICAgIGlmIChvcGVyYXRpb24gPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgICAgY29uc3Qgc3ViamVjdEltYWdlVXJscyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3ViamVjdEltYWdlVXJscycsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgc2NlbmVJbWFnZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc2NlbmVJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgc3R5bGVJbWFnZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3R5bGVJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcblxuICAgICAgICAvLyBTdWJqZWN0IHJlZmVyZW5jZSBpbWFnZXNcbiAgICAgICAgaWYgKHN1YmplY3RJbWFnZVVybHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybHMgPSBzdWJqZWN0SW1hZ2VVcmxzLnNwbGl0KCcsJykubWFwKHUgPT4gdS50cmltKCkpLmZpbHRlcih1ID0+IHUpO1xuICAgICAgICAgICAgaWYgKHVybHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zdWJqZWN0X2ltYWdlX2xpc3QgPSB1cmxzLm1hcChpbWFnZSA9PiAoeyBpbWFnZSwgaW1hZ2VfdHlwZTogJ3N1YmplY3QnIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjZW5lIHJlZmVyZW5jZSBpbWFnZVxuICAgICAgICBpZiAoc2NlbmVJbWFnZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLnNjZW5lX2ltYWdlID0geyBpbWFnZTogc2NlbmVJbWFnZVVybCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3R5bGUgcmVmZXJlbmNlIGltYWdlXG4gICAgICAgIGlmIChzdHlsZUltYWdlVXJsKSB7XG4gICAgICAgICAgICBwYXJhbXMuc3R5bGVfaW1hZ2UgPSB7IGltYWdlOiBzdHlsZUltYWdlVXJsIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgICBjb25zdCBjcmVhdGVSZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2UuZ2VuZXJhdGUocGFyYW1zKTtcbiAgICAgICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2Uud2FpdEZvclJlc3VsdChjcmVhdGVSZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlUmVzdWx0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLmVkaXQocGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBiaW5hcnkgZGF0YSBmcm9tIGJhc2U2NCBpbWFnZXNcbiAgICBjb25zdCBiaW5hcnk6IElCaW5hcnlLZXlEYXRhID0ge307XG4gICAgY29uc3QgaW1hZ2VzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHJlc3VsdC5kYXRhICYmIEFycmF5LmlzQXJyYXkocmVzdWx0LmRhdGEpKSB7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlc3VsdC5kYXRhLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IHJlc3VsdC5kYXRhW2lkeF07XG4gICAgICAgICAgICBpbWFnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdXJsOiBpbWcudXJsIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpbmRleDogaW1nLmluZGV4LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgYmFzZTY0IHRvIGJpbmFyeSBkYXRhIGZvciBkb3duc3RyZWFtIHVzYWdlXG4gICAgICAgICAgICBpZiAoaW1nLmI2NF9qc29uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oaW1nLmI2NF9qc29uLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluYXJ5S2V5ID0gaWR4ID09PSAwID8gJ2RhdGEnIDogYGRhdGFfJHtpZHh9YDtcbiAgICAgICAgICAgICAgICBiaW5hcnlbYmluYXJ5S2V5XSA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5wcmVwYXJlQmluYXJ5RGF0YShcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICBgaW1hZ2VfJHtpZHh9LiR7cmVzdWx0Lm91dHB1dF9mb3JtYXQgfHwgJ3BuZyd9YCxcbiAgICAgICAgICAgICAgICAgICAgYGltYWdlLyR7cmVzdWx0Lm91dHB1dF9mb3JtYXQgfHwgJ3BuZyd9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBqc29uOiB7XG4gICAgICAgICAgICBpbWFnZXMsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfHwgJ3Vua25vd24nLFxuICAgICAgICAgICAgdGFza0lkOiByZXN1bHQudGFza19pZCxcbiAgICAgICAgICAgIGlzU3luYzogcmVzdWx0LmlzU3luYyxcbiAgICAgICAgICAgIGltYWdlQ291bnQ6IGltYWdlcy5sZW5ndGgsXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQsXG4gICAgICAgIH0sXG4gICAgICAgIGJpbmFyeTogT2JqZWN0LmtleXMoYmluYXJ5KS5sZW5ndGggPiAwID8gYmluYXJ5IDogdW5kZWZpbmVkLFxuICAgIH07XG59XG5cbi8vIFZpZGVvIGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZpZGVvKFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgICBjb25zdCB0YXNrSWQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Rhc2tJZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8uZ2V0KHRhc2tJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgdmlkZW9zOiByZXN1bHQudGFza19yZXN1bHQ/LnZpZGVvcyB8fCBbXSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3JlbWl4Jykge1xuICAgICAgICBjb25zdCBzb3VyY2VWaWRlb0lkID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzb3VyY2VWaWRlb0lkJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHJlbWl4UHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZW1peFByb21wdCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgICAgICBjb25zdCByZW1peE9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3JlbWl4T3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAgIGNvbnN0IHJlbWl4UGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHJlbWl4UHJvbXB0KSByZW1peFBhcmFtcy5wcm9tcHQgPSByZW1peFByb21wdDtcbiAgICAgICAgaWYgKHJlbWl4T3B0aW9ucy5kdXJhdGlvbikgcmVtaXhQYXJhbXMuZHVyYXRpb24gPSByZW1peE9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIGlmIChyZW1peE9wdGlvbnMubW9kZSkgcmVtaXhQYXJhbXMubW9kZSA9IHJlbWl4T3B0aW9ucy5tb2RlO1xuICAgICAgICBpZiAocmVtaXhPcHRpb25zLm5lZ2F0aXZlUHJvbXB0KSByZW1peFBhcmFtcy5uZWdhdGl2ZV9wcm9tcHQgPSByZW1peE9wdGlvbnMubmVnYXRpdmVQcm9tcHQ7XG5cbiAgICAgICAgY29uc3QgdGFzayA9IGF3YWl0IGNsaWVudC52aWRlby5yZW1peChzb3VyY2VWaWRlb0lkLCByZW1peFBhcmFtcyk7XG5cbiAgICAgICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8ud2FpdEZvckNvbXBsZXRpb24odGFzay5pZCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgICAgICAgc3RhdHVzOiAncHJvY2Vzc2luZycsXG4gICAgICAgICAgICBfcmF3OiB0YXNrLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlXG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCB3YWl0Rm9yQ29tcGxldGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignd2FpdEZvckNvbXBsZXRpb24nLCBpdGVtSW5kZXgsIHRydWUpIGFzIGJvb2xlYW47XG4gICAgY29uc3QgZmlyc3RGcmFtZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignZmlyc3RGcmFtZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHkgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2ZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBsYXN0RnJhbWVVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2xhc3RGcmFtZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbGFzdEZyYW1lQmluYXJ5UHJvcGVydHknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2FzcGVjdFJhdGlvJywgaXRlbUluZGV4LCAnMTY6OScpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIHByb21wdCxcbiAgICAgICAgbmVnYXRpdmVfcHJvbXB0OiBvcHRpb25zLm5lZ2F0aXZlUHJvbXB0LFxuICAgICAgICBhc3BlY3RfcmF0aW86IGFzcGVjdFJhdGlvLFxuICAgIH07XG5cbiAgICAvLyBGcmFtZSBjb250cm9sIC0gc3VwcG9ydCBib3RoIFVSTCBhbmQgQmluYXJ5IERhdGFcbiAgICBjb25zdCBmcmFtZXM6IGFueSA9IHt9O1xuXG4gICAgLy8gRmlyc3QgZnJhbWVcbiAgICBpZiAoZmlyc3RGcmFtZVVybCkge1xuICAgICAgICBmcmFtZXMuZmlyc3QgPSB7IHVybDogZmlyc3RGcmFtZVVybCB9O1xuICAgIH0gZWxzZSBpZiAoZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eSk7XG4gICAgICAgICAgICBmcmFtZXMuZmlyc3QgPSB7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEJpbmFyeSBkYXRhIG5vdCBmb3VuZCwgc2tpcFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzdCBmcmFtZVxuICAgIGlmIChsYXN0RnJhbWVVcmwpIHtcbiAgICAgICAgZnJhbWVzLmxhc3QgPSB7IHVybDogbGFzdEZyYW1lVXJsIH07XG4gICAgfSBlbHNlIGlmIChsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eSk7XG4gICAgICAgICAgICBmcmFtZXMubGFzdCA9IHsgYmFzZTY0OiBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpIH07XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gQmluYXJ5IGRhdGEgbm90IGZvdW5kLCBza2lwXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZnJhbWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgfVxuXG4gICAgLy8gVmlkZW8gcmVmZXJlbmNlICh2aWRlb19saXN0KSBmb3IgdmlkZW8tdG8tdmlkZW8gZ2VuZXJhdGlvblxuICAgIGNvbnN0IHZpZGVvUmVmZXJlbmNlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd2aWRlb1JlZmVyZW5jZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBrZWVwT3JpZ2luYWxTb3VuZCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigna2VlcE9yaWdpbmFsU291bmQnLCBpdGVtSW5kZXgsIGZhbHNlKSBhcyBib29sZWFuO1xuICAgIGlmICh2aWRlb1JlZmVyZW5jZVVybCkge1xuICAgICAgICBwYXJhbXMudmlkZW9fbGlzdCA9IFt7XG4gICAgICAgICAgICB2aWRlb191cmw6IHZpZGVvUmVmZXJlbmNlVXJsLFxuICAgICAgICAgICAga2VlcF9vcmlnaW5hbF9zb3VuZDoga2VlcE9yaWdpbmFsU291bmQgPyAneWVzJyA6ICdubycsXG4gICAgICAgIH1dO1xuICAgIH1cblxuICAgIC8vIE1vZGVsLXNwZWNpZmljIG9wdGlvbnNcbiAgICBpZiAobW9kZWwuaW5jbHVkZXMoJ2tsaW5nJykpIHtcbiAgICAgICAgY29uc3Qga2xpbmdPcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdrbGluZ09wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gRHVyYXRpb24gaXMgcmVxdWlyZWQgZm9yIEtsaW5nIC0gZGVmYXVsdCB0byA1IHNlY29uZHNcbiAgICAgICAgcGFyYW1zLmR1cmF0aW9uID0ga2xpbmdPcHRpb25zLmR1cmF0aW9uIHx8ICc1JztcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5tb2RlKSBwYXJhbXMubW9kZSA9IGtsaW5nT3B0aW9ucy5tb2RlO1xuICAgICAgICBpZiAoa2xpbmdPcHRpb25zLmNmZ1NjYWxlKSBwYXJhbXMuY2ZnX3NjYWxlID0ga2xpbmdPcHRpb25zLmNmZ1NjYWxlO1xuXG4gICAgICAgIC8vIFVzZSBzaXplIGZyb20gb3B0aW9ucywgb3IgZGVyaXZlIGZyb20gYXNwZWN0X3JhdGlvICh3b3JrYXJvdW5kIGZvciBTREsgYnVnKVxuICAgICAgICBpZiAoa2xpbmdPcHRpb25zLnNpemUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zaXplID0ga2xpbmdPcHRpb25zLnNpemU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBNYXAgYXNwZWN0X3JhdGlvIHRvIGRlZmF1bHQgc2l6ZSBmb3IgS2xpbmcgQVBJXG4gICAgICAgICAgICBjb25zdCBzaXplTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgICAgICcxNjo5JzogJzE5MjA6MTA4MCcsXG4gICAgICAgICAgICAgICAgJzk6MTYnOiAnMTA4MDoxOTIwJyxcbiAgICAgICAgICAgICAgICAnMToxJzogJzEwODA6MTA4MCcsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcGFyYW1zLnNpemUgPSBzaXplTWFwW2FzcGVjdFJhdGlvXSB8fCAnMTkyMDoxMDgwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlbC5pbmNsdWRlcygndmVvJykpIHtcbiAgICAgICAgY29uc3QgdmVvT3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndmVvT3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAvLyBEdXJhdGlvblNlY29uZHMgaXMgcmVxdWlyZWQgZm9yIFZlbyAtIGZpeGVkIGF0IDggc2Vjb25kc1xuICAgICAgICBwYXJhbXMuZHVyYXRpb24gPSB2ZW9PcHRpb25zLmR1cmF0aW9uIHx8IDg7XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLmdlbmVyYXRlQXVkaW8gIT09IHVuZGVmaW5lZCkgcGFyYW1zLmdlbmVyYXRlX2F1ZGlvID0gdmVvT3B0aW9ucy5nZW5lcmF0ZUF1ZGlvO1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5yZXNvbHV0aW9uKSBwYXJhbXMucmVzb2x1dGlvbiA9IHZlb09wdGlvbnMucmVzb2x1dGlvbjtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMuc2FtcGxlQ291bnQpIHBhcmFtcy5zYW1wbGVfY291bnQgPSB2ZW9PcHRpb25zLnNhbXBsZUNvdW50O1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5wZXJzb25HZW5lcmF0aW9uKSBwYXJhbXMucGVyc29uX2dlbmVyYXRpb24gPSB2ZW9PcHRpb25zLnBlcnNvbkdlbmVyYXRpb247XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnNlZWQpIHBhcmFtcy5zZWVkID0gdmVvT3B0aW9ucy5zZWVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8uY3JlYXRlKHBhcmFtcyk7XG5cbiAgICBpZiAod2FpdEZvckNvbXBsZXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLndhaXRGb3JDb21wbGV0aW9uKHRhc2suaWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogdGFzay5pZCxcbiAgICAgICAgc3RhdHVzOiAncHJvY2Vzc2luZycsXG4gICAgICAgIF9yYXc6IHRhc2ssXG4gICAgfTtcbn1cblxuLy8gQWdlbnQgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnQoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBzeXN0ZW1NZXNzYWdlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzeXN0ZW1NZXNzYWdlJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGJ1aWx0aW5Ub29scyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYnVpbHRpblRvb2xzJywgaXRlbUluZGV4LCBbXSkgYXMgc3RyaW5nW107XG4gICAgY29uc3QgYXV0b0V4ZWN1dGVUb29scyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYXV0b0V4ZWN1dGVUb29scycsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICBtYXhDb250ZXh0VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBtYXhTdGVwcz86IG51bWJlcjtcbiAgICAgICAgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gICAgICAgIHRvb2xzPzogc3RyaW5nO1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICAgICAgaW1hZ2VNb2RlbD86IHN0cmluZztcbiAgICAgICAgdmlkZW9Nb2RlbD86IHN0cmluZztcbiAgICAgICAgY2hlY2twb2ludGVyVHlwZT86ICdub25lJyB8ICdtZW1vcnknIHwgJ3JlZGlzJyB8ICdwb3N0Z3Jlcyc7XG4gICAgICAgIGNoZWNrcG9pbnRlckNvbm5lY3Rpb24/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIHRvb2xzIHJlY29yZFxuICAgIGNvbnN0IHRvb2xzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAvLyBSZWdpc3RlciBidWlsdC1pbiB0b29sc1xuICAgIGlmIChidWlsdGluVG9vbHMuaW5jbHVkZXMoJ3dlYlNlYXJjaCcpKSB7XG4gICAgICAgIHRvb2xzUmVjb3JkWyd3ZWJfc2VhcmNoJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NlYXJjaCB0aGUgd2ViIGZvciBpbmZvcm1hdGlvbi4gVXNlIHRoaXMgdG8gZmluZCBjdXJyZW50IGluZm9ybWF0aW9uLicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdUaGUgc2VhcmNoIHF1ZXJ5JyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsncXVlcnknXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJnczogeyBxdWVyeTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY2xpZW50LnN5cy5zZWFyY2goeyBxdWVyeTogYXJncy5xdWVyeSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHRzOiByZXN1bHRzPy5zbGljZSgwLCA1KSB8fCBbXSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCdvY3InKSkge1xuICAgICAgICB0b29sc1JlY29yZFsnb2NyJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhY3QgdGV4dCBmcm9tIGFuIGltYWdlIFVSTCB1c2luZyBPQ1IuJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdUaGUgaW1hZ2UgVVJMIHRvIGV4dHJhY3QgdGV4dCBmcm9tJyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsndXJsJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHsgdXJsOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5vY3IuZGV0ZWN0KHsgdXJsOiBhcmdzLnVybCB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCdpbWFnZUdlbmVyYXRlJykpIHtcbiAgICAgICAgdG9vbHNSZWNvcmRbJ2dlbmVyYXRlX2ltYWdlJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGFuIGltYWdlIGZyb20gYSB0ZXh0IHByb21wdC4nLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG9mIHRoZSBpbWFnZSB0byBnZW5lcmF0ZScgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3Byb21wdCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7IHByb21wdDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVSZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2UuZ2VuZXJhdGUoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5pbWFnZU1vZGVsIHx8ICdrbGluZy12Mi0xJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2Uud2FpdEZvclJlc3VsdChjcmVhdGVSZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlczogcmVzdWx0LmRhdGE/Lm1hcCgoZDogYW55KSA9PiBkLnVybCB8fCBkLmI2NF9qc29uPy5zdWJzdHJpbmcoMCwgMTAwKSArICcuLi4nKSB8fCBbXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCd2aWRlb0dlbmVyYXRlJykpIHtcbiAgICAgICAgdG9vbHNSZWNvcmRbJ2dlbmVyYXRlX3ZpZGVvJ10gPSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGEgdmlkZW8gZnJvbSBhIHRleHQgcHJvbXB0LicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gb2YgdGhlIHZpZGVvIHRvIGdlbmVyYXRlJyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsncHJvbXB0J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHsgcHJvbXB0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8uY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG9wdGlvbnMudmlkZW9Nb2RlbCB8fCAna2xpbmctdmlkZW8tbzEnLFxuICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogJzUnLFxuICAgICAgICAgICAgICAgICAgICBhc3BlY3RfcmF0aW86ICcxNjo5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8ud2FpdEZvckNvbXBsZXRpb24odGFzay5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVzZXItZGVmaW5lZCB0b29sc1xuICAgIGlmIChvcHRpb25zLnRvb2xzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sc0FycmF5ID0gSlNPTi5wYXJzZShvcHRpb25zLnRvb2xzKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvb2xzQXJyYXkpICYmIHRvb2xzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdG9vbCBvZiB0b29sc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b29sLmZ1bmN0aW9uPy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sc1JlY29yZFt0b29sLmZ1bmN0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0b29sLmZ1bmN0aW9uLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRvb2wuZnVuY3Rpb24ucGFyYW1ldGVycyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoX2FyZ3M6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VyLWRlZmluZWQgdG9vbHMgcmV0dXJuIHBsYWNlaG9sZGVyIGZvciBtYW51YWwgZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogJ1Rvb2wgZXhlY3V0ZWQuIFByb2Nlc3MgdGhlIHJlc3VsdCBpbiBzdWJzZXF1ZW50IHdvcmtmbG93IHN0ZXBzLicgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHRvb2xzIEpTT04gZm9ybWF0JyxcbiAgICAgICAgICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIEFnZW50R3JhcGggaWYgYXV0by1leGVjdXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGFyZSB0b29sc1xuICAgIGNvbnN0IGhhc1Rvb2xzID0gT2JqZWN0LmtleXModG9vbHNSZWNvcmQpLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBJbml0aWFsaXplIENoZWNrcG9pbnRlciBpZiBjb25maWd1cmVkXG4gICAgLy8gTm90ZTogQ2hlY2twb2ludGVyIGludGVncmF0aW9uIHJlcXVpcmVzIEFnZW50R3JhcGggZGlyZWN0bHksIG5vdCBnZW5lcmF0ZVRleHRXaXRoR3JhcGhcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBmdWxsIGltcGxlbWVudGF0aW9uXG4gICAgbGV0IGNoZWNrcG9pbnRlckluZm86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgJiYgb3B0aW9ucy5jaGVja3BvaW50ZXJUeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSAnbWVtb3J5JztcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgPT09ICdyZWRpcycpIHtcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSBgcmVkaXM6JHtvcHRpb25zLmNoZWNrcG9pbnRlckNvbm5lY3Rpb24gfHwgJ25vdC1jb25maWd1cmVkJ31gO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ3Bvc3RncmVzJykge1xuICAgICAgICAgICAgY2hlY2twb2ludGVySW5mbyA9IGBwb3N0Z3Jlczoke29wdGlvbnMuY2hlY2twb2ludGVyQ29ubmVjdGlvbiB8fCAnbm90LWNvbmZpZ3VyZWQnfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVRleHRXaXRoR3JhcGgoe1xuICAgICAgICBjbGllbnQsXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIHN5c3RlbTogc3lzdGVtTWVzc2FnZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIG1heENvbnRleHRUb2tlbnM6IG9wdGlvbnMubWF4Q29udGV4dFRva2VucyB8fCAzMjAwMCxcbiAgICAgICAgbWF4U3RlcHM6IG9wdGlvbnMubWF4U3RlcHMgfHwgMTAsXG4gICAgICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLnRlbXBlcmF0dXJlLFxuICAgICAgICB0b29sczogaGFzVG9vbHMgJiYgYXV0b0V4ZWN1dGVUb29scyA/IHRvb2xzUmVjb3JkIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgIHJlYXNvbmluZzogcmVzdWx0LnJlYXNvbmluZyB8fCAnJyxcbiAgICAgICAgc3RlcHM6IHJlc3VsdC5zdGVwcz8ubWFwKChzdGVwOiBhbnkpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBzdGVwLnR5cGUsXG4gICAgICAgICAgICB0b29sTmFtZTogc3RlcC50b29sTmFtZSxcbiAgICAgICAgICAgIHRvb2xBcmdzOiBzdGVwLnRvb2xBcmdzLFxuICAgICAgICAgICAgdG9vbFJlc3VsdDogc3RlcC50b29sUmVzdWx0LFxuICAgICAgICAgICAgdGV4dDogc3RlcC50ZXh0LFxuICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIHRvb2xzRXhlY3V0ZWQ6IHJlc3VsdC5zdGVwcz8uZmlsdGVyKChzOiBhbnkpID0+IHMudHlwZSA9PT0gJ3Rvb2xfY2FsbCcpLmxlbmd0aCB8fCAwLFxuICAgICAgICB0aHJlYWRJZDogb3B0aW9ucy50aHJlYWRJZCB8fCBudWxsLFxuICAgICAgICBjaGVja3BvaW50ZXI6IGNoZWNrcG9pbnRlckluZm8sXG4gICAgICAgIHVzYWdlOiByZXN1bHQudXNhZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHByb21wdFRva2VuczogcmVzdWx0LnVzYWdlLnByb21wdF90b2tlbnMsXG4gICAgICAgICAgICAgICAgY29tcGxldGlvblRva2VuczogcmVzdWx0LnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiByZXN1bHQudXNhZ2UudG90YWxfdG9rZW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICB9O1xufVxuXG4vLyBBdWRpbyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBdWRpbyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3RleHRUb1NwZWVjaCcpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndGV4dCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB2b2ljZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndm9pY2UnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIHtcbiAgICAgICAgICAgIGVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgICAgICAgc3BlZWRSYXRpbz86IG51bWJlcjtcbiAgICAgICAgICAgIHZvbHVtZT86IG51bWJlcjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudHRzLnN5bnRoZXNpemUoe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHZvaWNlX3R5cGU6IHZvaWNlLFxuICAgICAgICAgICAgZW5jb2Rpbmc6IG9wdGlvbnMuZW5jb2RpbmcgYXMgYW55LFxuICAgICAgICAgICAgc3BlZWRfcmF0aW86IG9wdGlvbnMuc3BlZWRSYXRpbyxcbiAgICAgICAgICAgIHZvbHVtZTogb3B0aW9ucy52b2x1bWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJldHVybiBhdWRpbyBhcyBiaW5hcnkgZGF0YVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW86IHJlc3VsdC5hdWRpbyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiByZXN1bHQuZHVyYXRpb24sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnc3BlZWNoVG9UZXh0Jykge1xuICAgICAgICBjb25zdCBiaW5hcnlQcm9wZXJ0eU5hbWUgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2JpbmFyeVByb3BlcnR5TmFtZScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBhdWRpb0Zvcm1hdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYXVkaW9Gb3JtYXQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgICAgICAvLyBHZXQgYmluYXJ5IGRhdGFcbiAgICAgICAgY29udGV4dC5oZWxwZXJzLmFzc2VydEJpbmFyeURhdGEoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgIGNvbnN0IGJhc2U2NEF1ZGlvID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuYXNyLnRyYW5zY3JpYmUoe1xuICAgICAgICAgICAgYXVkaW86IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGF1ZGlvRm9ybWF0IGFzIGFueSxcbiAgICAgICAgICAgICAgICBkYXRhOiBiYXNlNjRBdWRpbyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCB8fCAnJyxcbiAgICAgICAgICAgIHdvcmRzOiByZXN1bHQud29yZHMgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICBjb250ZXh0LmdldE5vZGUoKSxcbiAgICAgICAgYFVua25vd24gYXVkaW8gb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gLFxuICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgKTtcbn1cblxuLy8gVG9vbHMgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9vbHMoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICd3ZWJTZWFyY2gnKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdxdWVyeScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zOiB7XG4gICAgICAgICAgICBxdWVyeTogc3RyaW5nO1xuICAgICAgICAgICAgbWF4X3Jlc3VsdHM/OiBudW1iZXI7XG4gICAgICAgICAgICBzZWFyY2hfdHlwZT86ICd3ZWInIHwgJ25ld3MnO1xuICAgICAgICAgICAgdGltZV9maWx0ZXI/OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgICAgICBzaXRlX2ZpbHRlcj86IHN0cmluZ1tdO1xuICAgICAgICB9ID0geyBxdWVyeSB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1heFJlc3VsdHMpIHNlYXJjaFBhcmFtcy5tYXhfcmVzdWx0cyA9IG9wdGlvbnMubWF4UmVzdWx0cyBhcyBudW1iZXI7XG4gICAgICAgIGlmIChvcHRpb25zLnNlYXJjaFR5cGUpIHNlYXJjaFBhcmFtcy5zZWFyY2hfdHlwZSA9IG9wdGlvbnMuc2VhcmNoVHlwZSBhcyAnd2ViJyB8ICduZXdzJztcbiAgICAgICAgaWYgKG9wdGlvbnMudGltZUZpbHRlcikgc2VhcmNoUGFyYW1zLnRpbWVfZmlsdGVyID0gb3B0aW9ucy50aW1lRmlsdGVyIGFzICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgaWYgKG9wdGlvbnMuc2l0ZUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3Qgc2l0ZXMgPSAob3B0aW9ucy5zaXRlRmlsdGVyIGFzIHN0cmluZykuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyk7XG4gICAgICAgICAgICBpZiAoc2l0ZXMubGVuZ3RoID4gMCkgc2VhcmNoUGFyYW1zLnNpdGVfZmlsdGVyID0gc2l0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY2xpZW50LnN5cy5zZWFyY2goc2VhcmNoUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzdWx0czogcmVzdWx0cyB8fCBbXSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0cyBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdvY3InKSB7XG4gICAgICAgIGNvbnN0IGltYWdlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdpbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYmluYXJ5UHJvcGVydHlOYW1lID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdiaW5hcnlQcm9wZXJ0eU5hbWUnLCBpdGVtSW5kZXgsICdkYXRhJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGxldCBvY3JQYXJhbXM6IHsgdXJsPzogc3RyaW5nOyBpbWFnZT86IHN0cmluZyB9O1xuXG4gICAgICAgIGlmIChpbWFnZVVybCkge1xuICAgICAgICAgICAgLy8gVXNlIFVSTCBkaXJlY3RseVxuICAgICAgICAgICAgb2NyUGFyYW1zID0geyB1cmw6IGltYWdlVXJsIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBHZXQgZnJvbSBiaW5hcnkgYW5kIGNyZWF0ZSBkYXRhIFVSTFxuICAgICAgICAgICAgY29uc3QgYmluYXJ5RGF0YSA9IGNvbnRleHQuaGVscGVycy5hc3NlcnRCaW5hcnlEYXRhKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYmluYXJ5RGF0YS5taW1lVHlwZSB8fCAnaW1hZ2UvcG5nJztcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgLy8gRm9ybWF0OiBkYXRhOmltYWdlL3BuZztiYXNlNjQsPGJhc2U2NF9kYXRhPlxuICAgICAgICAgICAgb2NyUGFyYW1zID0geyBpbWFnZTogYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YmFzZTY0RGF0YX1gIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQub2NyLmRldGVjdChvY3JQYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCB8fCAnJyxcbiAgICAgICAgICAgIGJsb2NrczogcmVzdWx0LmJsb2NrcyB8fCBbXSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICBgVW5rbm93biB0b29scyBvcGVyYXRpb246ICR7b3BlcmF0aW9ufWAsXG4gICAgICAgIHsgaXRlbUluZGV4IH1cbiAgICApO1xufVxuIl19
|
|
711
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUWluaXVBaS5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvUWluaXVBaS9RaW5pdUFpLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBUXNCO0FBRXRCLHdEQUFtSDtBQUVuSCxvRUFBNEU7QUFDNUUsc0VBQStFO0FBQy9FLHNFQUErRTtBQUMvRSxzRUFBK0U7QUFDL0Usc0VBQStFO0FBQy9FLHNFQUErRTtBQUUvRSxNQUFhLE9BQU87SUFBcEI7UUFDSSxnQkFBVyxHQUF5QjtZQUNoQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLDhEQUE4RDtZQUN4RSxXQUFXLEVBQUUsc0VBQXNFO1lBQ25GLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsVUFBVTthQUNuQjtZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNUO29CQUNJLElBQUksRUFBRSxZQUFZO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDakI7YUFDSjtZQUNELFVBQVUsRUFBRTtnQkFDUixXQUFXO2dCQUNYO29CQUNJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxNQUFNOzRCQUNiLFdBQVcsRUFBRSwyQkFBMkI7eUJBQzNDO3dCQUNEOzRCQUNJLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRSxPQUFPOzRCQUNkLFdBQVcsRUFBRSx5QkFB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dW5jdGlvbnMsXG4gICAgSU5vZGVFeGVjdXRpb25EYXRhLFxuICAgIElOb2RlVHlwZSxcbiAgICBJTm9kZVR5cGVEZXNjcmlwdGlvbixcbiAgICBOb2RlT3BlcmF0aW9uRXJyb3IsXG4gICAgSURhdGFPYmplY3QsXG4gICAgSUJpbmFyeUtleURhdGEsXG59IGZyb20gJ244bi13b3JrZmxvdyc7XG5cbmltcG9ydCB7IFFpbml1QUksIGdlbmVyYXRlVGV4dFdpdGhHcmFwaCwgQVBJRXJyb3IsIE1lbW9yeUNoZWNrcG9pbnRlciwgQ2hlY2twb2ludGVyIH0gZnJvbSAnQGJvd2VucXQvcWluaXUtYWktc2RrJztcblxuaW1wb3J0IHsgY2hhdE9wZXJhdGlvbnMsIGNoYXRGaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9DaGF0RGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgaW1hZ2VPcGVyYXRpb25zLCBpbWFnZUZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0ltYWdlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgdmlkZW9PcGVyYXRpb25zLCB2aWRlb0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL1ZpZGVvRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgYWdlbnRPcGVyYXRpb25zLCBhZ2VudEZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXVkaW9PcGVyYXRpb25zLCBhdWRpb0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0F1ZGlvRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgdG9vbHNPcGVyYXRpb25zLCB0b29sc0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL1Rvb2xzRGVzY3JpcHRpb24nO1xuXG5leHBvcnQgY2xhc3MgUWluaXVBaSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG4gICAgZGVzY3JpcHRpb246IElOb2RlVHlwZURlc2NyaXB0aW9uID0ge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1Fpbml1IEFJJyxcbiAgICAgICAgbmFtZTogJ3Fpbml1QWknLFxuICAgICAgICBpY29uOiAnZmlsZTpxaW5pdS5zdmcnLFxuICAgICAgICBncm91cDogWyd0cmFuc2Zvcm0nXSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgc3VidGl0bGU6ICc9e3skcGFyYW1ldGVyW1wib3BlcmF0aW9uXCJdICsgXCI6IFwiICsgJHBhcmFtZXRlcltcInJlc291cmNlXCJdfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ludGVyYWN0IHdpdGggUWluaXUgQUkgc2VydmljZXMgLSBDaGF0LCBJbWFnZSwgVmlkZW8sIEFnZW50IGFuZCBtb3JlJyxcbiAgICAgICAgZGVmYXVsdHM6IHtcbiAgICAgICAgICAgIG5hbWU6ICdRaW5pdSBBSScsXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0czogWydtYWluJ10sXG4gICAgICAgIG91dHB1dHM6IFsnbWFpbiddLFxuICAgICAgICBjcmVkZW50aWFsczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdxaW5pdUFpQXBpJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIC8vIFJlc291cmNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgbm9EYXRhRXhwcmVzc2lvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdDaGF0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY2hhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGNoYXQgY29tcGxldGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdpbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIG9yIGVkaXQgaW1hZ2VzJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSB2aWRlb3MnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQWdlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdhZ2VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1J1biBBSSBhZ2VudCB3aXRoIHRvb2xzIGFuZCBtZW1vcnknLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQXVkaW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdhdWRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RleHQtdG8tU3BlZWNoIGFuZCBTcGVlY2gtdG8tVGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUb29scycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ3Rvb2xzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnV2ViIFNlYXJjaCwgT0NSIGFuZCBtb3JlJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdjaGF0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBPcGVyYXRpb25zIGFuZCBmaWVsZHNcbiAgICAgICAgICAgIC4uLmNoYXRPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uY2hhdEZpZWxkcyxcbiAgICAgICAgICAgIC4uLmltYWdlT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmltYWdlRmllbGRzLFxuICAgICAgICAgICAgLi4udmlkZW9PcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4udmlkZW9GaWVsZHMsXG4gICAgICAgICAgICAuLi5hZ2VudE9wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5hZ2VudEZpZWxkcyxcbiAgICAgICAgICAgIC4uLmF1ZGlvT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmF1ZGlvRmllbGRzLFxuICAgICAgICAgICAgLi4udG9vbHNPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4udG9vbHNGaWVsZHMsXG4gICAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWN1dGUodGhpczogSUV4ZWN1dGVGdW5jdGlvbnMpOiBQcm9taXNlPElOb2RlRXhlY3V0aW9uRGF0YVtdW10+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldElucHV0RGF0YSgpO1xuICAgICAgICBjb25zdCByZXR1cm5EYXRhOiBJTm9kZUV4ZWN1dGlvbkRhdGFbXSA9IFtdO1xuXG4gICAgICAgIC8vIEdldCBjcmVkZW50aWFsc1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoJ3Fpbml1QWlBcGknKTtcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IChjcmVkZW50aWFscy5iYXNlVXJsIGFzIHN0cmluZykgfHwgJ2h0dHBzOi8vYXBpLnFuYWlnYy5jb20vdjEnO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBRaW5pdUFJKHsgYXBpS2V5LCBiYXNlVXJsIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdyZXNvdXJjZScsIDApIGFzIHN0cmluZztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IElEYXRhT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgLy8gUm91dGUgdG8gYXBwcm9wcmlhdGUgaGFuZGxlclxuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZUNoYXQodGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGJpbmFyeSBvdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VSZXN1bHQgPSBhd2FpdCBoYW5kbGVJbWFnZSh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbjogaW1hZ2VSZXN1bHQuanNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeTogaW1hZ2VSZXN1bHQuYmluYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpcmVkSXRlbTogeyBpdGVtOiBpIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZVZpZGVvKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZ2VudCh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQXVkaW8odGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAndG9vbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZVRvb2xzKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFVua25vd24gcmVzb3VyY2U6ICR7cmVzb3VyY2V9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaXRlbUluZGV4OiBpIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIHBhaXJlZEl0ZW06IHsgaXRlbTogaSB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBUElFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBgUWluaXUgQUkgQVBJIEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBTdGF0dXM6ICR7ZXJyb3Iuc3RhdHVzfSwgQ29kZTogJHsoZXJyb3IgYXMgYW55KS5jb2RlIHx8ICd1bmtub3duJ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbcmV0dXJuRGF0YV07XG4gICAgfVxufVxuXG4vLyBDaGF0IGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNoYXQoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdpbnB1dFR5cGUnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICAgICAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBqc29uTW9kZT86IGJvb2xlYW47XG4gICAgICAgIHRvcFA/OiBudW1iZXI7XG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIG1lc3NhZ2VzXG4gICAgbGV0IG1lc3NhZ2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW107XG5cbiAgICBpZiAoaW5wdXRUeXBlID09PSAnc2ltcGxlJykge1xuICAgICAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Byb21wdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBzeXN0ZW1NZXNzYWdlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzeXN0ZW1NZXNzYWdlJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChzeXN0ZW1NZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3N5c3RlbScsIGNvbnRlbnQ6IHN5c3RlbU1lc3NhZ2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogcHJvbXB0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzRGF0YSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbWVzc2FnZXMnLCBpdGVtSW5kZXgpIGFzIHtcbiAgICAgICAgICAgIG1lc3NhZ2VWYWx1ZXM/OiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+O1xuICAgICAgICB9O1xuICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzRGF0YS5tZXNzYWdlVmFsdWVzIHx8IFtdO1xuICAgIH1cblxuICAgIC8vIENhbGwgQVBJXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jcmVhdGUoe1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzIGFzIGFueSxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUsXG4gICAgICAgIG1heF90b2tlbnM6IG9wdGlvbnMubWF4VG9rZW5zLFxuICAgICAgICB0b3BfcDogb3B0aW9ucy50b3BQLFxuICAgICAgICByZXNwb25zZV9mb3JtYXQ6IG9wdGlvbnMuanNvbk1vZGUgPyB7IHR5cGU6ICdqc29uX29iamVjdCcgfSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGl6ZSBvdXRwdXRcbiAgICBjb25zdCBjaG9pY2UgPSByZXNwb25zZS5jaG9pY2VzPy5bMF07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogY2hvaWNlPy5tZXNzYWdlPy5jb250ZW50IHx8ICcnLFxuICAgICAgICByb2xlOiBjaG9pY2U/Lm1lc3NhZ2U/LnJvbGUgfHwgJ2Fzc2lzdGFudCcsXG4gICAgICAgIGZpbmlzaFJlYXNvbjogY2hvaWNlPy5maW5pc2hfcmVhc29uIHx8IG51bGwsXG4gICAgICAgIHVzYWdlOiByZXNwb25zZS51c2FnZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcHJvbXB0VG9rZW5zOiByZXNwb25zZS51c2FnZS5wcm9tcHRfdG9rZW5zLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25Ub2tlbnM6IHJlc3BvbnNlLnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiByZXNwb25zZS51c2FnZS50b3RhbF90b2tlbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIF9yYXc6IHJlc3BvbnNlIGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgfTtcbn1cblxuLy8gSW1hZ2UgaGFuZGxlciAtIHJldHVybnMgeyBqc29uLCBiaW5hcnkgfSBmb3IgcHJvcGVyIG44biBiaW5hcnkgZGF0YSBoYW5kbGluZ1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlSW1hZ2UoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPHsganNvbjogSURhdGFPYmplY3Q7IGJpbmFyeT86IElCaW5hcnlLZXlEYXRhIH0+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICBuZWdhdGl2ZV9wcm9tcHQ6IG9wdGlvbnMubmVnYXRpdmVQcm9tcHQsXG4gICAgICAgIGFzcGVjdF9yYXRpbzogb3B0aW9ucy5hc3BlY3RSYXRpbyxcbiAgICAgICAgbjogb3B0aW9ucy5uLFxuICAgIH07XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZWZlcmVuY2VJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgaWYgKHJlZmVyZW5jZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLmltYWdlX3VybCA9IHJlZmVyZW5jZVVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5tYXNrKSB7XG4gICAgICAgICAgICBwYXJhbXMubWFzayA9IG9wdGlvbnMubWFzaztcbiAgICAgICAgfVxuICAgICAgICBwYXJhbXMuc3RyZW5ndGggPSBvcHRpb25zLnN0cmVuZ3RoO1xuICAgICAgICBwYXJhbXMuaW1hZ2VfcmVmZXJlbmNlID0gb3B0aW9ucy5pbWFnZVJlZmVyZW5jZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgaW1hZ2VfY29uZmlnXG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VTaXplKSB7XG4gICAgICAgIHBhcmFtcy5pbWFnZV9jb25maWcgPSB7IGltYWdlX3NpemU6IG9wdGlvbnMuaW1hZ2VTaXplIH07XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZWQgaW1hZ2UgcmVmZXJlbmNlcyAoZ2VuZXJhdGUgb25seSlcbiAgICBpZiAob3BlcmF0aW9uID09PSAnZ2VuZXJhdGUnKSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3RJbWFnZVVybHMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N1YmplY3RJbWFnZVVybHMnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHNjZW5lSW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3NjZW5lSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHN0eWxlSW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N0eWxlSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgLy8gU3ViamVjdCByZWZlcmVuY2UgaW1hZ2VzXG4gICAgICAgIGlmIChzdWJqZWN0SW1hZ2VVcmxzKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxzID0gc3ViamVjdEltYWdlVXJscy5zcGxpdCgnLCcpLm1hcCh1ID0+IHUudHJpbSgpKS5maWx0ZXIodSA9PiB1KTtcbiAgICAgICAgICAgIGlmICh1cmxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc3ViamVjdF9pbWFnZV9saXN0ID0gdXJscy5tYXAoaW1hZ2UgPT4gKHsgaW1hZ2UsIGltYWdlX3R5cGU6ICdzdWJqZWN0JyB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY2VuZSByZWZlcmVuY2UgaW1hZ2VcbiAgICAgICAgaWYgKHNjZW5lSW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zY2VuZV9pbWFnZSA9IHsgaW1hZ2U6IHNjZW5lSW1hZ2VVcmwgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0eWxlIHJlZmVyZW5jZSBpbWFnZVxuICAgICAgICBpZiAoc3R5bGVJbWFnZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLnN0eWxlX2ltYWdlID0geyBpbWFnZTogc3R5bGVJbWFnZVVybCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogYW55O1xuICAgIGlmIChvcGVyYXRpb24gPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLmdlbmVyYXRlKHBhcmFtcyk7XG4gICAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLndhaXRGb3JSZXN1bHQoY3JlYXRlUmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbWFnZS5lZGl0KHBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgYmluYXJ5IGRhdGEgZnJvbSBiYXNlNjQgaW1hZ2VzXG4gICAgY29uc3QgYmluYXJ5OiBJQmluYXJ5S2V5RGF0YSA9IHt9O1xuICAgIGNvbnN0IGltYWdlczogYW55W10gPSBbXTtcblxuICAgIGlmIChyZXN1bHQuZGF0YSAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5kYXRhKSkge1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXN1bHQuZGF0YS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSByZXN1bHQuZGF0YVtpZHhdO1xuICAgICAgICAgICAgaW1hZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHVybDogaW1nLnVybCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGltZy5pbmRleCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IGJhc2U2NCB0byBiaW5hcnkgZGF0YSBmb3IgZG93bnN0cmVhbSB1c2FnZVxuICAgICAgICAgICAgaWYgKGltZy5iNjRfanNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGltZy5iNjRfanNvbiwgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmFyeUtleSA9IGlkeCA9PT0gMCA/ICdkYXRhJyA6IGBkYXRhXyR7aWR4fWA7XG4gICAgICAgICAgICAgICAgYmluYXJ5W2JpbmFyeUtleV0gPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMucHJlcGFyZUJpbmFyeURhdGEoXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgYGltYWdlXyR7aWR4fS4ke3Jlc3VsdC5vdXRwdXRfZm9ybWF0IHx8ICdwbmcnfWAsXG4gICAgICAgICAgICAgICAgICAgIGBpbWFnZS8ke3Jlc3VsdC5vdXRwdXRfZm9ybWF0IHx8ICdwbmcnfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAganNvbjoge1xuICAgICAgICAgICAgaW1hZ2VzLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgIHRhc2tJZDogcmVzdWx0LnRhc2tfaWQsXG4gICAgICAgICAgICBpc1N5bmM6IHJlc3VsdC5pc1N5bmMsXG4gICAgICAgICAgICBpbWFnZUNvdW50OiBpbWFnZXMubGVuZ3RoLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0LFxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnk6IE9iamVjdC5rZXlzKGJpbmFyeSkubGVuZ3RoID4gMCA/IGJpbmFyeSA6IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuXG4vLyBWaWRlbyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWaWRlbyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgICAgY29uc3QgdGFza0lkID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd0YXNrSWQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLmdldCh0YXNrSWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQubWVzc2FnZSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdyZW1peCcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlVmlkZW9JZCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc291cmNlVmlkZW9JZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCByZW1peFByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncmVtaXhQcm9tcHQnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb21wbGV0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd3YWl0Rm9yQ29tcGxldGlvbicsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICAgICAgY29uc3QgcmVtaXhPcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZW1peE9wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBjb25zdCByZW1peFBhcmFtczogYW55ID0ge307XG4gICAgICAgIGlmIChyZW1peFByb21wdCkgcmVtaXhQYXJhbXMucHJvbXB0ID0gcmVtaXhQcm9tcHQ7XG4gICAgICAgIGlmIChyZW1peE9wdGlvbnMuZHVyYXRpb24pIHJlbWl4UGFyYW1zLmR1cmF0aW9uID0gcmVtaXhPcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBpZiAocmVtaXhPcHRpb25zLm1vZGUpIHJlbWl4UGFyYW1zLm1vZGUgPSByZW1peE9wdGlvbnMubW9kZTtcbiAgICAgICAgaWYgKHJlbWl4T3B0aW9ucy5uZWdhdGl2ZVByb21wdCkgcmVtaXhQYXJhbXMubmVnYXRpdmVfcHJvbXB0ID0gcmVtaXhPcHRpb25zLm5lZ2F0aXZlUHJvbXB0O1xuXG4gICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8ucmVtaXgoc291cmNlVmlkZW9JZCwgcmVtaXhQYXJhbXMpO1xuXG4gICAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLndhaXRGb3JDb21wbGV0aW9uKHRhc2suaWQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGFzay5pZCxcbiAgICAgICAgICAgIHN0YXR1czogJ3Byb2Nlc3NpbmcnLFxuICAgICAgICAgICAgX3JhdzogdGFzayxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZVxuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IGZpcnN0RnJhbWVVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2ZpcnN0RnJhbWVVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbGFzdEZyYW1lVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdsYXN0RnJhbWVVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbGFzdEZyYW1lQmluYXJ5UHJvcGVydHkgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2xhc3RGcmFtZUJpbmFyeVByb3BlcnR5JywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdhc3BlY3RSYXRpbycsIGl0ZW1JbmRleCwgJzE2OjknKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIG5lZ2F0aXZlX3Byb21wdDogb3B0aW9ucy5uZWdhdGl2ZVByb21wdCxcbiAgICAgICAgYXNwZWN0X3JhdGlvOiBhc3BlY3RSYXRpbyxcbiAgICB9O1xuXG4gICAgLy8gRnJhbWUgY29udHJvbCAtIHN1cHBvcnQgYm90aCBVUkwgYW5kIEJpbmFyeSBEYXRhXG4gICAgY29uc3QgZnJhbWVzOiBhbnkgPSB7fTtcblxuICAgIC8vIEZpcnN0IGZyYW1lXG4gICAgaWYgKGZpcnN0RnJhbWVVcmwpIHtcbiAgICAgICAgZnJhbWVzLmZpcnN0ID0geyB1cmw6IGZpcnN0RnJhbWVVcmwgfTtcbiAgICB9IGVsc2UgaWYgKGZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHkpO1xuICAgICAgICAgICAgZnJhbWVzLmZpcnN0ID0geyBiYXNlNjQ6IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JykgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBCaW5hcnkgZGF0YSBub3QgZm91bmQsIHNraXBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhc3QgZnJhbWVcbiAgICBpZiAobGFzdEZyYW1lVXJsKSB7XG4gICAgICAgIGZyYW1lcy5sYXN0ID0geyB1cmw6IGxhc3RGcmFtZVVybCB9O1xuICAgIH0gZWxzZSBpZiAobGFzdEZyYW1lQmluYXJ5UHJvcGVydHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgbGFzdEZyYW1lQmluYXJ5UHJvcGVydHkpO1xuICAgICAgICAgICAgZnJhbWVzLmxhc3QgPSB7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEJpbmFyeSBkYXRhIG5vdCBmb3VuZCwgc2tpcFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYW1lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIH1cblxuICAgIC8vIFZpZGVvIHJlZmVyZW5jZSAodmlkZW9fbGlzdCkgZm9yIHZpZGVvLXRvLXZpZGVvIGdlbmVyYXRpb25cbiAgICBjb25zdCB2aWRlb1JlZmVyZW5jZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndmlkZW9SZWZlcmVuY2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qga2VlcE9yaWdpbmFsU291bmQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2tlZXBPcmlnaW5hbFNvdW5kJywgaXRlbUluZGV4LCBmYWxzZSkgYXMgYm9vbGVhbjtcbiAgICBpZiAodmlkZW9SZWZlcmVuY2VVcmwpIHtcbiAgICAgICAgcGFyYW1zLnZpZGVvX2xpc3QgPSBbe1xuICAgICAgICAgICAgdmlkZW9fdXJsOiB2aWRlb1JlZmVyZW5jZVVybCxcbiAgICAgICAgICAgIGtlZXBfb3JpZ2luYWxfc291bmQ6IGtlZXBPcmlnaW5hbFNvdW5kID8gJ3llcycgOiAnbm8nLFxuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICAvLyBNb2RlbC1zcGVjaWZpYyBvcHRpb25zXG4gICAgaWYgKG1vZGVsLmluY2x1ZGVzKCdrbGluZycpKSB7XG4gICAgICAgIGNvbnN0IGtsaW5nT3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigna2xpbmdPcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIC8vIER1cmF0aW9uIGlzIHJlcXVpcmVkIGZvciBLbGluZyAtIGRlZmF1bHQgdG8gNSBzZWNvbmRzXG4gICAgICAgIHBhcmFtcy5kdXJhdGlvbiA9IGtsaW5nT3B0aW9ucy5kdXJhdGlvbiB8fCAnNSc7XG4gICAgICAgIGlmIChrbGluZ09wdGlvbnMubW9kZSkgcGFyYW1zLm1vZGUgPSBrbGluZ09wdGlvbnMubW9kZTtcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5jZmdTY2FsZSkgcGFyYW1zLmNmZ19zY2FsZSA9IGtsaW5nT3B0aW9ucy5jZmdTY2FsZTtcblxuICAgICAgICAvLyBVc2Ugc2l6ZSBmcm9tIG9wdGlvbnMsIG9yIGRlcml2ZSBmcm9tIGFzcGVjdF9yYXRpbyAod29ya2Fyb3VuZCBmb3IgU0RLIGJ1ZylcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5zaXplKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2l6ZSA9IGtsaW5nT3B0aW9ucy5zaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTWFwIGFzcGVjdF9yYXRpbyB0byBkZWZhdWx0IHNpemUgZm9yIEtsaW5nIEFQSVxuICAgICAgICAgICAgY29uc3Qgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICAgICAnMTY6OSc6ICcxOTIwOjEwODAnLFxuICAgICAgICAgICAgICAgICc5OjE2JzogJzEwODA6MTkyMCcsXG4gICAgICAgICAgICAgICAgJzE6MSc6ICcxMDgwOjEwODAnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBhcmFtcy5zaXplID0gc2l6ZU1hcFthc3BlY3RSYXRpb10gfHwgJzE5MjA6MTA4MCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZWwuaW5jbHVkZXMoJ3ZlbycpKSB7XG4gICAgICAgIGNvbnN0IHZlb09wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Zlb09wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gRHVyYXRpb25TZWNvbmRzIGlzIHJlcXVpcmVkIGZvciBWZW8gLSBmaXhlZCBhdCA4IHNlY29uZHNcbiAgICAgICAgcGFyYW1zLmR1cmF0aW9uID0gdmVvT3B0aW9ucy5kdXJhdGlvbiB8fCA4O1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5nZW5lcmF0ZUF1ZGlvICE9PSB1bmRlZmluZWQpIHBhcmFtcy5nZW5lcmF0ZV9hdWRpbyA9IHZlb09wdGlvbnMuZ2VuZXJhdGVBdWRpbztcbiAgICAgICAgaWYgKHZlb09wdGlvbnMucmVzb2x1dGlvbikgcGFyYW1zLnJlc29sdXRpb24gPSB2ZW9PcHRpb25zLnJlc29sdXRpb247XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnNhbXBsZUNvdW50KSBwYXJhbXMuc2FtcGxlX2NvdW50ID0gdmVvT3B0aW9ucy5zYW1wbGVDb3VudDtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMucGVyc29uR2VuZXJhdGlvbikgcGFyYW1zLnBlcnNvbl9nZW5lcmF0aW9uID0gdmVvT3B0aW9ucy5wZXJzb25HZW5lcmF0aW9uO1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5zZWVkKSBwYXJhbXMuc2VlZCA9IHZlb09wdGlvbnMuc2VlZDtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LnZpZGVvLmNyZWF0ZShwYXJhbXMpO1xuXG4gICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC52aWRlby53YWl0Rm9yQ29tcGxldGlvbih0YXNrLmlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgIHN0YXR1czogJ3Byb2Nlc3NpbmcnLFxuICAgICAgICBfcmF3OiB0YXNrLFxuICAgIH07XG59XG5cbi8vIEFnZW50IGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFnZW50KFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgc3lzdGVtTWVzc2FnZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3lzdGVtTWVzc2FnZScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBidWlsdGluVG9vbHMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2J1aWx0aW5Ub29scycsIGl0ZW1JbmRleCwgW10pIGFzIHN0cmluZ1tdO1xuICAgIGNvbnN0IGF1dG9FeGVjdXRlVG9vbHMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2F1dG9FeGVjdXRlVG9vbHMnLCBpdGVtSW5kZXgsIHRydWUpIGFzIGJvb2xlYW47XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIHtcbiAgICAgICAgbWF4Q29udGV4dFRva2Vucz86IG51bWJlcjtcbiAgICAgICAgbWF4U3RlcHM/OiBudW1iZXI7XG4gICAgICAgIHRocmVhZElkPzogc3RyaW5nO1xuICAgICAgICB0b29scz86IHN0cmluZztcbiAgICAgICAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG4gICAgICAgIGltYWdlTW9kZWw/OiBzdHJpbmc7XG4gICAgICAgIHZpZGVvTW9kZWw/OiBzdHJpbmc7XG4gICAgICAgIGNoZWNrcG9pbnRlclR5cGU/OiAnbm9uZScgfCAnbWVtb3J5JyB8ICdyZWRpcycgfCAncG9zdGdyZXMnO1xuICAgICAgICBjaGVja3BvaW50ZXJDb25uZWN0aW9uPzogc3RyaW5nO1xuICAgIH07XG5cbiAgICAvLyBCdWlsZCB0b29scyByZWNvcmRcbiAgICBjb25zdCB0b29sc1JlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgLy8gUmVnaXN0ZXIgYnVpbHQtaW4gdG9vbHNcbiAgICBpZiAoYnVpbHRpblRvb2xzLmluY2x1ZGVzKCd3ZWJTZWFyY2gnKSkge1xuICAgICAgICB0b29sc1JlY29yZFsnd2ViX3NlYXJjaCddID0ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTZWFyY2ggdGhlIHdlYiBmb3IgaW5mb3JtYXRpb24uIFVzZSB0aGlzIHRvIGZpbmQgY3VycmVudCBpbmZvcm1hdGlvbi4nLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnVGhlIHNlYXJjaCBxdWVyeScgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3F1ZXJ5J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHsgcXVlcnk6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNsaWVudC5zeXMuc2VhcmNoKHsgcXVlcnk6IGFyZ3MucXVlcnkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0czogcmVzdWx0cz8uc2xpY2UoMCwgNSkgfHwgW10gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ1aWx0aW5Ub29scy5pbmNsdWRlcygnb2NyJykpIHtcbiAgICAgICAgdG9vbHNSZWNvcmRbJ29jciddID0ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFeHRyYWN0IHRleHQgZnJvbSBhbiBpbWFnZSBVUkwgdXNpbmcgT0NSLicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB1cmw6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnVGhlIGltYWdlIFVSTCB0byBleHRyYWN0IHRleHQgZnJvbScgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3VybCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7IHVybDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQub2NyLmRldGVjdCh7IHVybDogYXJncy51cmwgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ1aWx0aW5Ub29scy5pbmNsdWRlcygnaW1hZ2VHZW5lcmF0ZScpKSB7XG4gICAgICAgIHRvb2xzUmVjb3JkWydnZW5lcmF0ZV9pbWFnZSddID0ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBhbiBpbWFnZSBmcm9tIGEgdGV4dCBwcm9tcHQuJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHByb21wdDogeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiBvZiB0aGUgaW1hZ2UgdG8gZ2VuZXJhdGUnIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogWydwcm9tcHQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJnczogeyBwcm9tcHQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlUmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLmdlbmVyYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG9wdGlvbnMuaW1hZ2VNb2RlbCB8fCAna2xpbmctdjItMScsXG4gICAgICAgICAgICAgICAgICAgIHByb21wdDogYXJncy5wcm9tcHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLndhaXRGb3JSZXN1bHQoY3JlYXRlUmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IHJlc3VsdC5kYXRhPy5tYXAoKGQ6IGFueSkgPT4gZC51cmwgfHwgZC5iNjRfanNvbj8uc3Vic3RyaW5nKDAsIDEwMCkgKyAnLi4uJykgfHwgW10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ1aWx0aW5Ub29scy5pbmNsdWRlcygndmlkZW9HZW5lcmF0ZScpKSB7XG4gICAgICAgIHRvb2xzUmVjb3JkWydnZW5lcmF0ZV92aWRlbyddID0ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBhIHZpZGVvIGZyb20gYSB0ZXh0IHByb21wdC4nLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG9mIHRoZSB2aWRlbyB0byBnZW5lcmF0ZScgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3Byb21wdCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7IHByb21wdDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LnZpZGVvLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLnZpZGVvTW9kZWwgfHwgJ2tsaW5nLXZpZGVvLW8xJyxcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICc1JyxcbiAgICAgICAgICAgICAgICAgICAgYXNwZWN0X3JhdGlvOiAnMTY6OScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLndhaXRGb3JDb21wbGV0aW9uKHRhc2suaWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9zOiByZXN1bHQudGFza19yZXN1bHQ/LnZpZGVvcyB8fCBbXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1c2VyLWRlZmluZWQgdG9vbHNcbiAgICBpZiAob3B0aW9ucy50b29scykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdG9vbHNBcnJheSA9IEpTT04ucGFyc2Uob3B0aW9ucy50b29scyk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0b29sc0FycmF5KSAmJiB0b29sc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRvb2wgb2YgdG9vbHNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vbC5mdW5jdGlvbj8ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHNSZWNvcmRbdG9vbC5mdW5jdGlvbi5uYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdG9vbC5mdW5jdGlvbi5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0b29sLmZ1bmN0aW9uLnBhcmFtZXRlcnMgfHwge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKF9hcmdzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlci1kZWZpbmVkIHRvb2xzIHJldHVybiBwbGFjZWhvbGRlciBmb3IgbWFudWFsIGV4ZWN1dGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByZXN1bHQ6ICdUb29sIGV4ZWN1dGVkLiBQcm9jZXNzIHRoZSByZXN1bHQgaW4gc3Vic2VxdWVudCB3b3JrZmxvdyBzdGVwcy4nIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICBjb250ZXh0LmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAnSW52YWxpZCB0b29scyBKU09OIGZvcm1hdCcsXG4gICAgICAgICAgICAgICAgeyBpdGVtSW5kZXggfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgd2l0aCBBZ2VudEdyYXBoIGlmIGF1dG8tZXhlY3V0ZSBpcyBlbmFibGVkIGFuZCB0aGVyZSBhcmUgdG9vbHNcbiAgICBjb25zdCBoYXNUb29scyA9IE9iamVjdC5rZXlzKHRvb2xzUmVjb3JkKS5sZW5ndGggPiAwO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBDaGVja3BvaW50ZXIgaWYgY29uZmlndXJlZFxuICAgIGxldCBjaGVja3BvaW50ZXI6IENoZWNrcG9pbnRlciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY2hlY2twb2ludGVySW5mbzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAob3B0aW9ucy5jaGVja3BvaW50ZXJUeXBlICYmIG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgPT09ICdtZW1vcnknKSB7XG4gICAgICAgICAgICAvLyBVc2UgTWVtb3J5Q2hlY2twb2ludGVyIGZvciBpbi1tZW1vcnkgc3RhdGUgcGVyc2lzdGVuY2VcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlciA9IG5ldyBNZW1vcnlDaGVja3BvaW50ZXIoeyBtYXhJdGVtczogMTAwIH0pO1xuICAgICAgICAgICAgY2hlY2twb2ludGVySW5mbyA9ICdtZW1vcnknO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ3JlZGlzJykge1xuICAgICAgICAgICAgLy8gUmVkaXMgcmVxdWlyZXMgaW9yZWRpcyBjbGllbnQgLSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAvLyBVc2VycyBuZWVkIHRvIHByb3ZpZGUgY29ubmVjdGlvbiBzdHJpbmdcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSBgcmVkaXM6JHtvcHRpb25zLmNoZWNrcG9pbnRlckNvbm5lY3Rpb24gfHwgJ25vdC1jb25maWd1cmVkJ31gO1xuICAgICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IFJlZGlzQ2hlY2twb2ludGVyIHdoZW4gaW9yZWRpcyBpcyBhdmFpbGFibGVcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgPT09ICdwb3N0Z3JlcycpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgcmVxdWlyZXMgcGcgcG9vbCAtIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSBgcG9zdGdyZXM6JHtvcHRpb25zLmNoZWNrcG9pbnRlckNvbm5lY3Rpb24gfHwgJ25vdC1jb25maWd1cmVkJ31gO1xuICAgICAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IFBvc3RncmVzQ2hlY2twb2ludGVyIHdoZW4gcGcgaXMgYXZhaWxhYmxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aHJlYWRJZCBpZiBub3QgcHJvdmlkZWQgYnV0IGNoZWNrcG9pbnRlciBpcyBlbmFibGVkXG4gICAgY29uc3QgdGhyZWFkSWQgPSBvcHRpb25zLnRocmVhZElkIHx8IChjaGVja3BvaW50ZXIgPyBgdGhyZWFkLSR7RGF0ZS5ub3coKX1gIDogdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlVGV4dFdpdGhHcmFwaCh7XG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIHByb21wdCxcbiAgICAgICAgc3lzdGVtOiBzeXN0ZW1NZXNzYWdlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4Q29udGV4dFRva2Vuczogb3B0aW9ucy5tYXhDb250ZXh0VG9rZW5zIHx8IDMyMDAwLFxuICAgICAgICBtYXhTdGVwczogb3B0aW9ucy5tYXhTdGVwcyB8fCAxMCxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUsXG4gICAgICAgIHRvb2xzOiBoYXNUb29scyAmJiBhdXRvRXhlY3V0ZVRvb2xzID8gdG9vbHNSZWNvcmQgOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIENoZWNrcG9pbnRlciBpbnRlZ3JhdGlvbiAoU0RLIHYwLjE0LjArKVxuICAgICAgICBjaGVja3BvaW50ZXIsXG4gICAgICAgIHRocmVhZElkLFxuICAgICAgICByZXN1bWVGcm9tQ2hlY2twb2ludDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IHJlc3VsdC50ZXh0IHx8ICcnLFxuICAgICAgICByZWFzb25pbmc6IHJlc3VsdC5yZWFzb25pbmcgfHwgJycsXG4gICAgICAgIHN0ZXBzOiByZXN1bHQuc3RlcHM/Lm1hcCgoc3RlcDogYW55KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogc3RlcC50eXBlLFxuICAgICAgICAgICAgdG9vbE5hbWU6IHN0ZXAudG9vbE5hbWUsXG4gICAgICAgICAgICB0b29sQXJnczogc3RlcC50b29sQXJncyxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IHN0ZXAudG9vbFJlc3VsdCxcbiAgICAgICAgICAgIHRleHQ6IHN0ZXAudGV4dCxcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB0b29sc0V4ZWN1dGVkOiByZXN1bHQuc3RlcHM/LmZpbHRlcigoczogYW55KSA9PiBzLnR5cGUgPT09ICd0b29sX2NhbGwnKS5sZW5ndGggfHwgMCxcbiAgICAgICAgdGhyZWFkSWQ6IHRocmVhZElkIHx8IG51bGwsXG4gICAgICAgIGNoZWNrcG9pbnRlcjogY2hlY2twb2ludGVySW5mbyxcbiAgICAgICAgdXNhZ2U6IHJlc3VsdC51c2FnZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcHJvbXB0VG9rZW5zOiByZXN1bHQudXNhZ2UucHJvbXB0X3Rva2VucyxcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uVG9rZW5zOiByZXN1bHQudXNhZ2UuY29tcGxldGlvbl90b2tlbnMsXG4gICAgICAgICAgICAgICAgdG90YWxUb2tlbnM6IHJlc3VsdC51c2FnZS50b3RhbF90b2tlbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgIH07XG59XG5cbi8vIEF1ZGlvIGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUF1ZGlvKFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAndGV4dFRvU3BlZWNoJykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd0ZXh0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHZvaWNlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd2b2ljZScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICAgICAgZW5jb2Rpbmc/OiBzdHJpbmc7XG4gICAgICAgICAgICBzcGVlZFJhdGlvPzogbnVtYmVyO1xuICAgICAgICAgICAgdm9sdW1lPzogbnVtYmVyO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC50dHMuc3ludGhlc2l6ZSh7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgdm9pY2VfdHlwZTogdm9pY2UsXG4gICAgICAgICAgICBlbmNvZGluZzogb3B0aW9ucy5lbmNvZGluZyBhcyBhbnksXG4gICAgICAgICAgICBzcGVlZF9yYXRpbzogb3B0aW9ucy5zcGVlZFJhdGlvLFxuICAgICAgICAgICAgdm9sdW1lOiBvcHRpb25zLnZvbHVtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmV0dXJuIGF1ZGlvIGFzIGJpbmFyeSBkYXRhXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdWRpbzogcmVzdWx0LmF1ZGlvLFxuICAgICAgICAgICAgZHVyYXRpb246IHJlc3VsdC5kdXJhdGlvbixcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdzcGVlY2hUb1RleHQnKSB7XG4gICAgICAgIGNvbnN0IGJpbmFyeVByb3BlcnR5TmFtZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYmluYXJ5UHJvcGVydHlOYW1lJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGF1ZGlvRm9ybWF0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdhdWRpb0Zvcm1hdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgICAgIC8vIEdldCBiaW5hcnkgZGF0YVxuICAgICAgICBjb250ZXh0LmhlbHBlcnMuYXNzZXJ0QmluYXJ5RGF0YShpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgY29uc3QgYmFzZTY0QXVkaW8gPSBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5hc3IudHJhbnNjcmliZSh7XG4gICAgICAgICAgICBhdWRpbzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogYXVkaW9Gb3JtYXQgYXMgYW55LFxuICAgICAgICAgICAgICAgIGRhdGE6IGJhc2U2NEF1ZGlvLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHJlc3VsdC50ZXh0IHx8ICcnLFxuICAgICAgICAgICAgd29yZHM6IHJlc3VsdC53b3JkcyB8fCBbXSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICBgVW5rbm93biBhdWRpbyBvcGVyYXRpb246ICR7b3BlcmF0aW9ufWAsXG4gICAgICAgIHsgaXRlbUluZGV4IH1cbiAgICApO1xufVxuXG4vLyBUb29scyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVUb29scyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3dlYlNlYXJjaCcpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3F1ZXJ5JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBjb25zdCBzZWFyY2hQYXJhbXM6IHtcbiAgICAgICAgICAgIHF1ZXJ5OiBzdHJpbmc7XG4gICAgICAgICAgICBtYXhfcmVzdWx0cz86IG51bWJlcjtcbiAgICAgICAgICAgIHNlYXJjaF90eXBlPzogJ3dlYicgfCAnbmV3cyc7XG4gICAgICAgICAgICB0aW1lX2ZpbHRlcj86ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHNpdGVfZmlsdGVyPzogc3RyaW5nW107XG4gICAgICAgIH0gPSB7IHF1ZXJ5IH07XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4UmVzdWx0cykgc2VhcmNoUGFyYW1zLm1heF9yZXN1bHRzID0gb3B0aW9ucy5tYXhSZXN1bHRzIGFzIG51bWJlcjtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2VhcmNoVHlwZSkgc2VhcmNoUGFyYW1zLnNlYXJjaF90eXBlID0gb3B0aW9ucy5zZWFyY2hUeXBlIGFzICd3ZWInIHwgJ25ld3MnO1xuICAgICAgICBpZiAob3B0aW9ucy50aW1lRmlsdGVyKSBzZWFyY2hQYXJhbXMudGltZV9maWx0ZXIgPSBvcHRpb25zLnRpbWVGaWx0ZXIgYXMgJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInO1xuICAgICAgICBpZiAob3B0aW9ucy5zaXRlRmlsdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzaXRlcyA9IChvcHRpb25zLnNpdGVGaWx0ZXIgYXMgc3RyaW5nKS5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKS5maWx0ZXIocyA9PiBzKTtcbiAgICAgICAgICAgIGlmIChzaXRlcy5sZW5ndGggPiAwKSBzZWFyY2hQYXJhbXMuc2l0ZV9maWx0ZXIgPSBzaXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjbGllbnQuc3lzLnNlYXJjaChzZWFyY2hQYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXN1bHRzOiByZXN1bHRzIHx8IFtdLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICBfcmF3OiByZXN1bHRzIGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ29jcicpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2ltYWdlVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBiaW5hcnlQcm9wZXJ0eU5hbWUgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2JpbmFyeVByb3BlcnR5TmFtZScsIGl0ZW1JbmRleCwgJ2RhdGEnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgbGV0IG9jclBhcmFtczogeyB1cmw/OiBzdHJpbmc7IGltYWdlPzogc3RyaW5nIH07XG5cbiAgICAgICAgaWYgKGltYWdlVXJsKSB7XG4gICAgICAgICAgICAvLyBVc2UgVVJMIGRpcmVjdGx5XG4gICAgICAgICAgICBvY3JQYXJhbXMgPSB7IHVybDogaW1hZ2VVcmwgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEdldCBmcm9tIGJpbmFyeSBhbmQgY3JlYXRlIGRhdGEgVVJMXG4gICAgICAgICAgICBjb25zdCBiaW5hcnlEYXRhID0gY29udGV4dC5oZWxwZXJzLmFzc2VydEJpbmFyeURhdGEoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgbWltZVR5cGUgPSBiaW5hcnlEYXRhLm1pbWVUeXBlIHx8ICdpbWFnZS9wbmcnO1xuICAgICAgICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgICAgICAvLyBGb3JtYXQ6IGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCw8YmFzZTY0X2RhdGE+XG4gICAgICAgICAgICBvY3JQYXJhbXMgPSB7IGltYWdlOiBgZGF0YToke21pbWVUeXBlfTtiYXNlNjQsJHtiYXNlNjREYXRhfWAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5vY3IuZGV0ZWN0KG9jclBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHJlc3VsdC50ZXh0IHx8ICcnLFxuICAgICAgICAgICAgYmxvY2tzOiByZXN1bHQuYmxvY2tzIHx8IFtdLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgY29udGV4dC5nZXROb2RlKCksXG4gICAgICAgIGBVbmtub3duIHRvb2xzIG9wZXJhdGlvbjogJHtvcGVyYXRpb259YCxcbiAgICAgICAgeyBpdGVtSW5kZXggfVxuICAgICk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-qiniu-ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "n8n nodes for Qiniu AI SDK - Chat, Image, Video, Audio, OCR, Agent and more",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
]
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@bowenqt/qiniu-ai-sdk": "^0.
|
|
42
|
+
"@bowenqt/qiniu-ai-sdk": "^0.14.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "^20.0.0",
|