@milkio/redis 1.0.0-beta.176 → 1.0.0-beta.179
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/index.d.ts +48 -0
- package/index.js +30 -36
- package/package.json +1 -1
- package/chunk-ns0dgdnb.js +0 -24
- package/chunk-yvgz16de.js +0 -19878
package/index.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type MilkioRedisCacheOptions<T> = {
|
|
2
|
+
defaultValue?: T | undefined;
|
|
3
|
+
expireMs: number;
|
|
4
|
+
};
|
|
5
|
+
export type MilkioRedisFetchOptions<T> = {
|
|
6
|
+
defaultValue?: T | undefined;
|
|
7
|
+
expireMs: number;
|
|
8
|
+
realExpireMs?: number;
|
|
9
|
+
lockInterval?: number;
|
|
10
|
+
refreshLockInterval?: number;
|
|
11
|
+
notFoundExpireMs?: number;
|
|
12
|
+
fetch: () => T | undefined | Promise<T | undefined>;
|
|
13
|
+
};
|
|
14
|
+
export type MilkioRedis<RedisT = any> = {
|
|
15
|
+
redis: RedisT;
|
|
16
|
+
useCache: <T>(key: string, options?: MilkioRedisCacheOptions<T>) => {
|
|
17
|
+
set: (value: T, expireMs: number) => Promise<T>;
|
|
18
|
+
get: () => Promise<T | undefined>;
|
|
19
|
+
pull: () => Promise<T | undefined>;
|
|
20
|
+
has: () => Promise<boolean>;
|
|
21
|
+
del: () => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
useFetch: <T>(key: string, options: MilkioRedisFetchOptions<T>) => {
|
|
24
|
+
has: () => Promise<boolean>;
|
|
25
|
+
del: () => Promise<void>;
|
|
26
|
+
fetch: () => Promise<T>;
|
|
27
|
+
refresh: () => Promise<void>;
|
|
28
|
+
};
|
|
29
|
+
useCount: (key: string) => {
|
|
30
|
+
get: () => Promise<number>;
|
|
31
|
+
add: (amount: number, expireMs?: number) => Promise<number>;
|
|
32
|
+
sub: (amount: number) => Promise<number>;
|
|
33
|
+
};
|
|
34
|
+
useClockIn: (key: string, cleanDate: Date) => {
|
|
35
|
+
clockIn: (offset: number) => Promise<void>;
|
|
36
|
+
check: (offset: number) => Promise<boolean>;
|
|
37
|
+
firstClockIn: () => Promise<number>;
|
|
38
|
+
lastClockIn: () => Promise<number>;
|
|
39
|
+
toArray: (length: number) => Promise<boolean[]>;
|
|
40
|
+
count: () => Promise<number>;
|
|
41
|
+
clean: () => Promise<void>;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export declare function createRedis<RedisT extends {
|
|
45
|
+
PSETEX: any;
|
|
46
|
+
[others: string | number | symbol]: any;
|
|
47
|
+
}>(redisClient: RedisT): Promise<MilkioRedis<RedisT>>;
|
|
48
|
+
export type Redis = MilkioRedis;
|
package/index.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__require,
|
|
3
|
-
__toESM
|
|
4
|
-
} from "./chunk-ns0dgdnb.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
|
await redis.PSETEX(key, expireMs, JSON.stringify(value));
|
|
15
9
|
return value;
|
|
@@ -17,14 +11,14 @@ async function createRedis(options) {
|
|
|
17
11
|
get: async () => {
|
|
18
12
|
const result = await redis.GET(key);
|
|
19
13
|
if (result === null)
|
|
20
|
-
return
|
|
14
|
+
return options?.defaultValue;
|
|
21
15
|
return reviveJSONParse(JSON.parse(result));
|
|
22
16
|
},
|
|
23
17
|
pull: async () => {
|
|
24
18
|
const resultRaw = await redis.MULTI().GET(key).DEL(key).EXEC();
|
|
25
19
|
const result = resultRaw[0];
|
|
26
20
|
if (result === null)
|
|
27
|
-
return
|
|
21
|
+
return options?.defaultValue;
|
|
28
22
|
return reviveJSONParse(JSON.parse(result));
|
|
29
23
|
},
|
|
30
24
|
has: async () => {
|
|
@@ -35,29 +29,29 @@ async function createRedis(options) {
|
|
|
35
29
|
await redis.DEL(key);
|
|
36
30
|
}
|
|
37
31
|
}),
|
|
38
|
-
useFetch: (key,
|
|
39
|
-
if (typeof
|
|
32
|
+
useFetch: (key, options) => {
|
|
33
|
+
if (typeof options.expireMs !== "number" || options.expireMs <= 0) {
|
|
40
34
|
throw new Error("expireMs must be a positive number");
|
|
41
35
|
}
|
|
42
|
-
if (
|
|
36
|
+
if (options.lockInterval !== undefined && (typeof options.lockInterval !== "number" || options.lockInterval <= 0)) {
|
|
43
37
|
throw new Error("lockInterval must be a positive number if provided");
|
|
44
38
|
}
|
|
45
|
-
if (
|
|
39
|
+
if (options.realExpireMs !== undefined && (typeof options.realExpireMs !== "number" || options.realExpireMs <= 0)) {
|
|
46
40
|
throw new Error("realExpireMs must be a positive number if provided");
|
|
47
41
|
}
|
|
48
|
-
if (
|
|
42
|
+
if (options.notFoundExpireMs !== undefined && (typeof options.notFoundExpireMs !== "number" || options.notFoundExpireMs <= 0)) {
|
|
49
43
|
throw new Error("notFoundExpireMs must be a positive number if provided");
|
|
50
44
|
}
|
|
51
|
-
if (
|
|
52
|
-
if (typeof
|
|
45
|
+
if (options.refreshLockInterval !== undefined) {
|
|
46
|
+
if (typeof options.refreshLockInterval !== "number" || options.refreshLockInterval <= 0) {
|
|
53
47
|
throw new Error("refreshLockInterval must be a positive number if provided");
|
|
54
48
|
}
|
|
55
|
-
const lockInterval =
|
|
56
|
-
if (
|
|
49
|
+
const lockInterval = options.lockInterval ?? 8192;
|
|
50
|
+
if (options.refreshLockInterval <= lockInterval) {
|
|
57
51
|
throw new Error("refreshLockInterval must be greater than lockInterval");
|
|
58
52
|
}
|
|
59
53
|
}
|
|
60
|
-
if (typeof
|
|
54
|
+
if (typeof options.fetch !== "function") {
|
|
61
55
|
throw new Error("fetch must be a function");
|
|
62
56
|
}
|
|
63
57
|
return {
|
|
@@ -69,9 +63,9 @@ async function createRedis(options) {
|
|
|
69
63
|
await redis.DEL(key);
|
|
70
64
|
},
|
|
71
65
|
fetch: async () => {
|
|
72
|
-
const lockInterval =
|
|
73
|
-
const realExpireMs =
|
|
74
|
-
const notFoundExpireMs =
|
|
66
|
+
const lockInterval = options.lockInterval ?? 8192;
|
|
67
|
+
const realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
|
|
68
|
+
const notFoundExpireMs = options.notFoundExpireMs ?? Math.min(options.expireMs, 16384);
|
|
75
69
|
const resultRaw = await redis.GET(key);
|
|
76
70
|
const result = resultRaw ? reviveJSONParse(JSON.parse(resultRaw)) : undefined;
|
|
77
71
|
const now = Date.now();
|
|
@@ -80,13 +74,13 @@ async function createRedis(options) {
|
|
|
80
74
|
}
|
|
81
75
|
const refreshLockKey = `${key}:refresh-lock`;
|
|
82
76
|
if (await redis.EXISTS(refreshLockKey)) {
|
|
83
|
-
return result ? result.R :
|
|
77
|
+
return result ? result.R : options?.defaultValue;
|
|
84
78
|
}
|
|
85
79
|
const lockKey = `${key}:lock`;
|
|
86
80
|
const lockSet = await redis.SET(lockKey, "1", { PX: lockInterval, NX: true });
|
|
87
81
|
const gotLock = lockSet === "OK";
|
|
88
82
|
if (!gotLock)
|
|
89
|
-
return result ? result.R :
|
|
83
|
+
return result ? result.R : options.defaultValue;
|
|
90
84
|
const recheckRaw = await redis.GET(key);
|
|
91
85
|
const recheck = recheckRaw ? reviveJSONParse(JSON.parse(recheckRaw)) : undefined;
|
|
92
86
|
if (recheck && recheck.T > now) {
|
|
@@ -94,14 +88,14 @@ async function createRedis(options) {
|
|
|
94
88
|
}
|
|
95
89
|
let data;
|
|
96
90
|
try {
|
|
97
|
-
data = await
|
|
91
|
+
data = await options.fetch();
|
|
98
92
|
} catch (error) {
|
|
99
93
|
await redis.DEL(lockKey);
|
|
100
94
|
throw error;
|
|
101
95
|
}
|
|
102
|
-
const effectiveExpireMs = data !== undefined ?
|
|
96
|
+
const effectiveExpireMs = data !== undefined ? options.expireMs + realExpireMs : notFoundExpireMs;
|
|
103
97
|
const cacheValue = {
|
|
104
|
-
T: now + (data !== undefined ?
|
|
98
|
+
T: now + (data !== undefined ? options.expireMs : notFoundExpireMs),
|
|
105
99
|
R: data
|
|
106
100
|
};
|
|
107
101
|
const refreshLockExists = await redis.EXISTS(refreshLockKey);
|
|
@@ -114,22 +108,22 @@ async function createRedis(options) {
|
|
|
114
108
|
},
|
|
115
109
|
refresh: async () => {
|
|
116
110
|
const refreshLockKey = `${key}:refresh-lock`;
|
|
117
|
-
const refreshLockInterval =
|
|
111
|
+
const refreshLockInterval = options.refreshLockInterval ?? (options.lockInterval ?? 8192) + 1024;
|
|
118
112
|
await redis.SET(refreshLockKey, "1", {
|
|
119
113
|
PX: refreshLockInterval
|
|
120
114
|
});
|
|
121
115
|
const now = Date.now();
|
|
122
116
|
let data;
|
|
123
117
|
try {
|
|
124
|
-
data = await
|
|
118
|
+
data = await options.fetch();
|
|
125
119
|
} catch (error) {
|
|
126
120
|
await redis.DEL(refreshLockKey);
|
|
127
121
|
throw error;
|
|
128
122
|
}
|
|
129
|
-
const realExpireMs =
|
|
130
|
-
const effectiveExpireMs = data !== undefined ?
|
|
123
|
+
const realExpireMs = options.realExpireMs ?? Math.floor(options.expireMs * (Math.random() + 0.5)) + 8192;
|
|
124
|
+
const effectiveExpireMs = data !== undefined ? options.expireMs + realExpireMs : options.notFoundExpireMs ?? Math.min(options.expireMs, 16384);
|
|
131
125
|
const cacheValue = {
|
|
132
|
-
T: now + (data !== undefined ?
|
|
126
|
+
T: now + (data !== undefined ? options.expireMs : options.notFoundExpireMs ?? Math.min(options.expireMs, 16384)),
|
|
133
127
|
R: data
|
|
134
128
|
};
|
|
135
129
|
await redis.PSETEX(key, effectiveExpireMs, JSON.stringify(cacheValue));
|
|
@@ -222,5 +216,5 @@ export {
|
|
|
222
216
|
createRedis
|
|
223
217
|
};
|
|
224
218
|
|
|
225
|
-
//# debugId=
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB0eXBlIHsgUmVkaXNDbGllbnRPcHRpb25zIH0gZnJvbSBcInJlZGlzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpc0NhY2hlT3B0aW9uczxUPiA9IHtcclxuICBkZWZhdWx0VmFsdWU/OiBUIHwgdW5kZWZpbmVkO1xyXG4gIGV4cGlyZU1zOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxUPiA9IHtcclxuICBkZWZhdWx0VmFsdWU/OiBUIHwgdW5kZWZpbmVkO1xyXG4gIGV4cGlyZU1zOiBudW1iZXI7XHJcbiAgcmVhbEV4cGlyZU1zPzogbnVtYmVyO1xyXG4gIGxvY2tJbnRlcnZhbD86IG51bWJlcjtcclxuICByZWZyZXNoTG9ja0ludGVydmFsPzogbnVtYmVyO1xyXG4gIG5vdEZvdW5kRXhwaXJlTXM/OiBudW1iZXI7XHJcbiAgZmV0Y2g6ICgpID0+IFQgfCB1bmRlZmluZWQgfCBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xyXG59O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZGlzPE9wdGlvbnMgZXh0ZW5kcyBSZWRpc0NsaWVudE9wdGlvbnM+KG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICBjb25zdCBOb2RlUmVkaXMgPSBhd2FpdCBpbXBvcnQoXCJyZWRpc1wiKTtcclxuICBjb25zdCByZWRpcyA9IGF3YWl0IE5vZGVSZWRpcy5kZWZhdWx0LmNyZWF0ZUNsaWVudChvcHRpb25zKS5jb25uZWN0KCk7XHJcblxyXG4gIGNvbnN0IG1pbGtpb1JlZGlzID0ge1xyXG4gICAgcmVkaXMsXHJcbiAgICB1c2VDYWNoZTogPFQ+KGtleTogc3RyaW5nLCBvcHRpb25zPzogTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4pID0+ICh7XHJcbiAgICAgIHNldDogYXN5bmMgKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICAgICAgYXdhaXQgcmVkaXMuUFNFVEVYKGtleSwgZXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9LFxyXG4gICAgICBnZXQ6IGFzeW5jICgpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+ID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIHJldHVybiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXN1bHQpKTtcclxuICAgICAgfSxcclxuICAgICAgcHVsbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdFJhdyA9IGF3YWl0IHJlZGlzLk1VTFRJKCkuR0VUKGtleSkuREVMKGtleSkuRVhFQygpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdFJhd1swXTtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIHJldHVybiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXN1bHQgYXMgc3RyaW5nKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGw7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xyXG4gICAgICB9LFxyXG4gICAgfSksXHJcblxyXG4gICAgdXNlRmV0Y2g6IDxPcHRpb25zIGV4dGVuZHMgTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8YW55Pj4oa2V5OiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4cGlyZU1zICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMuZXhwaXJlTXMgPD0gMCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvcHRpb25zLmxvY2tJbnRlcnZhbCAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2Ygb3B0aW9ucy5sb2NrSW50ZXJ2YWwgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5sb2NrSW50ZXJ2YWwgPD0gMCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlYWxFeHBpcmVNcyA8PSAwKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlYWxFeHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zIDw9IDApKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90Rm91bmRFeHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPD0gMCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbG9ja0ludGVydmFsID0gb3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MjtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsIDw9IGxvY2tJbnRlcnZhbCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmcmVzaExvY2tJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBsb2NrSW50ZXJ2YWxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmV0Y2ggIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZldGNoIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBoYXM6IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gbnVsbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmZXRjaDogYXN5bmMgKCk6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+PiA9PiB7XHJcbiAgICAgICAgICBjb25zdCBsb2NrSW50ZXJ2YWwgPSBvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyO1xyXG4gICAgICAgICAgY29uc3QgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Rm91bmRFeHBpcmVNcyA9IG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyBNYXRoLm1pbihvcHRpb25zLmV4cGlyZU1zLCAxNjM4NCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0UmF3KSkgYXMgeyBUOiBudW1iZXI7IFI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PiB9KSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuVCA+IG5vdykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XHJcbiAgICAgICAgICBpZiAoYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LlIgOiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgbG9ja0tleSA9IGAke2tleX06bG9ja2A7XHJcbiAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksIFwiMVwiLCB7IFBYOiBsb2NrSW50ZXJ2YWwsIE5YOiB0cnVlIH0pO1xyXG4gICAgICAgICAgY29uc3QgZ290TG9jayA9IGxvY2tTZXQgPT09IFwiT0tcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWdvdExvY2spIHJldHVybiByZXN1bHQgPyByZXN1bHQuUiA6IG9wdGlvbnMuZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY2hlY2tSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgIGNvbnN0IHJlY2hlY2sgPSByZWNoZWNrUmF3ID8gKHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlY2hlY2tSYXcpKSBhcyB7IFQ6IG51bWJlcjsgUjogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+IH0pIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgIGlmIChyZWNoZWNrICYmIHJlY2hlY2suVCA+IG5vdykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVjaGVjay5SO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj47XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgb3B0aW9ucy5mZXRjaCgpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGxvY2tLZXkpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVFeHBpcmVNcyA9IGRhdGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZXhwaXJlTXMgKyByZWFsRXhwaXJlTXMgOiBub3RGb3VuZEV4cGlyZU1zO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIFQ6IG5vdyArIChkYXRhICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmV4cGlyZU1zIDogbm90Rm91bmRFeHBpcmVNcyksXHJcbiAgICAgICAgICAgIFI6IGRhdGEsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrRXhpc3RzID0gYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KTtcclxuICAgICAgICAgIGlmIChyZWZyZXNoTG9ja0V4aXN0cykge1xyXG4gICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwobG9ja0tleSk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKS5ERUwobG9ja0tleSkuRVhFQygpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVmcmVzaDogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XHJcbiAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0ludGVydmFsID0gb3B0aW9ucy5yZWZyZXNoTG9ja0ludGVydmFsID8/IChvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyKSArIDEwMjQ7XHJcblxyXG4gICAgICAgICAgYXdhaXQgcmVkaXMuU0VUKHJlZnJlc2hMb2NrS2V5LCBcIjFcIiwge1xyXG4gICAgICAgICAgICBQWDogcmVmcmVzaExvY2tJbnRlcnZhbCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICBsZXQgZGF0YTogQXdhaXRlZDxSZXR1cm5UeXBlPE9wdGlvbnNbXCJmZXRjaFwiXT4+IHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChyZWZyZXNoTG9ja0tleSk7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xyXG4gICAgICAgICAgY29uc3QgZWZmZWN0aXZlRXhwaXJlTXMgPSBkYXRhICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmV4cGlyZU1zICsgcmVhbEV4cGlyZU1zIDogKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyBNYXRoLm1pbihvcHRpb25zLmV4cGlyZU1zLCAxNjM4NCkpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XHJcbiAgICAgICAgICAgIFQ6IG5vdyArIChkYXRhICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmV4cGlyZU1zIDogKG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyA/PyBNYXRoLm1pbihvcHRpb25zLmV4cGlyZU1zLCAxNjM4NCkpKSxcclxuICAgICAgICAgICAgUjogZGF0YSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgYXdhaXQgcmVkaXMuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKTsgLy8gRG8gbm90IGNsZWFuIHRoZSB1cGRhdGUgbG9jayEgSW5zdGVhZCwgd2FpdCBmb3IgaXQgdG8gZXhwaXJlIG5hdHVyYWxseVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIHVzZUNvdW50OiAoa2V5OiBzdHJpbmcpID0+ICh7XHJcbiAgICAgIGdldDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHQpIDogMDtcclxuICAgICAgfSxcclxuICAgICAgYWRkOiBhc3luYyAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICBpZiAoIWV4cGlyZU1zKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5JTkNSQlkoa2V5LCBhbW91bnQpLlBFWFBJUkUoa2V5LCBleHBpcmVNcykuRVhFQygpO1xyXG4gICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHRbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgc3ViOiBhc3luYyAoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkRFQ1JCWShrZXksIGFtb3VudCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG5cclxuICAgIHVzZUNsb2NrSW46IChrZXk6IHN0cmluZywgY2xlYW5EYXRlOiBEYXRlKSA9PiAoe1xyXG4gICAgICBjbG9ja0luOiBhc3luYyAob2Zmc2V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlNFVEJJVChrZXksIG9mZnNldCwgMSkuUEVYUElSRUFUKGtleSwgY2xlYW5EYXRlLmdldFRpbWUoKSkuRVhFQygpO1xyXG4gICAgICB9LFxyXG4gICAgICBjaGVjazogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUQklUKGtleSwgb2Zmc2V0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSAxO1xyXG4gICAgICB9LFxyXG4gICAgICBmaXJzdENsb2NrSW46IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIGxhc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5CSVRQT1Moa2V5LCAxLCAtMSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSxcclxuICAgICAgdG9BcnJheTogYXN5bmMgKGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuW10+ID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5CSVRGSUVMRChrZXksIFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgb3BlcmF0aW9uOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBlbmNvZGluZzogYHUke2xlbmd0aH1gLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IFwiIzBcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gTnVtYmVyLnBhcnNlSW50KGAke3Jlc3VsdFJhd31gKS50b1N0cmluZygyKS5zcGxpdChcIlwiKTtcclxuICAgICAgICBjb25zdCBmaWxsID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGggLSByZXN1bHQubGVuZ3RoOyBpKyspIGZpbGwucHVzaChcIjBcIik7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5maWxsLCAuLi5yZXN1bHRdLm1hcCgodikgPT4gdiA9PT0gXCIxXCIpO1xyXG4gICAgICB9LFxyXG4gICAgICBjb3VudDogYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUQ09VTlQoa2V5KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9LFxyXG4gICAgICBjbGVhbjogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xyXG4gICAgICB9LFxyXG4gICAgfSksXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIG1pbGtpb1JlZGlzO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXZpdmVKU09OUGFyc2U8VD4oanNvbjogVCk6IFQge1xyXG4gIGNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XHJcblxyXG4gIGlmIChqc29uIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGpzb247XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcclxuICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XHJcbiAgfVxyXG4gIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIiAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoanNvbikucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICBhY2Nba2V5IGFzIGtleW9mIFRdID0gcmV2aXZlSlNPTlBhcnNlKHZhbHVlKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIHt9IGFzIFQpO1xyXG4gIH1cclxuICBpZiAodHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XHJcbiAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZShcIjpcIiwgXCJcIil9YCA6IGAke21hdGNoWzFdfVpgO1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUobm9ybWFsaXplZERhdGVTdHJpbmcpIGFzIGFueTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGpzb247XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZGlzID0gQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVSZWRpcz4+O1xyXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7QUFpQkEsZUFBc0IsV0FBK0MsQ0FBQyxTQUFrQjtBQUFBLEVBQ3RGLE1BQU0sWUFBWSxNQUFhO0FBQUEsRUFDL0IsTUFBTSxRQUFRLE1BQU0sVUFBVSxRQUFRLGFBQWEsT0FBTyxFQUFFLFFBQVE7QUFBQSxFQUVwRSxNQUFNLGNBQWM7QUFBQSxJQUNsQjtBQUFBLElBQ0EsVUFBVSxDQUFJLEtBQWEsY0FBMEM7QUFBQSxNQUNuRSxLQUFLLE9BQU8sT0FBVSxhQUFpQztBQUFBLFFBQ3JELE1BQU0sTUFBTSxPQUFPLEtBQUssVUFBVSxL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QUFPO0FBQUE7QUFBQSxNQUVULFNBQVMsT0FBTyxXQUF1QztBQUFBLFFBQ3JELE1BQU0sWUFBWSxNQUFNLE1BQU0sU0FBUyxLQUFLO0FBQUEsVUFDMUM7QUFBQSxZQUNFLFdBQVc7QUFBQSxZQUNYLFVBQVUsSUFBSTtBQUFBLFlBQ2QsUUFBUTtBQUFBLFVBQ1Y7QUFBQSxRQUNGLENBQUM7QUFBQSxRQUNELE1BQU0sU0FBUyxPQUFPLFNBQVMsR0FBRyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFO0FBQUEsUUFDbkUsTUFBTSxPQUFPLENBQUM7QUFBQSxRQUNkLFNBQVMsSUFBSSxFQUFHLElBQUksU0FBUyxPQUFPLFFBQVE7QUFBQSxVQUFLLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDOUQsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxNQUFNLEdBQUc7QUFBQTtBQUFBLE1BRWxELE9BQU8sWUFBNkI7QUFBQSxRQUNsQyxNQUFNLFNBQVMsTUFBTSxNQUFNLFNBQVMsR0FBRztBQUFBLFFBQ3ZDLE9BQU87QUFBQTtBQUFBLE1BRVQsT0FBTyxZQUEyQjtBQUFBLFFBQ2hDLE1BQU0sTUFBTSxJQUFJLEdBQUc7QUFBQTtBQUFBLElBRXZCO0FBQUEsRUFDRjtBQUFBLEVBRUEsT0FBTztBQUFBO0FBR1QsU0FBUyxlQUFrQixDQUFDLE1BQVk7QUFBQSxFQUN0QyxNQUFNLGlCQUFpQjtBQUFBLEVBRXZCLElBQUksZ0JBQWdCO0FBQUEsSUFBTSxPQUFPO0FBQUEsRUFDakMsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQUEsSUFDdkIsT0FBTyxLQUFLLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUM7QUFBQSxFQUNqRDtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFBQSxJQUM3QyxPQUFPLE9BQU8sUUFBUSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sS0FBSyxXQUFXO0FBQUEsTUFDeEQsSUFBSSxPQUFrQixnQkFBZ0IsS0FBSztBQUFBLE1BQzNDLE9BQU87QUFBQSxPQUNOLENBQUMsQ0FBTTtBQUFBLEVBQ1o7QUFBQSxFQUNBLElBQUksT0FBTyxTQUFTLFVBQVU7QUFBQSxJQUM1QixNQUFNLFFBQVEsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUN2QyxJQUFJLE9BQU87QUFBQSxNQUNULE1BQU0sdUJBQXVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxNQUFNLEdBQUcsUUFBUSxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU07QUFBQSxNQUM3RixPQUFPLElBQUksS0FBSyxvQkFBb0I7QUFBQSxJQUN0QztBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjZGNkY5QUNEQ0MzNTMxRjI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
219
|
+
//# debugId=CA9C5C515377747D64756E2164756E21
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1JlZGlzQ2FjaGVPcHRpb25zPFQ+ID0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogVCB8IHVuZGVmaW5lZDtcclxuICAgIGV4cGlyZU1zOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxUPiA9IHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IFQgfCB1bmRlZmluZWQ7XHJcbiAgICBleHBpcmVNczogbnVtYmVyO1xyXG4gICAgcmVhbEV4cGlyZU1zPzogbnVtYmVyO1xyXG4gICAgbG9ja0ludGVydmFsPzogbnVtYmVyO1xyXG4gICAgcmVmcmVzaExvY2tJbnRlcnZhbD86IG51bWJlcjtcclxuICAgIG5vdEZvdW5kRXhwaXJlTXM/OiBudW1iZXI7XHJcbiAgICBmZXRjaDogKCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9SZWRpczxSZWRpc1QgPSBhbnk+ID0ge1xyXG4gICAgcmVkaXM6IFJlZGlzVDtcclxuICAgIHVzZUNhY2hlOiA8VD4oa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBNaWxraW9SZWRpc0NhY2hlT3B0aW9uczxUPikgPT4ge1xyXG4gICAgICAgIHNldDogKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyKSA9PiBQcm9taXNlPFQ+O1xyXG4gICAgICAgIGdldDogKCkgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcclxuICAgICAgICBwdWxsOiAoKSA9PiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xyXG4gICAgICAgIGhhczogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcclxuICAgICAgICBkZWw6ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG4gICAgdXNlRmV0Y2g6IDxUPihrZXk6IHN0cmluZywgb3B0aW9uczogTWlsa2lvUmVkaXNGZXRjaE9wdGlvbnM8VD4pID0+IHtcclxuICAgICAgICBoYXM6ICgpID0+IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICAgICAgZGVsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIGZldGNoOiAoKSA9PiBQcm9taXNlPFQ+O1xyXG4gICAgICAgIHJlZnJlc2g6ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG4gICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGdldDogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIGFkZDogKGFtb3VudDogbnVtYmVyLCBleHBpcmVNcz86IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIHN1YjogKGFtb3VudDogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICB9O1xyXG4gICAgdXNlQ2xvY2tJbjogKGtleTogc3RyaW5nLCBjbGVhbkRhdGU6IERhdGUpID0+IHtcclxuICAgICAgICBjbG9ja0luOiAob2Zmc2V0OiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICAgICAgY2hlY2s6IChvZmZzZXQ6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuPjtcclxuICAgICAgICBmaXJzdENsb2NrSW46ICgpID0+IFByb21pc2U8bnVtYmVyPjtcclxuICAgICAgICBsYXN0Q2xvY2tJbjogKCkgPT4gUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgICAgIHRvQXJyYXk6IChsZW5ndGg6IG51bWJlcikgPT4gUHJvbWlzZTxib29sZWFuW10+O1xyXG4gICAgICAgIGNvdW50OiAoKSA9PiBQcm9taXNlPG51bWJlcj47XHJcbiAgICAgICAgY2xlYW46ICgpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlZGlzPFJlZGlzVCBleHRlbmRzIHsgUFNFVEVYOiBhbnksIFtvdGhlcnM6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueSB9PihyZWRpc0NsaWVudDogUmVkaXNUKTogUHJvbWlzZTxNaWxraW9SZWRpczxSZWRpc1Q+PiB7XHJcbiAgICAvLyBjb25zdCByZWRpcyA9IHJlZGlzQ2xpZW50IGFzIGFueSBhcyBBd2FpdGVkPFJldHVyblR5cGU8UmV0dXJuVHlwZTx0eXBlb2YgTm9kZVJlZGlzLmNyZWF0ZUNsaWVudD5bJ2Nvbm5lY3QnXT4+O1xyXG4gICAgY29uc3QgcmVkaXMgPSByZWRpc0NsaWVudCBhcyBhbnk7XHJcblxyXG4gICAgY29uc3QgbWlsa2lvUmVkaXM6IGFueSA9IHtcclxuICAgICAgICByZWRpcyxcclxuICAgICAgICB1c2VDYWNoZTogPFQ+KGtleTogc3RyaW5nLCBvcHRpb25zPzogTWlsa2lvUmVkaXNDYWNoZU9wdGlvbnM8VD4pID0+ICh7XHJcbiAgICAgICAgICAgIHNldDogYXN5bmMgKHZhbHVlOiBULCBleHBpcmVNczogbnVtYmVyKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5QU0VURVgoa2V5LCBleHBpcmVNcywgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0IGFzIGFueSBhcyBzdHJpbmcpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcHVsbDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuTVVMVEkoKS5HRVQoa2V5KS5ERUwoa2V5KS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXdbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gb3B0aW9ucz8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKHJlc3VsdCBhcyBhbnkgYXMgc3RyaW5nKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuR0VUKGtleSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZWw6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChrZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB1c2VGZXRjaDogPE9wdGlvbnMgZXh0ZW5kcyBNaWxraW9SZWRpc0ZldGNoT3B0aW9uczxhbnk+PihrZXk6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlTXMgIT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5leHBpcmVNcyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJleHBpcmVNcyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMubG9ja0ludGVydmFsICE9PSBcIm51bWJlclwiIHx8IG9wdGlvbnMubG9ja0ludGVydmFsIDw9IDApKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVhbEV4cGlyZU1zICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLnJlYWxFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlYWxFeHBpcmVNcyA8PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVhbEV4cGlyZU1zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgaWYgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG9wdGlvbnMubm90Rm91bmRFeHBpcmVNcyAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPD0gMCkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdEZvdW5kRXhwaXJlTXMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCAhPT0gXCJudW1iZXJcIiB8fCBvcHRpb25zLnJlZnJlc2hMb2NrSW50ZXJ2YWwgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZnJlc2hMb2NrSW50ZXJ2YWwgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBpZiBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NrSW50ZXJ2YWwgPSBvcHRpb25zLmxvY2tJbnRlcnZhbCA/PyA4MTkyO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA8PSBsb2NrSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWZyZXNoTG9ja0ludGVydmFsIG11c3QgYmUgZ3JlYXRlciB0aGFuIGxvY2tJbnRlcnZhbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZldGNoICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZldGNoIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhhczogYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGVsOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmV0Y2g6IGFzeW5jICgpOiBQcm9taXNlPEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+Pj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tJbnRlcnZhbCA9IG9wdGlvbnMubG9ja0ludGVydmFsID8/IDgxOTI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbEV4cGlyZU1zID0gb3B0aW9ucy5yZWFsRXhwaXJlTXMgPz8gTWF0aC5mbG9vcihvcHRpb25zLmV4cGlyZU1zICogKE1hdGgucmFuZG9tKCkgKyAwLjUpKSArIDgxOTI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdEZvdW5kRXhwaXJlTXMgPSBvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRSYXcgPyAocmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UocmVzdWx0UmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuVCA+IG5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LlI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZyZXNoTG9ja0tleSA9IGAke2tleX06cmVmcmVzaC1sb2NrYDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LlIgOiBvcHRpb25zPy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NrS2V5ID0gYCR7a2V5fTpsb2NrYDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NrU2V0ID0gYXdhaXQgcmVkaXMuU0VUKGxvY2tLZXksIFwiMVwiLCB7IFBYOiBsb2NrSW50ZXJ2YWwsIE5YOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvdExvY2sgPSBsb2NrU2V0ID09PSBcIk9LXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZ290TG9jaykgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdC5SIDogb3B0aW9ucy5kZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2hlY2tSYXcgPSBhd2FpdCByZWRpcy5HRVQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNoZWNrID0gcmVjaGVja1JhdyA/IChyZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZWNoZWNrUmF3IGFzIHN0cmluZykpIGFzIHsgVDogbnVtYmVyOyBSOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNoZWNrICYmIHJlY2hlY2suVCA+IG5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjaGVjay5SO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGE6IEF3YWl0ZWQ8UmV0dXJuVHlwZTxPcHRpb25zW1wiZmV0Y2hcIl0+PjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYXdhaXQgb3B0aW9ucy5mZXRjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLkRFTChsb2NrS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVFeHBpcmVNcyA9IGRhdGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZXhwaXJlTXMgKyByZWFsRXhwaXJlTXMgOiBub3RGb3VuZEV4cGlyZU1zO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBUOiBub3cgKyAoZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyA6IG5vdEZvdW5kRXhwaXJlTXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hMb2NrRXhpc3RzID0gYXdhaXQgcmVkaXMuRVhJU1RTKHJlZnJlc2hMb2NrS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmcmVzaExvY2tFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGxvY2tLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLk1VTFRJKCkuUFNFVEVYKGtleSwgZWZmZWN0aXZlRXhwaXJlTXMsIEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKS5ERUwobG9ja0tleSkuRVhFQygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZWZyZXNoOiBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tLZXkgPSBgJHtrZXl9OnJlZnJlc2gtbG9ja2A7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaExvY2tJbnRlcnZhbCA9IG9wdGlvbnMucmVmcmVzaExvY2tJbnRlcnZhbCA/PyAob3B0aW9ucy5sb2NrSW50ZXJ2YWwgPz8gODE5MikgKyAxMDI0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5TRVQocmVmcmVzaExvY2tLZXksIFwiMVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBYOiByZWZyZXNoTG9ja0ludGVydmFsLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhOiBBd2FpdGVkPFJldHVyblR5cGU8T3B0aW9uc1tcImZldGNoXCJdPj4gfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5ERUwocmVmcmVzaExvY2tLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxFeHBpcmVNcyA9IG9wdGlvbnMucmVhbEV4cGlyZU1zID8/IE1hdGguZmxvb3Iob3B0aW9ucy5leHBpcmVNcyAqIChNYXRoLnJhbmRvbSgpICsgMC41KSkgKyA4MTkyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUV4cGlyZU1zID0gZGF0YSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5leHBpcmVNcyArIHJlYWxFeHBpcmVNcyA6IChvcHRpb25zLm5vdEZvdW5kRXhwaXJlTXMgPz8gTWF0aC5taW4ob3B0aW9ucy5leHBpcmVNcywgMTYzODQpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FjaGVWYWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVDogbm93ICsgKGRhdGEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZXhwaXJlTXMgOiAob3B0aW9ucy5ub3RGb3VuZEV4cGlyZU1zID8/IE1hdGgubWluKG9wdGlvbnMuZXhwaXJlTXMsIDE2Mzg0KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZGlzLlBTRVRFWChrZXksIGVmZmVjdGl2ZUV4cGlyZU1zLCBKU09OLnN0cmluZ2lmeShjYWNoZVZhbHVlKSk7IC8vIERvIG5vdCBjbGVhbiB0aGUgdXBkYXRlIGxvY2shIEluc3RlYWQsIHdhaXQgZm9yIGl0IHRvIGV4cGlyZSBuYXR1cmFsbHlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXNlQ291bnQ6IChrZXk6IHN0cmluZykgPT4gKHtcclxuICAgICAgICAgICAgZ2V0OiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkdFVChrZXkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHQpIDogMDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkOiBhc3luYyAoYW1vdW50OiBudW1iZXIsIGV4cGlyZU1zPzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZXhwaXJlTXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5JTkNSQlkoa2V5LCBhbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5NVUxUSSgpLklOQ1JCWShrZXksIGFtb3VudCkuUEVYUElSRShrZXksIGV4cGlyZU1zKS5FWEVDKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihyZXN1bHRbMF0pIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3ViOiBhc3luYyAoYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuREVDUkJZKGtleSwgYW1vdW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB1c2VDbG9ja0luOiAoa2V5OiBzdHJpbmcsIGNsZWFuRGF0ZTogRGF0ZSkgPT4gKHtcclxuICAgICAgICAgICAgY2xvY2tJbjogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWRpcy5NVUxUSSgpLlNFVEJJVChrZXksIG9mZnNldCwgMSkuUEVYUElSRUFUKGtleSwgY2xlYW5EYXRlLmdldFRpbWUoKSkuRVhFQygpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjaGVjazogYXN5bmMgKG9mZnNldDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWRpcy5HRVRCSVQoa2V5LCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gMTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlyc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhc3RDbG9ja0luOiBhc3luYyAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZGlzLkJJVFBPUyhrZXksIDEsIC0xKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b0FycmF5OiBhc3luYyAobGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW5bXT4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0UmF3ID0gYXdhaXQgcmVkaXMuQklURklFTEQoa2V5LCBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBgdSR7bGVuZ3RofWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogXCIjMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IE51bWJlci5wYXJzZUludChgJHtyZXN1bHRSYXd9YCkudG9TdHJpbmcoMikuc3BsaXQoXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxsID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aCAtIHJlc3VsdC5sZW5ndGg7IGkrKykgZmlsbC5wdXNoKFwiMFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uZmlsbCwgLi4ucmVzdWx0XS5tYXAoKHYpID0+IHYgPT09IFwiMVwiKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY291bnQ6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVkaXMuQklUQ09VTlQoa2V5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjbGVhbjogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVkaXMuREVMKGtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtaWxraW9SZWRpcztcclxufVxyXG5cclxuZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcclxuICAgIGNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XHJcblxyXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGpzb24ubWFwKChpdGVtKSA9PiByZXZpdmVKU09OUGFyc2UoaXRlbSkpIGFzIGFueTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIiAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGpzb24ubWF0Y2goaXNvRGF0ZVBhdHRlcm4pO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKFwiOlwiLCBcIlwiKX1gIDogYCR7bWF0Y2hbMV19WmA7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWRpcyA9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RUFDakMsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQUEsSUFDckIsT0FBTyxLQUFLLElBQUksQ0FBQyxTQUFTLGdCQUFnQixJQUFJLENBQUM7QUFBQSxFQUNuRDtBQUFBLEVBQ0EsSUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFBQSxJQUMzQyxPQUFPLE9BQU8sUUFBUSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sS0FBSyxXQUFXO0FBQUEsTUFDdEQsSUFBSSxPQUFrQixnQkFBZ0IsS0FBSztBQUFBLE1BQzNDLE9BQU87QUFBQSxPQUNSLENBQUMsQ0FBTTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLElBQUksT0FBTyxTQUFTLFVBQVU7QUFBQSxJQUMxQixNQUFNLFFBQVEsS0FBSyxNQUFNLGNBQWM7QUFBQSxJQUN2QyxJQUFJLE9BQU87QUFBQSxNQUNQLE1BQU0sdUJBQXVCLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxNQUFNLEdBQUcsUUFBUSxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU07QUFBQSxNQUM3RixPQUFPLElBQUksS0FBSyxvQkFBb0I7QUFBQSxJQUN4QztBQUFBLEVBQ0o7QUFBQSxFQUNBLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIkNBOUM1QzUxNTM3Nzc0N0Q2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@milkio/redis","version":"1.0.0-beta.
|
|
1
|
+
{"name":"@milkio/redis","version":"1.0.0-beta.179","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}
|
package/chunk-ns0dgdnb.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=B4D46D2A52F8E40A64756E2164756E21
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICBdLAogICJtYXBwaW5ncyI6ICIiLAogICJkZWJ1Z0lkIjogIkI0RDQ2RDJBNTJGOEU0MEE2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|