n8n-nodes-memory 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -0
- package/dist/nodes/Memory/Memory.node.js +8 -7
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# n8n-nodes-memory
|
|
2
|
+
|
|
3
|
+
Custom memory node for n8n AI Agent with external API support.
|
|
4
|
+
|
|
5
|
+
## The Power: Memory as Workflows
|
|
6
|
+
|
|
7
|
+
Traditional memory nodes are passive storage. This node transforms memory into **event-driven workflows** - each memory operation (get, add, clear) can trigger complete n8n workflows with access to 400+ integrations.
|
|
8
|
+
|
|
9
|
+
### On GET (before AI responds)
|
|
10
|
+
- Fetch context from vector databases (RAG)
|
|
11
|
+
- Load user preferences from CRM
|
|
12
|
+
- Inject real-time data (weather, stocks, news)
|
|
13
|
+
- Summarize old conversations automatically
|
|
14
|
+
- Generate dynamic context with another AI
|
|
15
|
+
- Apply predictive loading for likely questions
|
|
16
|
+
|
|
17
|
+
### On ADD (after each message)
|
|
18
|
+
- Analyze sentiment in real-time
|
|
19
|
+
- Extract entities and intents
|
|
20
|
+
- Update user profiles and CRM records
|
|
21
|
+
- Create tasks/tickets automatically
|
|
22
|
+
- Trigger notifications and alerts
|
|
23
|
+
- Route to different AI agents based on intent
|
|
24
|
+
- Build knowledge graphs from conversations
|
|
25
|
+
- Feed training data pipelines
|
|
26
|
+
|
|
27
|
+
### On CLEAR (end of session)
|
|
28
|
+
- Generate conversation summaries
|
|
29
|
+
- Extract action items
|
|
30
|
+
- Send follow-up emails
|
|
31
|
+
- Archive to compliance systems
|
|
32
|
+
- Update customer journey stages
|
|
33
|
+
|
|
34
|
+
## Use Cases
|
|
35
|
+
|
|
36
|
+
**Self-Evolving AI** - Behavior rules that adapt based on conversation patterns. Detect frustration, switch to empathetic mode.
|
|
37
|
+
|
|
38
|
+
**Multi-Agent Orchestration** - Route messages to specialized agents. One memory feeding an agent swarm.
|
|
39
|
+
|
|
40
|
+
**Memory as API Gateway** - Natural language interface to any system. "Check my order status" triggers lookup workflows.
|
|
41
|
+
|
|
42
|
+
**Semantic Compression** - Compress long exchanges into dense summaries, expand on retrieval. Effectively infinite context window.
|
|
43
|
+
|
|
44
|
+
**Cross-Platform Identity** - Sync across WhatsApp, Telegram, Web. Same AI remembers you everywhere.
|
|
45
|
+
|
|
46
|
+
**Conversation Branching** - Create save points, fork conversations, explore different paths. Git for chat.
|
|
47
|
+
|
|
48
|
+
**Regulatory Firewall** - Check compliance before storing, redact sensitive info based on user role. GDPR/LGPD by design.
|
|
49
|
+
|
|
50
|
+
**Continuous Learning** - Route high-quality exchanges to training datasets. Self-improving system.
|
|
51
|
+
|
|
52
|
+
**Social Graph Memory** - Map relationships mentioned in conversations. Build knowledge graphs of user's world.
|
|
53
|
+
|
|
54
|
+
**Emotional State Machine** - Track emotional journey, maintain consistent AI "mood" across sessions.
|
|
55
|
+
|
|
56
|
+
## Installation
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm install n8n-nodes-memory
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Then restart n8n.
|
|
63
|
+
|
|
64
|
+
## Setup
|
|
65
|
+
|
|
66
|
+
1. **Create a Memory API workflow** - A webhook that handles `get`, `add`, and `clear` actions
|
|
67
|
+
2. **Set up your storage** - PostgreSQL, Redis, or any backend
|
|
68
|
+
3. **Connect to AI Agent** - Link the Memory API node to your agent's memory input
|
|
69
|
+
|
|
70
|
+
## API Contract
|
|
71
|
+
|
|
72
|
+
Your webhook must handle POST requests with:
|
|
73
|
+
|
|
74
|
+
| Action | Purpose | Returns |
|
|
75
|
+
|--------|---------|---------|
|
|
76
|
+
| `get` | Retrieve messages for session | `{ messages: [{ type, content }, ...] }` |
|
|
77
|
+
| `add` | Store a message | `{ success: true }` |
|
|
78
|
+
| `clear` | Clear session history | `{ success: true }` |
|
|
79
|
+
|
|
80
|
+
Message types: `human` or `ai`
|
|
81
|
+
|
|
82
|
+
## Parameters
|
|
83
|
+
|
|
84
|
+
| Parameter | Description |
|
|
85
|
+
|-----------|-------------|
|
|
86
|
+
| API URL | Your memory webhook URL |
|
|
87
|
+
| Session ID | Unique conversation identifier |
|
|
88
|
+
| API Key | Optional Bearer token |
|
|
89
|
+
| Context Window Length | Messages to include (default: 10) |
|
|
90
|
+
|
|
91
|
+
## How It Works
|
|
92
|
+
|
|
93
|
+
Implements LangChain's `BaseListChatMessageHistory` with `BufferWindowMemory`. The AI Agent calls your workflows automatically during conversation.
|
|
94
|
+
|
|
95
|
+
## License
|
|
96
|
+
|
|
97
|
+
MIT
|
|
98
|
+
|
|
99
|
+
## Author
|
|
100
|
+
|
|
101
|
+
[Filipe Labs](https://github.com/filipexyz)
|
|
@@ -24,13 +24,14 @@ class ApiChatHistory extends chat_history_1.BaseListChatMessageHistory {
|
|
|
24
24
|
async getMessages() {
|
|
25
25
|
console.log('[ApiChatHistory] getMessages called for session:', this.sessionId);
|
|
26
26
|
try {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.log('[ApiChatHistory] Fetching from:', url.toString());
|
|
31
|
-
const response = await fetch(url.toString(), {
|
|
32
|
-
method: 'GET',
|
|
27
|
+
console.log('[ApiChatHistory] Fetching from:', this.apiUrl);
|
|
28
|
+
const response = await fetch(this.apiUrl, {
|
|
29
|
+
method: 'POST',
|
|
33
30
|
headers: this.getHeaders(),
|
|
31
|
+
body: JSON.stringify({
|
|
32
|
+
action: 'get',
|
|
33
|
+
sessionId: this.sessionId,
|
|
34
|
+
}),
|
|
34
35
|
});
|
|
35
36
|
if (!response.ok) {
|
|
36
37
|
console.error(`[ApiChatHistory] API error: ${response.status}`);
|
|
@@ -185,4 +186,4 @@ class Memory {
|
|
|
185
186
|
}
|
|
186
187
|
}
|
|
187
188
|
exports.Memory = Memory;
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5Lm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZXMvTWVtb3J5L01lbW9yeS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDZDQUFzRDtBQUN0RCwrREFBMEU7QUFDMUUsdURBSWtDO0FBRWxDLE1BQU0sY0FBZSxTQUFRLHlDQUEwQjtJQUdyRCxZQUNVLE1BQWMsRUFDZCxTQUFpQixFQUNqQixNQUFlO1FBRXZCLEtBQUssRUFBRSxDQUFDO1FBSkEsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUx6QixpQkFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFRekQsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FB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QUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQztZQUNwQyxTQUFTLEVBQUUsY0FBYztZQUN6QixXQUFXO1lBQ1gsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsQ0FBQyxFQUFFLG1CQUFtQjtTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVGRCx3QkE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElOb2RlVHlwZSxcbiAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gIElTdXBwbHlEYXRhRnVuY3Rpb25zLFxuICBTdXBwbHlEYXRhLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuaW1wb3J0IHsgQnVmZmVyV2luZG93TWVtb3J5IH0gZnJvbSAnbGFuZ2NoYWluL21lbW9yeSc7XG5pbXBvcnQgeyBCYXNlTGlzdENoYXRNZXNzYWdlSGlzdG9yeSB9IGZyb20gJ0BsYW5nY2hhaW4vY29yZS9jaGF0X2hpc3RvcnknO1xuaW1wb3J0IHtcbiAgQmFzZU1lc3NhZ2UsXG4gIEh1bWFuTWVzc2FnZSxcbiAgQUlNZXNzYWdlLFxufSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvbWVzc2FnZXMnO1xuXG5jbGFzcyBBcGlDaGF0SGlzdG9yeSBleHRlbmRzIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5IHtcbiAgbGNfbmFtZXNwYWNlID0gWydsYW5nY2hhaW4nLCAnc3RvcmVzJywgJ21lc3NhZ2UnLCAnYXBpJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEJhc2VNZXNzYWdlW10+IHtcbiAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMuYXBpVXJsKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdhY3Rpb24nLCAnZ2V0Jyk7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnc2Vzc2lvbklkJywgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBGZXRjaGluZyBmcm9tOicsIHVybC50b1N0cmluZygpKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbQXBpQ2hhdEhpc3RvcnldIEFQSSBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IG1lc3NhZ2VzPzogQXJyYXk8eyB0eXBlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PiB9O1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBkYXRhPy5tZXNzYWdlcyA/PyBbXTtcbiAgICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIEdvdCBtZXNzYWdlczonLCBtZXNzYWdlcy5sZW5ndGgpO1xuXG4gICAgICByZXR1cm4gbWVzc2FnZXMubWFwKChtOiB7IHR5cGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKG0udHlwZSA9PT0gJ2h1bWFuJykge1xuICAgICAgICAgIHJldHVybiBuZXcgSHVtYW5NZXNzYWdlKG0uY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBBSU1lc3NhZ2UobS5jb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBcGlDaGF0SGlzdG9yeV0gZ2V0TWVzc2FnZXMgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZE1lc3NhZ2UobWVzc2FnZTogQmFzZU1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBhZGRNZXNzYWdlIGNhbGxlZCBmb3Igc2Vzc2lvbjonLCB0aGlzLnNlc3Npb25JZCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBtZXNzYWdlLl9nZXRUeXBlKCkgPT09ICdodW1hbicgPyAnaHVtYW4nIDogJ2FpJztcblxuICAgICAgYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgYWN0aW9uOiAnYWRkJyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBjb250ZW50OiBtZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIE1lc3NhZ2UgYWRkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBcGlDaGF0SGlzdG9yeV0gYWRkTWVzc2FnZSBlcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkTWVzc2FnZXMobWVzc2FnZXM6IEJhc2VNZXNzYWdlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBjbGVhciBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdjbGVhcicsXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBjbGVhciBlcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnkgaW1wbGVtZW50cyBJTm9kZVR5cGUge1xuICBkZXNjcmlwdGlvbjogSU5vZGVUeXBlRGVzY3JpcHRpb24gPSB7XG4gICAgZGlzcGxheU5hbWU6ICdNZW1vcnkgQVBJJyxcbiAgICBuYW1lOiAnbWVtb3J5QXBpJyxcbiAgICBpY29uOiAnZmE6YnJhaW4nLFxuICAgIGdyb3VwOiBbJ3RyYW5zZm9ybSddLFxuICAgIHZlcnNpb246IDEsXG4gICAgc3VidGl0bGU6ICdFeHRlcm5hbCBBUEkgTWVtb3J5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1VzZSBhbiBleHRlcm5hbCBBUEkgYXMgY2hhdCBtZW1vcnkgc3RvcmFnZScsXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgIG5hbWU6ICdNZW1vcnkgQVBJJyxcbiAgICB9LFxuICAgIGNvZGV4OiB7XG4gICAgICBjYXRlZ29yaWVzOiBbJ0FJJ10sXG4gICAgICBzdWJjYXRlZ29yaWVzOiB7XG4gICAgICAgIEFJOiBbJ01lbW9yeSddLFxuICAgICAgfSxcbiAgICAgIHJlc291cmNlczoge1xuICAgICAgICBwcmltYXJ5RG9jdW1lbnRhdGlvbjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9maWxpcGV4eXovbjhuLW5vZGVzLW1lbW9yeScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBpbnB1dHM6IFtdLFxuICAgIG91dHB1dHM6IFsnYWlfbWVtb3J5JyBhcyBjb25zdF0sXG4gICAgb3V0cHV0TmFtZXM6IFsnTWVtb3J5J10sXG4gICAgcHJvcGVydGllczogW1xuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0FQSSBVUkwnLFxuICAgICAgICBuYW1lOiAnYXBpVXJsJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdVUkwgb2YgdGhlIG1lbW9yeSBBUEkgKGUuZy4sIG44biB3ZWJob29rIFVSTCknLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ2h0dHBzOi8veW91ci1uOG4uY29tL3dlYmhvb2svbWVtb3J5JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnU2Vzc2lvbiBJRCcsXG4gICAgICAgIG5hbWU6ICdzZXNzaW9uSWQnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJz17eyAkanNvbi5zZXNzaW9uSWQgfX0nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnZlcnNhdGlvbiBzZXNzaW9uJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQVBJIEtleScsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgdHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICBwYXNzd29yZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW9uYWwgQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdDb250ZXh0IFdpbmRvdyBMZW5ndGgnLFxuICAgICAgICBuYW1lOiAnY29udGV4dFdpbmRvd0xlbmd0aCcsXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICBkZWZhdWx0OiAxMCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdOdW1iZXIgb2YgcHJldmlvdXMgbWVzc2FnZXMgdG8gaW5jbHVkZSBhcyBjb250ZXh0JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBhc3luYyBzdXBwbHlEYXRhKFxuICAgIHRoaXM6IElTdXBwbHlEYXRhRnVuY3Rpb25zLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4gICk6IFByb21pc2U8U3VwcGx5RGF0YT4ge1xuICAgIGNvbnN0IGFwaVVybCA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignYXBpVXJsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdzZXNzaW9uSWQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBhcGlLZXkgPSAodGhpcy5nZXROb2RlUGFyYW1ldGVyKCdhcGlLZXknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmcpIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb250ZXh0V2luZG93TGVuZ3RoID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdjb250ZXh0V2luZG93TGVuZ3RoJywgaXRlbUluZGV4LCAxMCkgYXMgbnVtYmVyO1xuXG4gICAgY29uc29sZS5sb2coJ1tNZW1vcnkgQVBJXSBDcmVhdGluZyBtZW1vcnkgZm9yIHNlc3Npb246Jywgc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IGNoYXRIaXN0b3J5ID0gbmV3IEFwaUNoYXRIaXN0b3J5KGFwaVVybCwgc2Vzc2lvbklkLCBhcGlLZXkpO1xuXG4gICAgY29uc3QgbWVtb3J5ID0gbmV3IEJ1ZmZlcldpbmRvd01lbW9yeSh7XG4gICAgICBtZW1vcnlLZXk6ICdjaGF0X2hpc3RvcnknLFxuICAgICAgY2hhdEhpc3RvcnksXG4gICAgICByZXR1cm5NZXNzYWdlczogdHJ1ZSxcbiAgICAgIGlucHV0S2V5OiAnaW5wdXQnLFxuICAgICAgb3V0cHV0S2V5OiAnb3V0cHV0JyxcbiAgICAgIGs6IGNvbnRleHRXaW5kb3dMZW5ndGgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzcG9uc2U6IG1lbW9yeSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5Lm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZXMvTWVtb3J5L01lbW9yeS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDZDQUFzRDtBQUN0RCwrREFBMEU7QUFDMUUsdURBSWtDO0FBRWxDLE1BQU0sY0FBZSxTQUFRLHlDQUEwQjtJQUdyRCxZQUNVLE1BQWMsRUFDZCxTQUFpQixFQUNqQixNQUFlO1FBRXZCLEtBQUssRUFBRSxDQUFDO1FBSkEsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUx6QixpQkFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFRekQsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDeEMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLElB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TUFBTSxDQUFDLENBQUM7UUFFbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQztZQUNwQyxTQUFTLEVBQUUsY0FBYztZQUN6QixXQUFXO1lBQ1gsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsQ0FBQyxFQUFFLG1CQUFtQjtTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVGRCx3QkE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElOb2RlVHlwZSxcbiAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gIElTdXBwbHlEYXRhRnVuY3Rpb25zLFxuICBTdXBwbHlEYXRhLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuaW1wb3J0IHsgQnVmZmVyV2luZG93TWVtb3J5IH0gZnJvbSAnbGFuZ2NoYWluL21lbW9yeSc7XG5pbXBvcnQgeyBCYXNlTGlzdENoYXRNZXNzYWdlSGlzdG9yeSB9IGZyb20gJ0BsYW5nY2hhaW4vY29yZS9jaGF0X2hpc3RvcnknO1xuaW1wb3J0IHtcbiAgQmFzZU1lc3NhZ2UsXG4gIEh1bWFuTWVzc2FnZSxcbiAgQUlNZXNzYWdlLFxufSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvbWVzc2FnZXMnO1xuXG5jbGFzcyBBcGlDaGF0SGlzdG9yeSBleHRlbmRzIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5IHtcbiAgbGNfbmFtZXNwYWNlID0gWydsYW5nY2hhaW4nLCAnc3RvcmVzJywgJ21lc3NhZ2UnLCAnYXBpJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEJhc2VNZXNzYWdlW10+IHtcbiAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBGZXRjaGluZyBmcm9tOicsIHRoaXMuYXBpVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgYWN0aW9uOiAnZ2V0JyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtBcGlDaGF0SGlzdG9yeV0gQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgbWVzc2FnZXM/OiBBcnJheTx7IHR5cGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IH07XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGE/Lm1lc3NhZ2VzID8/IFtdO1xuICAgICAgY29uc29sZS5sb2coJ1tBcGlDaGF0SGlzdG9yeV0gR290IG1lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5tYXAoKG06IHsgdHlwZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAobS50eXBlID09PSAnaHVtYW4nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBIdW1hbk1lc3NhZ2UobS5jb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEFJTWVzc2FnZShtLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkTWVzc2FnZShtZXNzYWdlOiBCYXNlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIGFkZE1lc3NhZ2UgY2FsbGVkIGZvciBzZXNzaW9uOicsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZSA9IG1lc3NhZ2UuX2dldFR5cGUoKSA9PT0gJ2h1bWFuJyA/ICdodW1hbicgOiAnYWknO1xuXG4gICAgICBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdhZGQnLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tBcGlDaGF0SGlzdG9yeV0gTWVzc2FnZSBhZGRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBhZGRNZXNzYWdlIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlcyhtZXNzYWdlczogQmFzZU1lc3NhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIGNsZWFyIGNhbGxlZCBmb3Igc2Vzc2lvbjonLCB0aGlzLnNlc3Npb25JZCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZldGNoKHRoaXMuYXBpVXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGFjdGlvbjogJ2NsZWFyJyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQXBpQ2hhdEhpc3RvcnldIGNsZWFyIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbW9yeSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG4gIGRlc2NyaXB0aW9uOiBJTm9kZVR5cGVEZXNjcmlwdGlvbiA9IHtcbiAgICBkaXNwbGF5TmFtZTogJ01lbW9yeSBBUEknLFxuICAgIG5hbWU6ICdtZW1vcnlBcGknLFxuICAgIGljb246ICdmYTpicmFpbicsXG4gICAgZ3JvdXA6IFsndHJhbnNmb3JtJ10sXG4gICAgdmVyc2lvbjogMSxcbiAgICBzdWJ0aXRsZTogJ0V4dGVybmFsIEFQSSBNZW1vcnknLFxuICAgIGRlc2NyaXB0aW9uOiAnVXNlIGFuIGV4dGVybmFsIEFQSSBhcyBjaGF0IG1lbW9yeSBzdG9yYWdlJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgbmFtZTogJ01lbW9yeSBBUEknLFxuICAgIH0sXG4gICAgY29kZXg6IHtcbiAgICAgIGNhdGVnb3JpZXM6IFsnQUknXSxcbiAgICAgIHN1YmNhdGVnb3JpZXM6IHtcbiAgICAgICAgQUk6IFsnTWVtb3J5J10sXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgIHByaW1hcnlEb2N1bWVudGF0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9naXRodWIuY29tL2ZpbGlwZXh5ei9uOG4tbm9kZXMtbWVtb3J5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlucHV0czogW10sXG4gICAgb3V0cHV0czogWydhaV9tZW1vcnknIGFzIGNvbnN0XSxcbiAgICBvdXRwdXROYW1lczogWydNZW1vcnknXSxcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQVBJIFVSTCcsXG4gICAgICAgIG5hbWU6ICdhcGlVcmwnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VSTCBvZiB0aGUgbWVtb3J5IEFQSSAoZS5nLiwgbjhuIHdlYmhvb2sgVVJMKScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnaHR0cHM6Ly95b3VyLW44bi5jb20vd2ViaG9vay9tZW1vcnknLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdTZXNzaW9uIElEJyxcbiAgICAgICAgbmFtZTogJ3Nlc3Npb25JZCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnPXt7ICRqc29uLnNlc3Npb25JZCB9fScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udmVyc2F0aW9uIHNlc3Npb24nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdBUEkgS2V5JyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0NvbnRleHQgV2luZG93IExlbmd0aCcsXG4gICAgICAgIG5hbWU6ICdjb250ZXh0V2luZG93TGVuZ3RoJyxcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiBwcmV2aW91cyBtZXNzYWdlcyB0byBpbmNsdWRlIGFzIGNvbnRleHQnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGFzeW5jIHN1cHBseURhdGEoXG4gICAgdGhpczogSVN1cHBseURhdGFGdW5jdGlvbnMsXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxTdXBwbHlEYXRhPiB7XG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdhcGlVcmwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3Nlc3Npb25JZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFwaUtleSA9ICh0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2FwaUtleScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRleHRXaW5kb3dMZW5ndGggPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2NvbnRleHRXaW5kb3dMZW5ndGgnLCBpdGVtSW5kZXgsIDEwKSBhcyBudW1iZXI7XG5cbiAgICBjb25zb2xlLmxvZygnW01lbW9yeSBBUEldIENyZWF0aW5nIG1lbW9yeSBmb3Igc2Vzc2lvbjonLCBzZXNzaW9uSWQpO1xuXG4gICAgY29uc3QgY2hhdEhpc3RvcnkgPSBuZXcgQXBpQ2hhdEhpc3RvcnkoYXBpVXJsLCBzZXNzaW9uSWQsIGFwaUtleSk7XG5cbiAgICBjb25zdCBtZW1vcnkgPSBuZXcgQnVmZmVyV2luZG93TWVtb3J5KHtcbiAgICAgIG1lbW9yeUtleTogJ2NoYXRfaGlzdG9yeScsXG4gICAgICBjaGF0SGlzdG9yeSxcbiAgICAgIHJldHVybk1lc3NhZ2VzOiB0cnVlLFxuICAgICAgaW5wdXRLZXk6ICdpbnB1dCcsXG4gICAgICBvdXRwdXRLZXk6ICdvdXRwdXQnLFxuICAgICAgazogY29udGV4dFdpbmRvd0xlbmd0aCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogbWVtb3J5LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|