@milkio/redis 1.0.0-beta.99 → 1.0.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.
- package/LICENSE +20 -20
- package/index.d.ts +19 -303
- package/index.js +103 -51
- package/package.json +12 -1
- package/chunk-6sxyen7j.js +0 -24
- package/chunk-xt8gwvgg.js +0 -16021
package/index.js
CHANGED
|
@@ -1,30 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__require,
|
|
3
|
-
__toESM
|
|
4
|
-
} from "./chunk-6sxyen7j.js";
|
|
5
|
-
|
|
6
1
|
// packages/milkio-redis/index.ts
|
|
7
|
-
async function createRedis(
|
|
8
|
-
const
|
|
9
|
-
const redis = await NodeRedis.default.createClient(options).connect();
|
|
2
|
+
async function createRedis(redisClient) {
|
|
3
|
+
const redis = redisClient;
|
|
10
4
|
const milkioRedis = {
|
|
11
5
|
redis,
|
|
12
|
-
useCache: (key,
|
|
6
|
+
useCache: (key, options) => ({
|
|
13
7
|
set: async (value, expireMs) => {
|
|
14
|
-
|
|
8
|
+
if (expireMs === null) {
|
|
9
|
+
await redis.SET(key, JSON.stringify(value));
|
|
10
|
+
} else {
|
|
11
|
+
await redis.PSETEX(key, expireMs, JSON.stringify(value));
|
|
12
|
+
}
|
|
15
13
|
return value;
|
|
16
14
|
},
|
|
17
15
|
get: async () => {
|
|
18
16
|
const result = await redis.GET(key);
|
|
19
17
|
if (result === null)
|
|
20
|
-
return
|
|
18
|
+
return options?.defaultValue;
|
|
21
19
|
return reviveJSONParse(JSON.parse(result));
|
|
22
20
|
},
|
|
23
21
|
pull: async () => {
|
|
24
22
|
const resultRaw = await redis.MULTI().GET(key).DEL(key).EXEC();
|
|
25
23
|
const result = resultRaw[0];
|
|
26
24
|
if (result === null)
|
|
27
|
-
return
|
|
25
|
+
return options?.defaultValue;
|
|
28
26
|
return reviveJSONParse(JSON.parse(result));
|
|
29
27
|
},
|
|
30
28
|
has: async () => {
|
|
@@ -35,29 +33,29 @@ async function createRedis(options) {
|
|
|
35
33
|
await redis.DEL(key);
|
|
36
34
|
}
|
|
37
35
|
}),
|
|
38
|
-
useFetch: (key,
|
|
39
|
-
if (typeof
|
|
40
|
-
throw new Error("expireMs must be a positive number");
|
|
36
|
+
useFetch: (key, options) => {
|
|
37
|
+
if (options.expireMs !== null && (typeof options.expireMs !== "number" || options.expireMs <= 0)) {
|
|
38
|
+
throw new Error("expireMs must be a positive number or null");
|
|
41
39
|
}
|
|
42
|
-
if (
|
|
40
|
+
if (options.lockInterval !== undefined && (typeof options.lockInterval !== "number" || options.lockInterval <= 0)) {
|
|
43
41
|
throw new Error("lockInterval must be a positive number if provided");
|
|
44
42
|
}
|
|
45
|
-
if (
|
|
46
|
-
throw new Error("realExpireMs must be a positive number if provided");
|
|
43
|
+
if (options.realExpireMs !== undefined && options.realExpireMs !== null && (typeof options.realExpireMs !== "number" || options.realExpireMs <= 0)) {
|
|
44
|
+
throw new Error("realExpireMs must be a positive number or null if provided");
|
|
47
45
|
}
|
|
48
|
-
if (
|
|
49
|
-
throw new Error("notFoundExpireMs must be a positive number if provided");
|
|
46
|
+
if (options.notFoundExpireMs !== undefined && options.notFoundExpireMs !== null && (typeof options.notFoundExpireMs !== "number" || options.notFoundExpireMs <= 0)) {
|
|
47
|
+
throw new Error("notFoundExpireMs must be a positive number or null if provided");
|
|
50
48
|
}
|
|
51
|
-
if (
|
|
52
|
-
if (typeof
|
|
49
|
+
if (options.refreshLockInterval !== undefined) {
|
|
50
|
+
if (typeof options.refreshLockInterval !== "number" || options.refreshLockInterval <= 0) {
|
|
53
51
|
throw new Error("refreshLockInterval must be a positive number if provided");
|
|
54
52
|
}
|
|
55
|
-
const lockInterval =
|
|
56
|
-
if (
|
|
53
|
+
const lockInterval = options.lockInterval ?? 8192;
|
|
54
|
+
if (options.refreshLockInterval <= lockInterval) {
|
|
57
55
|
throw new Error("refreshLockInterval must be greater than lockInterval");
|
|
58
56
|
}
|
|
59
57
|
}
|
|
60
|
-
if (typeof
|
|
58
|
+
if (typeof options.fetch !== "function") {
|
|
61
59
|
throw new Error("fetch must be a function");
|
|
62
60
|
}
|
|
63
61
|
return {
|
|
@@ -69,9 +67,12 @@ async function createRedis(options) {
|
|
|
69
67
|
await redis.DEL(key);
|
|
70
68
|
},
|
|
71
69
|
fetch: async () => {
|
|
72
|
-
const lockInterval =
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
const lockInterval = options.lockInterval ?? 8192;
|
|
71
|
+
let realExpireMs = options.realExpireMs ?? null;
|
|
72
|
+
if (options.expireMs !== null) {
|
|
73
|
+
realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
|
|
74
|
+
}
|
|
75
|
+
const notFoundExpireMs = options.notFoundExpireMs ?? (options.expireMs !== null ? Math.min(options.expireMs, 16384) : 86400000);
|
|
75
76
|
const resultRaw = await redis.GET(key);
|
|
76
77
|
const result = resultRaw ? reviveJSONParse(JSON.parse(resultRaw)) : undefined;
|
|
77
78
|
const now = Date.now();
|
|
@@ -80,13 +81,34 @@ async function createRedis(options) {
|
|
|
80
81
|
}
|
|
81
82
|
const refreshLockKey = `${key}:refresh-lock`;
|
|
82
83
|
if (await redis.EXISTS(refreshLockKey)) {
|
|
83
|
-
return result ? result.R :
|
|
84
|
+
return result ? result.R : options?.defaultValue;
|
|
84
85
|
}
|
|
85
86
|
const lockKey = `${key}:lock`;
|
|
86
87
|
const lockSet = await redis.SET(lockKey, "1", { PX: lockInterval, NX: true });
|
|
87
88
|
const gotLock = lockSet === "OK";
|
|
88
|
-
if (!gotLock)
|
|
89
|
-
|
|
89
|
+
if (!gotLock) {
|
|
90
|
+
const maxWaitTime = lockInterval;
|
|
91
|
+
const waitInterval = 42;
|
|
92
|
+
let waited = 0;
|
|
93
|
+
while (waited < maxWaitTime) {
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, waitInterval));
|
|
95
|
+
waited += waitInterval;
|
|
96
|
+
const waitedResultRaw = await redis.GET(key);
|
|
97
|
+
const waitedResult = waitedResultRaw ? reviveJSONParse(JSON.parse(waitedResultRaw)) : undefined;
|
|
98
|
+
if (waitedResult && waitedResult.T > now) {
|
|
99
|
+
return waitedResult.R;
|
|
100
|
+
}
|
|
101
|
+
if (!await redis.EXISTS(lockKey)) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const finalResultRaw = await redis.GET(key);
|
|
106
|
+
const finalResult = finalResultRaw ? reviveJSONParse(JSON.parse(finalResultRaw)) : undefined;
|
|
107
|
+
if (finalResult && finalResult.T > now) {
|
|
108
|
+
return finalResult.R;
|
|
109
|
+
}
|
|
110
|
+
return result ? result.R : options.defaultValue;
|
|
111
|
+
}
|
|
90
112
|
const recheckRaw = await redis.GET(key);
|
|
91
113
|
const recheck = recheckRaw ? reviveJSONParse(JSON.parse(recheckRaw)) : undefined;
|
|
92
114
|
if (recheck && recheck.T > now) {
|
|
@@ -94,14 +116,21 @@ async function createRedis(options) {
|
|
|
94
116
|
}
|
|
95
117
|
let data;
|
|
96
118
|
try {
|
|
97
|
-
data = await
|
|
119
|
+
data = await options.fetch();
|
|
98
120
|
} catch (error) {
|
|
99
121
|
await redis.DEL(lockKey);
|
|
100
122
|
throw error;
|
|
101
123
|
}
|
|
102
|
-
|
|
124
|
+
let effectiveExpireMs = null;
|
|
125
|
+
if (data !== undefined) {
|
|
126
|
+
if (options.expireMs !== null) {
|
|
127
|
+
effectiveExpireMs = options.expireMs + (realExpireMs ?? 0);
|
|
128
|
+
}
|
|
129
|
+
} else {
|
|
130
|
+
effectiveExpireMs = notFoundExpireMs;
|
|
131
|
+
}
|
|
103
132
|
const cacheValue = {
|
|
104
|
-
T: now + (data !== undefined ?
|
|
133
|
+
T: now + (data !== undefined ? options.expireMs ?? Number.MAX_SAFE_INTEGER : notFoundExpireMs),
|
|
105
134
|
R: data
|
|
106
135
|
};
|
|
107
136
|
const refreshLockExists = await redis.EXISTS(refreshLockKey);
|
|
@@ -109,30 +138,48 @@ async function createRedis(options) {
|
|
|
109
138
|
await redis.DEL(lockKey);
|
|
110
139
|
return data;
|
|
111
140
|
}
|
|
112
|
-
|
|
141
|
+
if (effectiveExpireMs === null) {
|
|
142
|
+
await redis.MULTI().SET(key, JSON.stringify(cacheValue)).DEL(lockKey).EXEC();
|
|
143
|
+
} else {
|
|
144
|
+
await redis.MULTI().PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue)).DEL(lockKey).EXEC();
|
|
145
|
+
}
|
|
113
146
|
return data;
|
|
114
147
|
},
|
|
115
148
|
refresh: async () => {
|
|
116
149
|
const refreshLockKey = `${key}:refresh-lock`;
|
|
117
|
-
const refreshLockInterval =
|
|
150
|
+
const refreshLockInterval = options.refreshLockInterval ?? (options.lockInterval ?? 8192) + 1024;
|
|
118
151
|
await redis.SET(refreshLockKey, "1", {
|
|
119
152
|
PX: refreshLockInterval
|
|
120
153
|
});
|
|
121
154
|
const now = Date.now();
|
|
122
155
|
let data;
|
|
123
156
|
try {
|
|
124
|
-
data = await
|
|
157
|
+
data = await options.fetch();
|
|
125
158
|
} catch (error) {
|
|
126
159
|
await redis.DEL(refreshLockKey);
|
|
127
160
|
throw error;
|
|
128
161
|
}
|
|
129
|
-
|
|
130
|
-
|
|
162
|
+
let realExpireMs = options.realExpireMs ?? null;
|
|
163
|
+
if (options.expireMs !== null) {
|
|
164
|
+
realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
|
|
165
|
+
}
|
|
166
|
+
let effectiveExpireMs = null;
|
|
167
|
+
if (data !== undefined) {
|
|
168
|
+
if (options.expireMs !== null) {
|
|
169
|
+
effectiveExpireMs = options.expireMs + (realExpireMs ?? 0);
|
|
170
|
+
}
|
|
171
|
+
} else {
|
|
172
|
+
effectiveExpireMs = options.notFoundExpireMs ?? (options.expireMs !== null ? Math.min(options.expireMs, 16384) : 86400000);
|
|
173
|
+
}
|
|
131
174
|
const cacheValue = {
|
|
132
|
-
T: now + (data !== undefined ?
|
|
175
|
+
T: now + (data !== undefined ? options.expireMs ?? Number.MAX_SAFE_INTEGER : options.notFoundExpireMs ?? (options.expireMs !== null ? Math.min(options.expireMs, 16384) : 86400000)),
|
|
133
176
|
R: data
|
|
134
177
|
};
|
|
135
|
-
|
|
178
|
+
if (effectiveExpireMs === null) {
|
|
179
|
+
await redis.SET(key, JSON.stringify(cacheValue));
|
|
180
|
+
} else {
|
|
181
|
+
await redis.PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue));
|
|
182
|
+
}
|
|
136
183
|
}
|
|
137
184
|
};
|
|
138
185
|
},
|
|
@@ -142,7 +189,10 @@ async function createRedis(options) {
|
|
|
142
189
|
return result ? Number(result) : 0;
|
|
143
190
|
},
|
|
144
191
|
add: async (amount, expireMs) => {
|
|
145
|
-
if (
|
|
192
|
+
if (expireMs === null) {
|
|
193
|
+
const result = await redis.INCRBY(key, amount);
|
|
194
|
+
return result;
|
|
195
|
+
} else if (!expireMs) {
|
|
146
196
|
const result = await redis.INCRBY(key, amount);
|
|
147
197
|
return result;
|
|
148
198
|
} else {
|
|
@@ -196,14 +246,15 @@ async function createRedis(options) {
|
|
|
196
246
|
};
|
|
197
247
|
return milkioRedis;
|
|
198
248
|
}
|
|
249
|
+
var isoDatePattern = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?)(Z|[+-]\d{2}:?\d{2})?$/;
|
|
199
250
|
function reviveJSONParse(json) {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
251
|
+
if (json !== null && typeof json === "object") {
|
|
252
|
+
if (json instanceof Date || typeof json.getTime === "function" && typeof json.toISOString === "function") {
|
|
253
|
+
return json;
|
|
254
|
+
}
|
|
255
|
+
if (Array.isArray(json)) {
|
|
256
|
+
return json.map((item) => reviveJSONParse(item));
|
|
257
|
+
}
|
|
207
258
|
return Object.entries(json).reduce((acc, [key, value]) => {
|
|
208
259
|
acc[key] = reviveJSONParse(value);
|
|
209
260
|
return acc;
|
|
@@ -219,8 +270,9 @@ function reviveJSONParse(json) {
|
|
|
219
270
|
return json;
|
|
220
271
|
}
|
|
221
272
|
export {
|
|
273
|
+
reviveJSONParse,
|
|
222
274
|
createRedis
|
|
223
275
|
};
|
|
224
276
|
|
|
225
|
-
//# debugId=
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB0eXBlIHsgUmVkaXNDbGllbnRPcHRpb25zIH0gZnJvbSBcInJlZGlzXCI7XG5cbmV4cG9ydCB0eXBlIE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+ID0ge1xuICBkZWZhdWx0VmFsdWU/OiBUIHwgdW5kZWZpbmVkO1xuICBleHBpcmVNczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8VD4gPSB7XG4gIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XG4gIGV4cGlyZU1zOiBudW1iZXI7XG4gIHJlYWxFeHBpcmVNcz86IG51bWJlcjtcbiAgbG9ja0ludGVydmFsPzogbnVtYmVyO1xuICByZWZyZXNoTG9ja0ludGVydmFsPzogbnVtYmVyO1xuICBub3RGb3VuZEV4cGlyZU1zPzogbnVtYmVyO1xuICBmZXRjaDogKCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUmVkaXM8T3B0aW9ucyBleHRlbmRzIFJlZGlzQ2xpZW50T3B0aW9ucz4ob3B0aW9uczogT3B0aW9ucykge1xuICBjb25zdCBOb2RlUmVkaXMgPSBhd2FpdCBpbXBvcnQoXCJyZWRpc1wiKTtcbiAgY29uc3QgcmVkaXMgPSBhd2FpdCBOb2RlUmVkaXMuZGVmYXVsdC5jcmVhdGVDbGllbnQob3B0aW9ucykuY29ubmVjdCgpO1xuXG4gIGNvbnN0IG1pbGtpb1JlZGlzID0ge1xuICAgIHJlZGlzLFxuICAgIHVzZUNhY2hlOiA8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBNaWxraW9SZWRpc0NhY2hlT3B0aW9uczxUPikgPT4gKHtcbiAgICAgIHNldDogYXN5bmMgKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0KSk7XG4gICAgICB9LFxuICAgICAgcHVsbDogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5NVUxUSSgpLkdFVChrZXkpLkRFTChrZXkpLkVYRUMoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0UmF3WzBdO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIHN0cmluZykpO1xuICAgICAgfSxcbiAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBkZWw6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XG4gICAgICB9LFxuICAgIH0pLFxuXG4gICAgdXNlRmV0Y2g6IDxPcHRpb25zIGV4dGVuZHMgTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8YW55Pj4oa2V5OiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLmV4cGlyZU1zIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXhwaXJlTXMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9ja0ludGVydmFsICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmxvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLmxvY2tJbnRlcnZhbCA8PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlYWxFeHBpcmVNcyA8PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWFsRXhwaXJlTXMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2Ygb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA8PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3RGb3VuZEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgaWYgcHJvdmlkZWRcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPD0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZnJlc2hMb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XG4gICAgICAgIGlmIChvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPD0gbG9ja0ludGVydmFsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb2NrSW50ZXJ2YWxcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZldGNoICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmV0Y2ggbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBoYXM6IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCByZWRpcy5ERUwoa2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmV0Y2g6IGFzeW5jICgpOiBQcm9taXNlPEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+Pj4gPT4ge1xuICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XG4gICAgICAgICAgY29uc3QgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XG5cbiAgICAgICAgICBjb25zdCBub3RGb3VuZEV4cGlyZU1zID0gb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KTtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdFJhdyA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdFJhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXN1bHRSYXcpKSBhcyB7IFQ6IG51bWJlcjsgUjogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+IH0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5UID4gbm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XG4gICAgICAgICAgaWYgKGF3YWl0IHJlZGlzLkVYSVNUUyhyZWZyZXNoTG9ja0tleSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsb2NrS2V5ID0gYCR7a2V5fTpsb2NrYDtcbiAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksIFwiMVwiLCB7IFBYOiBsb2NrSW50ZXJ2YWwsIE5YOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnN0IGdvdExvY2sgPSBsb2NrU2V0ID09PSBcIk9LXCI7XG5cbiAgICAgICAgICBpZiAoIWdvdExvY2spIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuXG4gICAgICAgICAgY29uc3QgcmVjaGVja1JhdyA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xuICAgICAgICAgIGNvbnN0IHJlY2hlY2sgPSByZWNoZWNrUmF3ID8gKHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlY2hlY2tSYXcpKSBhcyB7IFQ6IG51bWJlcjsgUjogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+IH0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKHJlY2hlY2sgJiYgcmVjaGVjay5UID4gbm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjaGVjay5SO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj47XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChsb2NrS2V5KTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUV4cGlyZU1zID0gZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyArIHJlYWxFeHBpcmVNcyA6IG5vdEZvdW5kRXhwaXJlTXM7XG5cbiAgICAgICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xuICAgICAgICAgICAgVDogbm93ICsgKGRhdGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZXhwaXJlTXMgOiBub3RGb3VuZEV4cGlyZU1zKSxcbiAgICAgICAgICAgIFI6IGRhdGEsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrRXhpc3RzID0gYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KTtcbiAgICAgICAgICBpZiAocmVmcmVzaExvY2tFeGlzdHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChsb2NrS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKS5ERUwobG9ja0tleSkuRVhFQygpO1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2g6IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcbiAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0ludGVydmFsID0gb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsID8/IChvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyKSArIDEwMjQ7XG5cbiAgICAgICAgICBhd2FpdCByZWRpcy5TRVQocmVmcmVzaExvY2tLZXksIFwiMVwiLCB7XG4gICAgICAgICAgICBQWDogcmVmcmVzaExvY2tJbnRlcnZhbCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgbGV0IGRhdGE6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB8IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKHJlZnJlc2hMb2NrS2V5KTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xuICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUV4cGlyZU1zID0gZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyArIHJlYWxFeHBpcmVNcyA6IChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpKTtcblxuICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyA6IChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpKSksXG4gICAgICAgICAgICBSOiBkYXRhLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhd2FpdCByZWRpcy5QU0VURVgoa2V5LCBlZmZlY3RpdmVFeHBpcmVNcywgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpOyAvLyBEbyBub3QgY2xlYW4gdGhlIHVwZGF0ZSBsb2NrISBJbnN0ZWFkLCB3YWl0IGZvciBpdCB0byBleHBpcmUgbmF0dXJhbGx5XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB1c2VDb3VudDogKGtleTogc3RyaW5nKSA9PiAoe1xuICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgPyBOdW1iZXIocmVzdWx0KSA6IDA7XG4gICAgICB9LFxuICAgICAgYWRkOiBhc3luYyAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgaWYgKCFleHBpcmVNcykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLklOQ1JCWShrZXksIGFtb3VudCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5NVUxUSSgpLklOQ1JCWShrZXksIGFtb3VudCkuUEVYUElSRShrZXksIGV4cGlyZU1zKS5FWEVDKCk7XG4gICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHRbMF0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3ViOiBhc3luYyAoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5ERUNSQlkoa2V5LCBhbW91bnQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHVzZUNsb2NrSW46IChrZXk6IHN0cmluZywgY2xlYW5EYXRlOiBEYXRlKSA9PiAoe1xuICAgICAgY2xvY2tJbjogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuU0VUQklUKGtleSwgb2Zmc2V0LCAxKS5QRVhQSVJFQVQoa2V5LCBjbGVhbkRhdGUuZ2V0VGltZSgpKS5FWEVDKCk7XG4gICAgICB9LFxuICAgICAgY2hlY2s6IGFzeW5jIChvZmZzZXQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVRCSVQoa2V5LCBvZmZzZXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSAxO1xuICAgICAgfSxcbiAgICAgIGZpcnN0Q2xvY2tJbjogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIGxhc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUUE9TKGtleSwgMSwgLTEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHRvQXJyYXk6IGFzeW5jIChsZW5ndGg6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbltdPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFJhdyA9IGF3YWl0IHJlZGlzLkJJVEZJRUxEKGtleSwgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogXCJHRVRcIixcbiAgICAgICAgICAgIGVuY29kaW5nOiBgdSR7bGVuZ3RofWAsXG4gICAgICAgICAgICBvZmZzZXQ6IFwiIzBcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gTnVtYmVyLnBhcnNlSW50KGAke3Jlc3VsdFJhd31gKS50b1N0cmluZygyKS5zcGxpdChcIlwiKTtcbiAgICAgICAgY29uc3QgZmlsbCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aCAtIHJlc3VsdC5sZW5ndGg7IGkrKykgZmlsbC5wdXNoKFwiMFwiKTtcbiAgICAgICAgcmV0dXJuIFsuLi5maWxsLCAuLi5yZXN1bHRdLm1hcCgodikgPT4gdiA9PT0gXCIxXCIpO1xuICAgICAgfSxcbiAgICAgIGNvdW50OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUQ09VTlQoa2V5KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICBjbGVhbjogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCByZWRpcy5ERUwoa2V5KTtcbiAgICAgIH0sXG4gICAgfSksXG4gIH07XG5cbiAgcmV0dXJuIG1pbGtpb1JlZGlzO1xufVxuXG5mdW5jdGlvbiByZXZpdmVKU09OUGFyc2U8VD4oanNvbjogVCk6IFQge1xuICBjb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xuXG4gIGlmIChqc29uIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGpzb247XG4gIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XG4gICAgcmV0dXJuIGpzb24ubWFwKChpdGVtKSA9PiByZXZpdmVKU09OUGFyc2UoaXRlbSkpIGFzIGFueTtcbiAgfVxuICBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIgJiYganNvbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFRdID0gcmV2aXZlSlNPTlBhcnNlKHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBqc29uID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlU3RyaW5nID0gbWF0Y2hbMl0gPyBgJHttYXRjaFsxXX0ke21hdGNoWzJdLnJlcGxhY2UoXCI6XCIsIFwiXCIpfWAgOiBgJHttYXRjaFsxXX1aYDtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xuICAgIH1cbiAgfVxuICByZXR1cm4ganNvbjtcbn1cblxuZXhwb3J0IHR5cGUgUmVkaXMgPSBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVJlZGlzPj47XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7QUFpQkEsZUFBc0IsV0FBK0MsQ0FBQyxTQUFrQjtBQUFBLEVBQ3RGLE1BQU0sWUFBWSxNQUFhO0FBQUEsRUFDL0IsTUFBTSxRQUFRLE1BQU0sVUFBVSxRQUFRLGFBQWEsT0FBTyxFQUFFLFFBQVE7QUFBQSxFQUVwRSxNQUFNLGNBQWM7QUFBQSxJQUNsQjtBQUFBLElBQ0EsVUFBVSxDQUFJLEtBQWEsY0FBMEM7QUFBQSxNQUNuRSxLQUFLLE9BQU8sT0FBVSxhQUFpQztBQUFBLFFBQ3JELE1BQU0sTUFBTSxPQUFPLEtBQUssVUFBVSxLQUFLLFVBQVUsS0FBSyxDQUFDO0FBQUEsUUFDdkQsT0FBTztBQUFBO0FBQUEsTUFFVCxLQUFLLFlBQW9DO0FBQUEsUUFDdkMsTUFBTSxTQUFTLE1BQU0sTUFBTSxJQUFJLEdBQUc7QUFBQSxRQUNsQyxJQUFJLFdBQVc7QUFBQSxVQUFNLE9BQU8sVUFBUztBQUFBLFFBQ3JDLE9BQU8sZ0JBQWdCLEtBQUssTUFBTSxNQUFNLENBQUM7QUFBQTtBQUFBLE1BRTNDLE1BQU0sWUFBWTtBQUFBLFFBQ2hCLE1BQU0sWUFBWSxNQUFNLE1BQU0sTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUs7QUFBQSxRQUM3RCxNQUFNLFNBQVMsVUFBVTtBQUFBLFFBQ3pCLElBQUksV0FBVztBQUFBLFVBQU0sT0FBTyxVQUFTO0FBQUEsUUFDckMsT0FBTyxnQkFBZ0IsS0FBSyxNQUFNLE1BQWdCLENBQUM7QUFBQTtBQUFBLE1BRXJELEtBQUssWUFBOEI7QUFBQSxRQUNqQyxNQUFNLFNBQVMsTUFBTSxNQUFNLElBQUksR0FBRztBQUFBLFFBQ2xDLE9BQU8sV0FBVztBQUFBO0FBQUEsTUFFcEIsS0FBSyxZQUFZO0FBQUEsUUFD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QUksR0FBRztBQUFBO0FBQUEsSUFFdkI7QUFBQSxFQUNGO0FBQUEsRUFFQSxPQUFPO0FBQUE7QUFHVCxTQUFTLGVBQWtCLENBQUMsTUFBWTtBQUFBLEVBQ3RDLE1BQU0saUJBQWlCO0FBQUEsRUFFdkIsSUFBSSxnQkFBZ0I7QUFBQSxJQUFNLE9BQU87QUFBQSxFQUNqQyxJQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFBQSxJQUN2QixPQUFPLEtBQUssSUFBSSxDQUFDLFNBQVMsZ0JBQWdCLElBQUksQ0FBQztBQUFBLEVBQ2pEO0FBQUEsRUFDQSxJQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUFBLElBQzdDLE9BQU8sT0FBTyxRQUFRLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLFdBQVc7QUFBQSxNQUN4RCxJQUFJLE9BQWtCLGdCQUFnQixLQUFLO0FBQUEsTUFDM0MsT0FBTztBQUFBLE9BQ04sQ0FBQyxDQUFNO0FBQUEsRUFDWjtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsVUFBVTtBQUFBLElBQzVCLE1BQU0sUUFBUSxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3ZDLElBQUksT0FBTztBQUFBLE1BQ1QsTUFBTSx1QkFBdUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLE1BQU0sR0FBRyxRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTTtBQUFBLE1BQzdGLE9BQU8sSUFBSSxLQUFLLG9CQUFvQjtBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiNkY2RjlBQ0RDQzM1MzFGMjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
277
|
+
//# debugId=512607529B76886364756E2164756E21
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4gPSB7XG4gIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XG4gIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8VD4gPSB7XG4gIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XG4gIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsO1xuICByZWFsRXhwaXJlTXM/OiBudW1iZXIgfCBudWxsO1xuICBsb2NrSW50ZXJ2YWw/OiBudW1iZXI7XG4gIHJlZnJlc2hMb2NrSW50ZXJ2YWw/OiBudW1iZXI7XG4gIG5vdEZvdW5kRXhwaXJlTXM/OiBudW1iZXIgfCBudWxsO1xuICBmZXRjaDogKCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG59O1xuXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpczxSZWRpc1QgPSBhbnk+ID0ge1xuICByZWRpczogUmVkaXNUO1xuICB1c2VDYWNoZTogPFQ+KFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNaWxraW9SZWRpc0NhY2hlT3B0aW9uczxUPixcbiAgKSA9PiB7XG4gICAgc2V0OiAodmFsdWU6IFQsIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsKSA9PiBQcm9taXNlPFQ+O1xuICAgIGdldDogKCkgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgICBwdWxsOiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICBkZWw6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIH07XG4gIHVzZUZldGNoOiA8VD4oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgb3B0aW9uczogTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8VD4sXG4gICkgPT4ge1xuICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICBkZWw6ICgpID0+IFByb21pc2U8dm9pZD47XG4gICAgZmV0Y2g6ICgpID0+IFByb21pc2U8VD47XG4gICAgcmVmcmVzaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgfTtcbiAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4ge1xuICAgIGdldDogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xuICAgIGFkZDogKGFtb3VudDogbnVtYmVyLCBleHBpcmVNcz86IG51bWJlciB8IG51bGwpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICBzdWI6IChhbW91bnQ6IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXI+O1xuICB9O1xuICB1c2VDbG9ja0luOiAoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgY2xlYW5EYXRlOiBEYXRlLFxuICApID0+IHtcbiAgICBjbG9ja0luOiAob2Zmc2V0OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG4gICAgY2hlY2s6IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICBmaXJzdENsb2NrSW46ICgpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgICBsYXN0Q2xvY2tJbjogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xuICAgIHRvQXJyYXk6IChsZW5ndGg6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuW10+O1xuICAgIGNvdW50OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XG4gICAgY2xlYW46ICgpID0+IFByb21pc2U8dm9pZD47XG4gIH07XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUmVkaXM8UmVkaXNUIGV4dGVuZHMgeyBQU0VURVg6IGFueTsgU0VUOiBhbnk7IFtvdGhlcnM6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PihyZWRpc0NsaWVudDogUmVkaXNUKTogUHJvbWlzZTxNaWxraW9SZWRpczxSZWRpc1Q+PiB7XG4gIGNvbnN0IHJlZGlzID0gcmVkaXNDbGllbnQgYXMgYW55O1xuXG4gIGNvbnN0IG1pbGtpb1JlZGlzOiBhbnkgPSB7XG4gICAgcmVkaXMsXG4gICAgdXNlQ2FjaGU6IDxUPihrZXk6IHN0cmluZywgb3B0aW9ucz86IE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+KSA9PiAoe1xuICAgICAgc2V0OiBhc3luYyAodmFsdWU6IFQsIGV4cGlyZU1zOiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgIGlmIChleHBpcmVNcyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIOawuOS5heS/neWtmFxuICAgICAgICAgIGF3YWl0IHJlZGlzLlNFVChrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgcmVkaXMuUFNFVEVYKGtleSwgZXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIGdldDogYXN5bmMgKCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlc3VsdCBhcyBhbnkgYXMgc3RyaW5nKSk7XG4gICAgICB9LFxuICAgICAgcHVsbDogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5NVUxUSSgpLkdFVChrZXkpLkRFTChrZXkpLkVYRUMoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0UmF3WzBdO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIGFueSBhcyBzdHJpbmcpKTtcbiAgICAgIH0sXG4gICAgICBoYXM6IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGw7XG4gICAgICB9LFxuICAgICAgZGVsOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHVzZUZldGNoOiA8T3B0aW9ucyBleHRlbmRzIE1pbGtpb1JlZGlzRmV0Y2hPcHRpb25zPGFueT4+KGtleTogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlTXMgIT09ICdudW1iZXInIHx8IG9wdGlvbnMuZXhwaXJlTXMgPD0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIG51bGwnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9ja0ludGVydmFsICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmxvY2tJbnRlcnZhbCAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5sb2NrSW50ZXJ2YWwgPD0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5yZWFsRXhwaXJlTXMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlYWxFeHBpcmVNcyA8PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlYWxFeHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIG51bGwgaWYgcHJvdmlkZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gbnVsbCAmJiAodHlwZW9mIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zIDw9IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90Rm91bmRFeHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIG9yIG51bGwgaWYgcHJvdmlkZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPD0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrSW50ZXJ2YWwgPSBvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyO1xuICAgICAgICBpZiAob3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsIDw9IGxvY2tJbnRlcnZhbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb2NrSW50ZXJ2YWwnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmV0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmZXRjaCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFzOiBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZldGNoOiBhc3luYyAoKTogUHJvbWlzZTxBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1snZmV0Y2gnXT4+PiA9PiB7XG4gICAgICAgICAgY29uc3QgbG9ja0ludGVydmFsID0gb3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MjtcblxuICAgICAgICAgIC8vIOWkhOeQhuawuOS5heS/neWtmOeahOaDheWGtVxuICAgICAgICAgIGxldCByZWFsRXhwaXJlTXM6IG51bWJlciB8IG51bGwgPSBvcHRpb25zLnJlYWxFeHBpcmVNcyA/PyBudWxsO1xuICAgICAgICAgIGlmIChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZWFsRXhwaXJlTXMgPSBvcHRpb25zLnJlYWxFeHBpcmVNcyA/PyBNYXRoLmZsb29yKG9wdGlvbnMuZXhwaXJlTXMgKiAoTWF0aC5yYW5kb20oKSArIDAuNSkpICsgODE5MjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBub3RGb3VuZEV4cGlyZU1zID0gb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsID8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpIDogODY0MDAwMDApOyAvLyDpu5jorqQx5aSpXG5cbiAgICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0UmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1snZmV0Y2gnXT4+IH0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5UID4gbm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XG4gICAgICAgICAgaWYgKGF3YWl0IHJlZGlzLkVYSVNUUyhyZWZyZXNoTG9ja0tleSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsb2NrS2V5ID0gYCR7a2V5fTpsb2NrYDtcbiAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksICcxJywgeyBQWDogbG9ja0ludGVydmFsLCBOWDogdHJ1ZSB9KTtcbiAgICAgICAgICBjb25zdCBnb3RMb2NrID0gbG9ja1NldCA9PT0gJ09LJztcblxuICAgICAgICAgIGlmICghZ290TG9jaykge1xuICAgICAgICAgICAgY29uc3QgbWF4V2FpdFRpbWUgPSBsb2NrSW50ZXJ2YWw7XG4gICAgICAgICAgICBjb25zdCB3YWl0SW50ZXJ2YWwgPSA0MjtcbiAgICAgICAgICAgIGxldCB3YWl0ZWQgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHdhaXRlZCA8IG1heFdhaXRUaW1lKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHdhaXRJbnRlcnZhbCkpO1xuICAgICAgICAgICAgICB3YWl0ZWQgKz0gd2FpdEludGVydmFsO1xuICAgICAgICAgICAgICBjb25zdCB3YWl0ZWRSZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcbiAgICAgICAgICAgICAgY29uc3Qgd2FpdGVkUmVzdWx0ID0gd2FpdGVkUmVzdWx0UmF3ID8gKHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHdhaXRlZFJlc3VsdFJhdyBhcyBzdHJpbmcpKSBhcyB7IFQ6IG51bWJlcjsgUjogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbJ2ZldGNoJ10+PiB9KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgaWYgKHdhaXRlZFJlc3VsdCAmJiB3YWl0ZWRSZXN1bHQuVCA+IG5vdykge1xuICAgICAgICAgICAgICAgIHJldHVybiB3YWl0ZWRSZXN1bHQuUjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIShhd2FpdCByZWRpcy5FWElTVFMobG9ja0tleSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbmFsUmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgICBjb25zdCBmaW5hbFJlc3VsdCA9IGZpbmFsUmVzdWx0UmF3ID8gKHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGZpbmFsUmVzdWx0UmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1snZmV0Y2gnXT4+IH0pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LlQgPiBub3cpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsUmVzdWx0LlI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LlIgOiBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZWNoZWNrUmF3ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XG4gICAgICAgICAgY29uc3QgcmVjaGVjayA9IHJlY2hlY2tSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVjaGVja1JhdyBhcyBzdHJpbmcpKSBhcyB7IFQ6IG51bWJlcjsgUjogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbJ2ZldGNoJ10+PiB9KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChyZWNoZWNrICYmIHJlY2hlY2suVCA+IG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIHJlY2hlY2suUjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgZGF0YTogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbJ2ZldGNoJ10+PjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGxvY2tLZXkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g6K6h566X6L+H5pyf5pe26Ze0XG4gICAgICAgICAgbGV0IGVmZmVjdGl2ZUV4cGlyZU1zOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBlZmZlY3RpdmVFeHBpcmVNcyA9IG9wdGlvbnMuZXhwaXJlTXMgKyAocmVhbEV4cGlyZU1zID8/IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g5aaC5p6cIGV4cGlyZU1zIOS4uiBudWxs77yMZWZmZWN0aXZlRXhwaXJlTXMg5L+d5oyBIG51bGzvvIjmsLjkuYXkv53lrZjvvIlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBub3RGb3VuZEV4cGlyZU1zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMuZXhwaXJlTXMgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIDogbm90Rm91bmRFeHBpcmVNcyksXG4gICAgICAgICAgICBSOiBkYXRhLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0V4aXN0cyA9IGF3YWl0IHJlZGlzLkVYSVNUUyhyZWZyZXNoTG9ja0tleSk7XG4gICAgICAgICAgaWYgKHJlZnJlc2hMb2NrRXhpc3RzKSB7XG4gICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwobG9ja0tleSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZWZmZWN0aXZlRXhwaXJlTXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIOawuOS5heS/neWtmFxuICAgICAgICAgICAgYXdhaXQgcmVkaXMuTVVMVEkoKS5TRVQoa2V5LCBKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSkuREVMKGxvY2tLZXkpLkVYRUMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgcmVkaXMuTVVMVEkoKS5QU0VURVgoa2V5LCBlZmZlY3RpdmVFeHBpcmVNcywgSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLkRFTChsb2NrS2V5KS5FWEVDKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2g6IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcbiAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0ludGVydmFsID0gb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsID8/IChvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyKSArIDEwMjQ7XG5cbiAgICAgICAgICBhd2FpdCByZWRpcy5TRVQocmVmcmVzaExvY2tLZXksICcxJywge1xuICAgICAgICAgICAgUFg6IHJlZnJlc2hMb2NrSW50ZXJ2YWwsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1snZmV0Y2gnXT4+IHwgdW5kZWZpbmVkO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgb3B0aW9ucy5mZXRjaCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwocmVmcmVzaExvY2tLZXkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g5aSE55CG5rC45LmF5L+d5a2Y55qE5oOF5Ya1XG4gICAgICAgICAgbGV0IHJlYWxFeHBpcmVNczogbnVtYmVyIHwgbnVsbCA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IG51bGw7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIOiuoeeul+i/h+acn+aXtumXtFxuICAgICAgICAgIGxldCBlZmZlY3RpdmVFeHBpcmVNczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXhwaXJlTXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZWZmZWN0aXZlRXhwaXJlTXMgPSBvcHRpb25zLmV4cGlyZU1zICsgKHJlYWxFeHBpcmVNcyA/PyAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOWmguaenCBleHBpcmVNcyDkuLogbnVsbO+8jGVmZmVjdGl2ZUV4cGlyZU1zIOS/neaMgSBudWxs77yI5rC45LmF5L+d5a2Y77yJXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVmZmVjdGl2ZUV4cGlyZU1zID0gb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IChvcHRpb25zLmV4cGlyZU1zICE9PSBudWxsID8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpIDogODY0MDAwMDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gKG9wdGlvbnMuZXhwaXJlTXMgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIDogKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyAob3B0aW9ucy5leHBpcmVNcyAhPT0gbnVsbCA/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KSA6IDg2NDAwMDAwKSkpLFxuICAgICAgICAgICAgUjogZGF0YSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGVmZmVjdGl2ZUV4cGlyZU1zID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcbiAgICAgICAgICAgIGF3YWl0IHJlZGlzLlNFVChrZXksIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgcmVkaXMuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRG8gbm90IGNsZWFuIHRoZSB1cGRhdGUgbG9jayEgSW5zdGVhZCwgd2FpdCBmb3IgaXQgdG8gZXhwaXJlIG5hdHVyYWxseVxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4gKHtcbiAgICAgIGdldDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID8gTnVtYmVyKHJlc3VsdCkgOiAwO1xuICAgICAgfSxcbiAgICAgIGFkZDogYXN5bmMgKGFtb3VudDogbnVtYmVyLCBleHBpcmVNcz86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICBpZiAoZXhwaXJlTXMgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyDmsLjkuYXkv53lrZhcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgICB9IGVsc2UgaWYgKCFleHBpcmVNcykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLklOQ1JCWShrZXksIGFtb3VudCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5JTkNSQlkoa2V5LCBhbW91bnQpLlBFWFBJUkUoa2V5LCBleHBpcmVNcykuRVhFQygpO1xuICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0WzBdKSBhcyBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdWI6IGFzeW5jIChhbW91bnQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkRFQ1JCWShrZXksIGFtb3VudCk7XG4gICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgfSxcbiAgICB9KSxcblxuICAgIHVzZUNsb2NrSW46IChrZXk6IHN0cmluZywgY2xlYW5EYXRlOiBEYXRlKSA9PiAoe1xuICAgICAgY2xvY2tJbjogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuU0VUQklUKGtleSwgb2Zmc2V0LCAxKS5QRVhQSVJFQVQoa2V5LCBjbGVhbkRhdGUuZ2V0VGltZSgpKS5FWEVDKCk7XG4gICAgICB9LFxuICAgICAgY2hlY2s6IGFzeW5jIChvZmZzZXQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVRCSVQoa2V5LCBvZmZzZXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSAxO1xuICAgICAgfSxcbiAgICAgIGZpcnN0Q2xvY2tJbjogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0IGFzIG51bWJlcjtcbiAgICAgIH0sXG4gICAgICBsYXN0Q2xvY2tJbjogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEsIC0xKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XG4gICAgICB9LFxuICAgICAgdG9BcnJheTogYXN5bmMgKGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuW10+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuQklURklFTEQoa2V5LCBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiAnR0VUJyxcbiAgICAgICAgICAgIGVuY29kaW5nOiBgdSR7bGVuZ3RofWAsXG4gICAgICAgICAgICBvZmZzZXQ6ICcjMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE51bWJlci5wYXJzZUludChgJHtyZXN1bHRSYXd9YCkudG9TdHJpbmcoMikuc3BsaXQoJycpO1xuICAgICAgICBjb25zdCBmaWxsID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoIC0gcmVzdWx0Lmxlbmd0aDsgaSsrKSBmaWxsLnB1c2goJzAnKTtcbiAgICAgICAgcmV0dXJuIFsuLi5maWxsLCAuLi5yZXN1bHRdLm1hcCgodikgPT4gdiA9PT0gJzEnKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVENPVU5UKGtleSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xuICAgICAgfSxcbiAgICAgIGNsZWFuOiBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xuICAgICAgfSxcbiAgICB9KSxcbiAgfTtcblxuICByZXR1cm4gbWlsa2lvUmVkaXM7XG59XG5cbmNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZpdmVKU09OUGFyc2U8VD4oanNvbjogVCk6IFQge1xuICBpZiAoanNvbiAhPT0gbnVsbCAmJiB0eXBlb2YganNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoanNvbiBpbnN0YW5jZW9mIERhdGUgfHwgKHR5cGVvZiAoanNvbiBhcyBhbnkpLmdldFRpbWUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIChqc29uIGFzIGFueSkudG9JU09TdHJpbmcgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcbiAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFRdID0gcmV2aXZlSlNPTlBhcnNlKHZhbHVlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBqc29uID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKCc6JywgJycpfWAgOiBgJHttYXRjaFsxXX1aYDtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xuICAgIH1cbiAgfVxuICByZXR1cm4ganNvbjtcbn1cblxuZXhw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QSxRQUNyRCxNQUFNLFlBQVksTUFBTSxNQUFNLFNBQVMsS0FBSztBQUFBLFVBQzFDO0FBQUEsWUFDRSxXQUFXO0FBQUEsWUFDWCxVQUFVLElBQUk7QUFBQSxZQUNkLFFBQVE7QUFBQSxVQUNWO0FBQUEsUUFDRixDQUFDO0FBQUEsUUFDRCxNQUFNLFNBQVMsT0FBTyxTQUFTLEdBQUcsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtBQUFBLFFBQ25FLE1BQU0sT0FBTyxDQUFDO0FBQUEsUUFDZCxTQUFTLElBQUksRUFBRyxJQUFJLFNBQVMsT0FBTyxRQUFRO0FBQUEsVUFBSyxLQUFLLEtBQUssR0FBRztBQUFBLFFBQzlELE9BQU8sQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sTUFBTSxHQUFHO0FBQUE7QUFBQSxNQUVsRCxPQUFPLFlBQTZCO0FBQUEsUUFDbEMsTUFBTSxTQUFTLE1BQU0sTUFBTSxTQUFTLEdBQUc7QUFBQSxRQUN2QyxPQUFPO0FBQUE7QUFBQSxNQUVULE9BQU8sWUFBMkI7QUFBQSxRQUNoQyxNQUFNLE1BQU0sSUFBSSxHQUFHO0FBQUE7QUFBQSxJQUV2QjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLE9BQU87QUFBQTtBQUdULElBQU0saUJBQWlCO0FBRWhCLFNBQVMsZUFBa0IsQ0FBQyxNQUFZO0FBQUEsRUFDN0MsSUFBSSxTQUFTLFFBQVEsT0FBTyxTQUFTLFVBQVU7QUFBQSxJQUM3QyxJQUFJLGdCQUFnQixRQUFTLE9BQVEsS0FBYSxZQUFZLGNBQWMsT0FBUSxLQUFhLGdCQUFnQixZQUFhO0FBQUEsTUFDNUgsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLElBQUksTUFBTSxRQUFRLElBQUksR0FBRztBQUFBLE1BQ3ZCLE9BQU8sS0FBSyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsSUFBSSxDQUFDO0FBQUEsSUFDakQ7QUFBQSxJQUNBLE9BQU8sT0FBTyxRQUFRLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLFdBQVc7QUFBQSxNQUN4RCxJQUFJLE9BQWtCLGdCQUFnQixLQUFLO0FBQUEsTUFDM0MsT0FBTztBQUFBLE9BQ04sQ0FBQyxDQUFNO0FBQUEsRUFDWjtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsVUFBVTtBQUFBLElBQzVCLE1BQU0sUUFBUSxLQUFLLE1BQU0sY0FBYztBQUFBLElBQ3ZDLElBQUksT0FBTztBQUFBLE1BQ1QsTUFBTSx1QkFBdUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLE1BQU0sR0FBRyxRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTTtBQUFBLE1BQzdGLE9BQU8sSUFBSSxLQUFLLG9CQUFvQjtBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiNTEyNjA3NTI5Qjc2ODg2MzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
package/package.json
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "@milkio/redis",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": "./index.js",
|
|
6
|
+
"types": "./index.d.ts",
|
|
7
|
+
"dependencies": {},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/akirarika/milkio"
|
|
11
|
+
}
|
|
12
|
+
}
|
package/chunk-6sxyen7j.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
-
for (let key of __getOwnPropNames(mod))
|
|
11
|
-
if (!__hasOwnProp.call(to, key))
|
|
12
|
-
__defProp(to, key, {
|
|
13
|
-
get: () => mod[key],
|
|
14
|
-
enumerable: true
|
|
15
|
-
});
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
19
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
20
|
-
|
|
21
|
-
export { __toESM, __commonJS, __require };
|
|
22
|
-
|
|
23
|
-
//# debugId=21F72A06ECE4C28164756E2164756E21
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICBdLAogICJtYXBwaW5ncyI6ICIiLAogICJkZWJ1Z0lkIjogIjIxRjcyQTA2RUNFNEMyODE2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|