@reskin/core 0.0.22 → 0.1.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/bundles/reskin-core-directives.umd.js +303 -163
- package/bundles/reskin-core-directives.umd.js.map +1 -1
- package/bundles/reskin-core-guards.umd.js +119 -32
- package/bundles/reskin-core-guards.umd.js.map +1 -1
- package/bundles/reskin-core-interceptors.umd.js +286 -104
- package/bundles/reskin-core-interceptors.umd.js.map +1 -1
- package/bundles/reskin-core-utils.umd.js +220 -77
- package/bundles/reskin-core-utils.umd.js.map +1 -1
- package/directives/auth.directive.d.ts +56 -9
- package/directives/load.styles.directive.d.ts +45 -5
- package/directives/string.template.outlet.directive.d.ts +68 -11
- package/esm2015/directives/auth.directive.js +71 -30
- package/esm2015/directives/load.styles.directive.js +84 -15
- package/esm2015/directives/string.template.outlet.directive.js +118 -60
- package/esm2015/guards/auth.guard.js +117 -30
- package/esm2015/interceptors/blob.interceptor.js +67 -28
- package/esm2015/interceptors/cache.interceptor.js +46 -14
- package/esm2015/interceptors/error.interceptor.js +104 -12
- package/esm2015/interceptors/public-api.js +2 -1
- package/esm2015/interceptors/token.interceptor.js +66 -53
- package/esm2015/interceptors/types.js +5 -0
- package/esm2015/utils/array.js +42 -22
- package/esm2015/utils/dom.js +29 -11
- package/esm2015/utils/form.js +44 -13
- package/esm2015/utils/store.js +101 -26
- package/fesm2015/reskin-core-directives.js +269 -103
- package/fesm2015/reskin-core-directives.js.map +1 -1
- package/fesm2015/reskin-core-guards.js +116 -29
- package/fesm2015/reskin-core-guards.js.map +1 -1
- package/fesm2015/reskin-core-interceptors.js +282 -102
- package/fesm2015/reskin-core-interceptors.js.map +1 -1
- package/fesm2015/reskin-core-utils.js +212 -68
- package/fesm2015/reskin-core-utils.js.map +1 -1
- package/guards/auth.guard.d.ts +85 -5
- package/interceptors/blob.interceptor.d.ts +30 -3
- package/interceptors/cache.interceptor.d.ts +28 -4
- package/interceptors/error.interceptor.d.ts +43 -2
- package/interceptors/public-api.d.ts +1 -0
- package/interceptors/token.interceptor.d.ts +35 -18
- package/interceptors/types.d.ts +68 -0
- package/package.json +1 -1
- package/utils/array.d.ts +8 -1
- package/utils/dom.d.ts +32 -5
- package/utils/form.d.ts +37 -2
- package/utils/store.d.ts +56 -15
package/esm2015/utils/form.js
CHANGED
|
@@ -1,21 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 表单验证
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
|
+
* 遍历表单所有控件,标记为脏状态并触发验证。
|
|
5
|
+
* 如果表单验证通过,返回表单的原始值;否则返回 false。
|
|
6
|
+
*
|
|
7
|
+
* @param form Angular 表单组对象
|
|
8
|
+
* @param options 验证配置选项
|
|
9
|
+
* @returns 验证通过返回表单值,验证失败返回 false
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const result = formVerify(this.form);
|
|
13
|
+
* if (result) {
|
|
14
|
+
* console.log('表单数据:', result);
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // 自定义错误处理
|
|
19
|
+
* formVerify(this.form, {
|
|
20
|
+
* logError: false,
|
|
21
|
+
* onError: (fields) => {
|
|
22
|
+
* this.message.error(`以下字段验证失败: ${fields.join(', ')}`);
|
|
23
|
+
* }
|
|
24
|
+
* });
|
|
4
25
|
*/
|
|
5
|
-
export function formVerify(form) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
26
|
+
export function formVerify(form, options) {
|
|
27
|
+
const { logError = true, onError } = options || {};
|
|
28
|
+
const invalidFields = [];
|
|
29
|
+
// 遍历所有控件,标记为脏状态并更新验证状态
|
|
30
|
+
Object.keys(form.controls).forEach((key) => {
|
|
31
|
+
const control = form.controls[key];
|
|
32
|
+
control.markAsDirty();
|
|
33
|
+
control.updateValueAndValidity();
|
|
34
|
+
// 收集验证失败的字段(排除禁用状态)
|
|
35
|
+
if (control.status !== 'VALID' && control.status !== 'DISABLED') {
|
|
36
|
+
invalidFields.push(key);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
// 表单验证失败(排除全部禁用的情况)
|
|
40
|
+
if (form.status !== 'VALID' && form.status !== 'DISABLED') {
|
|
41
|
+
if (logError) {
|
|
42
|
+
console.error(`表单验证失败,字段: ${invalidFields.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
if (onError) {
|
|
45
|
+
onError(invalidFields);
|
|
12
46
|
}
|
|
13
|
-
}
|
|
14
|
-
// 表单验证状态
|
|
15
|
-
if (form.status !== 'VALID') {
|
|
16
|
-
console.error(`Form validation failed fields:${errList.join(',')}`);
|
|
17
47
|
return false;
|
|
18
48
|
}
|
|
49
|
+
// 验证通过,返回表单原始值(包含禁用字段)
|
|
19
50
|
return form.getRawValue();
|
|
20
51
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS91dGlscy9mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBMEIsSUFBZSxFQUFFLE9BQTJCO0lBQzVGLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBRW5DLHVCQUF1QjtJQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVqQyxvQkFBb0I7UUFDcEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUM3RCxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxvQkFBb0I7SUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUN2RCxJQUFJLFFBQVEsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzRDtRQUNELElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCx1QkFBdUI7SUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKlxyXG4gKiDooajljZXpqozor4HphY3nva5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVZlcmlmeU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiDmmK/lkKblnKjmjqfliLblj7DovpPlh7rplJnor6/kv6Hmga9cclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG4gICAgbG9nRXJyb3I/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiDoh6rlrprkuYnplJnor6/lpITnkIblh73mlbBcclxuICAgICAqL1xyXG4gICAgb25FcnJvcj86IChpbnZhbGlkRmllbGRzOiBzdHJpbmdbXSkgPT4gdm9pZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOihqOWNlemqjOivgVxyXG4gKlxyXG4gKiDpgY3ljobooajljZXmiYDmnInmjqfku7bvvIzmoIforrDkuLrohI/nirbmgIHlubbop6blj5Hpqozor4HjgIJcclxuICog5aaC5p6c6KGo5Y2V6aqM6K+B6YCa6L+H77yM6L+U5Zue6KGo5Y2V55qE5Y6f5aeL5YC877yb5ZCm5YiZ6L+U5ZueIGZhbHNl44CCXHJcbiAqXHJcbiAqIEBwYXJhbSBmb3JtIEFuZ3VsYXIg6KGo5Y2V57uE5a+56LGhXHJcbiAqIEBwYXJhbSBvcHRpb25zIOmqjOivgemFjee9rumAiemhuVxyXG4gKiBAcmV0dXJucyDpqozor4HpgJrov4fov5Tlm57ooajljZXlgLzvvIzpqozor4HlpLHotKXov5Tlm54gZmFsc2VcclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgcmVzdWx0ID0gZm9ybVZlcmlmeSh0aGlzLmZvcm0pO1xyXG4gKiBpZiAocmVzdWx0KSB7XHJcbiAqICAgY29uc29sZS5sb2coJ+ihqOWNleaVsOaNrjonLCByZXN1bHQpO1xyXG4gKiB9XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIOiHquWumuS5iemUmeivr+WkhOeQhlxyXG4gKiBmb3JtVmVyaWZ5KHRoaXMuZm9ybSwge1xyXG4gKiAgIGxvZ0Vycm9yOiBmYWxzZSxcclxuICogICBvbkVycm9yOiAoZmllbGRzKSA9PiB7XHJcbiAqICAgICB0aGlzLm1lc3NhZ2UuZXJyb3IoYOS7peS4i+Wtl+autemqjOivgeWksei0pTogJHtmaWVsZHMuam9pbignLCAnKX1gKTtcclxuICogICB9XHJcbiAqIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1WZXJpZnk8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+KGZvcm06IEZvcm1Hcm91cCwgb3B0aW9ucz86IEZvcm1WZXJpZnlPcHRpb25zKTogZmFsc2UgfCBUIHtcclxuICAgIGNvbnN0IHsgbG9nRXJyb3IgPSB0cnVlLCBvbkVycm9yIH0gPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgY29uc3QgaW52YWxpZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvLyDpgY3ljobmiYDmnInmjqfku7bvvIzmoIforrDkuLrohI/nirbmgIHlubbmm7TmlrDpqozor4HnirbmgIFcclxuICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmNvbnRyb2xzW2tleV07XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICAvLyDmlLbpm4bpqozor4HlpLHotKXnmoTlrZfmrrXvvIjmjpLpmaTnpoHnlKjnirbmgIHvvIlcclxuICAgICAgICBpZiAoY29udHJvbC5zdGF0dXMgIT09ICdWQUxJRCcgJiYgY29udHJvbC5zdGF0dXMgIT09ICdESVNBQkxFRCcpIHtcclxuICAgICAgICAgICAgaW52YWxpZEZpZWxkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g6KGo5Y2V6aqM6K+B5aSx6LSl77yI5o6S6Zmk5YWo6YOo56aB55So55qE5oOF5Ya177yJXHJcbiAgICBpZiAoZm9ybS5zdGF0dXMgIT09ICdWQUxJRCcgJiYgZm9ybS5zdGF0dXMgIT09ICdESVNBQkxFRCcpIHtcclxuICAgICAgICBpZiAobG9nRXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihg6KGo5Y2V6aqM6K+B5aSx6LSl77yM5a2X5q61OiAke2ludmFsaWRGaWVsZHMuam9pbignLCAnKX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcclxuICAgICAgICAgICAgb25FcnJvcihpbnZhbGlkRmllbGRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOmqjOivgemAmui/h++8jOi/lOWbnuihqOWNleWOn+Wni+WAvO+8iOWMheWQq+emgeeUqOWtl+aute+8iVxyXG4gICAgcmV0dXJuIGZvcm0uZ2V0UmF3VmFsdWUoKTtcclxufVxyXG4iXX0=
|
package/esm2015/utils/store.js
CHANGED
|
@@ -6,71 +6,146 @@ let prefix = 'SK_';
|
|
|
6
6
|
* 设置存储前缀
|
|
7
7
|
*
|
|
8
8
|
* 该函数用于更改全局存储前缀,影响后续所有存储操作的键名前缀。
|
|
9
|
-
*
|
|
9
|
+
* 注意:更改前缀后,之前使用旧前缀存储的数据将无法访问。
|
|
10
10
|
*
|
|
11
11
|
* @param newPrefix 新的存储前缀字符串
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* setStorePrefix('MY_APP_');
|
|
12
15
|
*/
|
|
13
16
|
export function setStorePrefix(newPrefix) {
|
|
14
17
|
prefix = newPrefix;
|
|
15
18
|
}
|
|
16
19
|
/**
|
|
17
|
-
* 提供了一个用于缓存值的类,值可以被存储在浏览器的localStorage或sessionStorage中。
|
|
18
|
-
*
|
|
20
|
+
* 提供了一个用于缓存值的类,值可以被存储在浏览器的 localStorage 或 sessionStorage 中。
|
|
21
|
+
* 支持过期时间设置,过期后数据会自动移除。
|
|
22
|
+
*
|
|
23
|
+
* @template T 存储数据的类型
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // 基础用法
|
|
27
|
+
* const userStore = new Store<User>('user', { name: '', age: 0 });
|
|
28
|
+
* userStore.set({ name: '张三', age: 25 });
|
|
29
|
+
* console.log(userStore.get()); // { name: '张三', age: 25 }
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* // 使用 localStorage 并设置过期时间
|
|
33
|
+
* const tokenStore = new Store<string>('token', '', {
|
|
34
|
+
* storageEngine: localStorage,
|
|
35
|
+
* expires: 3600000 // 1小时后过期
|
|
36
|
+
* });
|
|
19
37
|
*/
|
|
20
38
|
export class Store {
|
|
21
39
|
/**
|
|
22
|
-
* 初始化Store
|
|
23
|
-
* @param key
|
|
24
|
-
* @param defaultValue
|
|
25
|
-
* @param options
|
|
40
|
+
* 初始化 Store 类的实例
|
|
41
|
+
* @param key 缓存值的键名
|
|
42
|
+
* @param defaultValue 初始值,默认值会被存储并返回直到设置新的值
|
|
43
|
+
* @param options 配置选项,包括存储引擎和过期时间
|
|
26
44
|
*/
|
|
27
45
|
constructor(key, defaultValue, options) {
|
|
46
|
+
this.key = key;
|
|
28
47
|
this.value = defaultValue;
|
|
29
|
-
// 进行初始设置
|
|
30
|
-
this.storageKey = () => `@${prefix}_${key}`.toLocaleUpperCase();
|
|
31
48
|
const { storageEngine = sessionStorage, expires } = options !== null && options !== void 0 ? options : {};
|
|
32
49
|
this.storage = storageEngine;
|
|
33
50
|
this.expires = expires;
|
|
34
|
-
|
|
35
|
-
|
|
51
|
+
// 尝试从存储中读取数据
|
|
52
|
+
this.loadFromStorage();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 生成存储键名
|
|
56
|
+
*/
|
|
57
|
+
getStorageKey() {
|
|
58
|
+
return `@${prefix}_${this.key}`.toLocaleUpperCase();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 从存储中加载数据
|
|
62
|
+
*/
|
|
63
|
+
loadFromStorage() {
|
|
64
|
+
try {
|
|
65
|
+
const storedValue = this.storage.getItem(this.getStorageKey());
|
|
66
|
+
if (!storedValue) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
36
69
|
const { data, expiry } = JSON.parse(storedValue);
|
|
37
|
-
//
|
|
70
|
+
// 检查是否过期
|
|
38
71
|
if (!expiry || expiry > Date.now()) {
|
|
39
72
|
this.value = data;
|
|
40
73
|
}
|
|
41
74
|
else {
|
|
42
|
-
|
|
75
|
+
// 过期则删除
|
|
76
|
+
this.clear();
|
|
43
77
|
}
|
|
44
78
|
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error(`从存储中读取数据失败 (key: ${this.getStorageKey()}):`, error);
|
|
81
|
+
// 数据损坏时清除
|
|
82
|
+
this.clear();
|
|
83
|
+
}
|
|
45
84
|
}
|
|
46
85
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @returns
|
|
86
|
+
* 获取当前缓存的值
|
|
87
|
+
* @returns 缓存的值
|
|
49
88
|
*/
|
|
50
89
|
get() {
|
|
51
90
|
return this.value;
|
|
52
91
|
}
|
|
53
92
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @param newValue
|
|
93
|
+
* 设置新的缓存值
|
|
94
|
+
* @param newValue 新的值
|
|
56
95
|
*/
|
|
57
96
|
set(newValue) {
|
|
58
97
|
this.value = newValue;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
98
|
+
try {
|
|
99
|
+
const storageData = {
|
|
100
|
+
data: newValue,
|
|
101
|
+
expiry: this.expires ? Date.now() + this.expires : null,
|
|
102
|
+
};
|
|
103
|
+
this.storage.setItem(this.getStorageKey(), JSON.stringify(storageData));
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error(`存储数据失败 (key: ${this.getStorageKey()}):`, error);
|
|
107
|
+
}
|
|
65
108
|
}
|
|
66
109
|
/**
|
|
67
|
-
*
|
|
68
|
-
* @param updateFn
|
|
110
|
+
* 使用提供的函数更新缓存的值
|
|
111
|
+
* @param updateFn 一个接受当前值并返回新值的函数
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* const countStore = new Store<number>('count', 0);
|
|
115
|
+
* countStore.update(count => count + 1);
|
|
69
116
|
*/
|
|
70
117
|
update(updateFn) {
|
|
71
118
|
if (typeof updateFn === 'function') {
|
|
72
119
|
this.set(updateFn(this.value));
|
|
73
120
|
}
|
|
74
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* 清除缓存数据
|
|
124
|
+
*/
|
|
125
|
+
clear() {
|
|
126
|
+
try {
|
|
127
|
+
this.storage.removeItem(this.getStorageKey());
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error(`清除存储数据失败 (key: ${this.getStorageKey()}):`, error);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 检查缓存是否存在且未过期
|
|
135
|
+
* @returns 如果缓存存在且未过期返回 true,否则返回 false
|
|
136
|
+
*/
|
|
137
|
+
has() {
|
|
138
|
+
try {
|
|
139
|
+
const storedValue = this.storage.getItem(this.getStorageKey());
|
|
140
|
+
if (!storedValue) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
const { expiry } = JSON.parse(storedValue);
|
|
144
|
+
return !expiry || expiry > Date.now();
|
|
145
|
+
}
|
|
146
|
+
catch (_a) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
75
150
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvdXRpbHMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7O0dBRUc7QUFDSCxJQUFJLE1BQU0sR0FBVyxLQUFLLENBQUM7QUFFM0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBaUI7SUFDNUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFNZDs7Ozs7T0FLRztJQUNILFlBQVksR0FBVyxFQUFFLFlBQWUsRUFBRSxPQUFzQjtRQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUUxQixTQUFTO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxhQUFhLEdBQUcsY0FBYyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLFdBQVcsRUFBRTtZQUNiLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRCxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUNyQjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzthQUM5QztTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUc7UUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUFXO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFFdEIsa0JBQWtCO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekIsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDMUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBZ0M7UUFDbkMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog57yT5a2Y6YWN572u5L+h5oGvXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIOe8k+WtmOWtmOWCqOaWueW8j1xyXG4gICAgICovXHJcbiAgICBzdG9yYWdlRW5naW5lPzogU3RvcmFnZTtcclxuICAgIC8qKlxyXG4gICAgICog6L+H5pyf5pe26Ze0KOavq+enkilcclxuICAgICAqL1xyXG4gICAgZXhwaXJlcz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIOm7mOiupOWJjee8gFxyXG4gKi9cclxubGV0IHByZWZpeDogc3RyaW5nID0gJ1NLXyc7XHJcblxyXG4vKipcclxuICog6K6+572u5a2Y5YKo5YmN57yAXHJcbiAqXHJcbiAqIOivpeWHveaVsOeUqOS6juabtOaUueWFqOWxgOWtmOWCqOWJjee8gO+8jOW9seWTjeWQjue7reaJgOacieWtmOWCqOaTjeS9nOeahOmUruWQjeWJjee8gOOAglxyXG4gKiDlrZjlgqjliY3nvIDnmoTmm7TmlLnlj6/og73kvJrlvbHlk43lt7LlrZjlgqjnmoTmlbDmja7ooqvmraPnoa7or4bliKvlkozorr/pl67jgIJcclxuICpcclxuICogQHBhcmFtIG5ld1ByZWZpeCDmlrDnmoTlrZjlgqjliY3nvIDlrZfnrKbkuLJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRTdG9yZVByZWZpeChuZXdQcmVmaXg6IHN0cmluZykge1xyXG4gICAgcHJlZml4ID0gbmV3UHJlZml4O1xyXG59XHJcblxyXG4vKipcclxuICog5o+Q5L6b5LqG5LiA5Liq55So5LqO57yT5a2Y5YC855qE57G777yM5YC85Y+v5Lul6KKr5a2Y5YKo5Zyo5rWP6KeI5Zmo55qEbG9jYWxTdG9yYWdl5oiWc2Vzc2lvblN0b3JhZ2XkuK3jgIJcclxuICog5aaC5p6c5o+Q5L6b5LqG6L+H5pyf5pe26Ze077yM5a2Y5YKo55qE5YC85Lya5Zyo6L+H5pyf5ZCO6Ieq5Yqo56e76Zmk44CCXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RvcmU8VD4ge1xyXG4gICAgcHJpdmF0ZSB2YWx1ZTogVDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhwaXJlcz86IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZUtleTogKCkgPT4gc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yid5aeL5YyWU3RvcmXnsbvnmoTlrp7kvovjgIJcclxuICAgICAqIEBwYXJhbSBrZXkg57yT5a2Y5YC855qE6ZSu5ZCN44CCXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIOWIneWni+WAvO+8jOm7mOiupOWAvOS8muiiq+WtmOWCqOW5tui/lOWbnuebtOWIsOiuvue9ruaWsOeahOWAvOOAglxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMg6YWN572u6YCJ6aG577yM5YyF5ous5a2Y5YKo5byV5pOO5ZKM6L+H5pyf5pe26Ze044CCXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQsIG9wdGlvbnM/OiBTdG9yZU9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvLyDov5vooYzliJ3lp4vorr7nva5cclxuICAgICAgICB0aGlzLnN0b3JhZ2VLZXkgPSAoKSA9PiBgQCR7cHJlZml4fV8ke2tleX1gLnRvTG9jYWxlVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgeyBzdG9yYWdlRW5naW5lID0gc2Vzc2lvblN0b3JhZ2UsIGV4cGlyZXMgfSA9IG9wdGlvbnMgPz8ge307XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZUVuZ2luZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzO1xyXG5cclxuICAgICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSgpKTtcclxuICAgICAgICBpZiAoc3RvcmVkVmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBleHBpcnkgfSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xyXG4gICAgICAgICAgICAvLyDliKTmlq3mmK/lkKbov4fmnJ/vvIzov4fmnJ/lkI7liKDpmaRrZXlcclxuICAgICAgICAgICAgaWYgKCFleHBpcnkgfHwgZXhwaXJ5ID4gRGF0ZS5ub3coKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0b3JhZ2VLZXkoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5blvZPliY3nvJPlrZjnmoTlgLzjgIJcclxuICAgICAqIEByZXR1cm5zIOe8k+WtmOeahOWAvOOAglxyXG4gICAgICovXHJcbiAgICBnZXQoKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDorr7nva7mlrDnmoTnvJPlrZjlgLzjgIJcclxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZSDmlrDnmoTlgLzjgIJcclxuICAgICAqL1xyXG4gICAgc2V0KG5ld1ZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAvLyDorr7nva7lgLzml7bov5vooYxTdG9yYWdl6K6+572uXHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGRhdGE6IG5ld1ZhbHVlLFxyXG4gICAgICAgICAgICBleHBpcnk6IHRoaXMuZXhwaXJlcyA/IERhdGUubm93KCkgKyB0aGlzLmV4cGlyZXMgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSgpLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDkvb/nlKjmj5DkvpvnmoTlh73mlbDmm7TmlrDnvJPlrZjnmoTlgLzjgIJcclxuICAgICAqIEBwYXJhbSB1cGRhdGVGbiDkuIDkuKrmjqXlj5flvZPliY3lgLzlubbov5Tlm57mlrDlgLznmoTlh73mlbDjgIJcclxuICAgICAqL1xyXG4gICAgdXBkYXRlKHVwZGF0ZUZuOiAoY3VycmVudFZhbHVlOiBUKSA9PiBUKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVGbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnNldCh1cGRhdGVGbih0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvdXRpbHMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEJBOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQVcsS0FBSyxDQUFDO0FBRTNCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQWlCO0lBQzVDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDdkIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sS0FBSztJQU1kOzs7OztPQUtHO0lBQ0gsWUFBWSxHQUFXLEVBQUUsWUFBZSxFQUFFLE9BQXNCO1FBQzVELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFFMUIsTUFBTSxFQUFFLGFBQWEsR0FBRyxjQUFjLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLGFBQWE7UUFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNqQixPQUFPLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDbkIsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsT0FBTzthQUNWO1lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBbUIsQ0FBQztZQUVuRSxTQUFTO1lBQ1QsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUNyQjtpQkFBTTtnQkFDSCxRQUFRO2dCQUNSLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNoQjtTQUNKO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRSxVQUFVO1lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUc7UUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxRQUFXO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFFdEIsSUFBSTtZQUNBLE1BQU0sV0FBVyxHQUFtQjtnQkFDaEMsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQzFELENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsRTtJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFFBQWdDO1FBQ25DLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELElBQUk7WUFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDcEU7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsR0FBRztRQUNDLElBQUk7WUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNkLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFtQixDQUFDO1lBQzdELE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN6QztRQUFDLFdBQU07WUFDSixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDnvJPlrZjphY3nva7kv6Hmga9cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVPcHRpb25zIHtcclxuICAgIC8qKlxyXG4gICAgICog57yT5a2Y5a2Y5YKo5pa55byPXHJcbiAgICAgKiBAZGVmYXVsdCBzZXNzaW9uU3RvcmFnZVxyXG4gICAgICovXHJcbiAgICBzdG9yYWdlRW5naW5lPzogU3RvcmFnZTtcclxuICAgIC8qKlxyXG4gICAgICog6L+H5pyf5pe26Ze077yI5q+r56eS77yJXHJcbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKOawuOS4jei/h+acnylcclxuICAgICAqL1xyXG4gICAgZXhwaXJlcz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWtmOWCqOaVsOaNrue7k+aehFxyXG4gKi9cclxuaW50ZXJmYWNlIFN0b3JhZ2VEYXRhPFQ+IHtcclxuICAgIC8qKlxyXG4gICAgICog5a6e6ZmF5a2Y5YKo55qE5pWw5o2uXHJcbiAgICAgKi9cclxuICAgIGRhdGE6IFQ7XHJcbiAgICAvKipcclxuICAgICAqIOi/h+acn+aXtumXtOaIs++8iOavq+enku+8iVxyXG4gICAgICovXHJcbiAgICBleHBpcnk6IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDpu5jorqTliY3nvIBcclxuICovXHJcbmxldCBwcmVmaXg6IHN0cmluZyA9ICdTS18nO1xyXG5cclxuLyoqXHJcbiAqIOiuvue9ruWtmOWCqOWJjee8gFxyXG4gKlxyXG4gKiDor6Xlh73mlbDnlKjkuo7mm7TmlLnlhajlsYDlrZjlgqjliY3nvIDvvIzlvbHlk43lkI7nu63miYDmnInlrZjlgqjmk43kvZznmoTplK7lkI3liY3nvIDjgIJcclxuICog5rOo5oSP77ya5pu05pS55YmN57yA5ZCO77yM5LmL5YmN5L2/55So5pen5YmN57yA5a2Y5YKo55qE5pWw5o2u5bCG5peg5rOV6K6/6Zeu44CCXHJcbiAqXHJcbiAqIEBwYXJhbSBuZXdQcmVmaXgg5paw55qE5a2Y5YKo5YmN57yA5a2X56ym5LiyXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHNldFN0b3JlUHJlZml4KCdNWV9BUFBfJyk7XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0U3RvcmVQcmVmaXgobmV3UHJlZml4OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHByZWZpeCA9IG5ld1ByZWZpeDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOaPkOS+m+S6huS4gOS4queUqOS6jue8k+WtmOWAvOeahOexu++8jOWAvOWPr+S7peiiq+WtmOWCqOWcqOa1j+iniOWZqOeahCBsb2NhbFN0b3JhZ2Ug5oiWIHNlc3Npb25TdG9yYWdlIOS4reOAglxyXG4gKiDmlK/mjIHov4fmnJ/ml7bpl7Torr7nva7vvIzov4fmnJ/lkI7mlbDmja7kvJroh6rliqjnp7vpmaTjgIJcclxuICpcclxuICogQHRlbXBsYXRlIFQg5a2Y5YKo5pWw5o2u55qE57G75Z6LXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIOWfuuehgOeUqOazlVxyXG4gKiBjb25zdCB1c2VyU3RvcmUgPSBuZXcgU3RvcmU8VXNlcj4oJ3VzZXInLCB7IG5hbWU6ICcnLCBhZ2U6IDAgfSk7XHJcbiAqIHVzZXJTdG9yZS5zZXQoeyBuYW1lOiAn5byg5LiJJywgYWdlOiAyNSB9KTtcclxuICogY29uc29sZS5sb2codXNlclN0b3JlLmdldCgpKTsgLy8geyBuYW1lOiAn5byg5LiJJywgYWdlOiAyNSB9XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIOS9v+eUqCBsb2NhbFN0b3JhZ2Ug5bm26K6+572u6L+H5pyf5pe26Ze0XHJcbiAqIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgU3RvcmU8c3RyaW5nPigndG9rZW4nLCAnJywge1xyXG4gKiAgIHN0b3JhZ2VFbmdpbmU6IGxvY2FsU3RvcmFnZSxcclxuICogICBleHBpcmVzOiAzNjAwMDAwIC8vIDHlsI/ml7blkI7ov4fmnJ9cclxuICogfSk7XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RvcmU8VD4ge1xyXG4gICAgcHJpdmF0ZSB2YWx1ZTogVDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZTogU3RvcmFnZTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhwaXJlcz86IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJ3lp4vljJYgU3RvcmUg57G755qE5a6e5L6LXHJcbiAgICAgKiBAcGFyYW0ga2V5IOe8k+WtmOWAvOeahOmUruWQjVxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSDliJ3lp4vlgLzvvIzpu5jorqTlgLzkvJrooqvlrZjlgqjlubbov5Tlm57nm7TliLDorr7nva7mlrDnmoTlgLxcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIOmFjee9rumAiemhue+8jOWMheaLrOWtmOWCqOW8leaTjuWSjOi/h+acn+aXtumXtFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBULCBvcHRpb25zPzogU3RvcmVPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBzdG9yYWdlRW5naW5lID0gc2Vzc2lvblN0b3JhZ2UsIGV4cGlyZXMgfSA9IG9wdGlvbnMgPz8ge307XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZUVuZ2luZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzO1xyXG5cclxuICAgICAgICAvLyDlsJ3or5Xku47lrZjlgqjkuK3or7vlj5bmlbDmja5cclxuICAgICAgICB0aGlzLmxvYWRGcm9tU3RvcmFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog55Sf5oiQ5a2Y5YKo6ZSu5ZCNXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgQCR7cHJlZml4fV8ke3RoaXMua2V5fWAudG9Mb2NhbGVVcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOS7juWtmOWCqOS4reWKoOi9veaVsOaNrlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYWRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGV4cGlyeSB9ID0gSlNPTi5wYXJzZShzdG9yZWRWYWx1ZSkgYXMgU3RvcmFnZURhdGE8VD47XHJcblxyXG4gICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKbov4fmnJ9cclxuICAgICAgICAgICAgaWYgKCFleHBpcnkgfHwgZXhwaXJ5ID4gRGF0ZS5ub3coKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyDov4fmnJ/liJnliKDpmaRcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYOS7juWtmOWCqOS4reivu+WPluaVsOaNruWksei0pSAoa2V5OiAke3RoaXMuZ2V0U3RvcmFnZUtleSgpfSk6YCwgZXJyb3IpO1xyXG4gICAgICAgICAgICAvLyDmlbDmja7mjZ/lnY/ml7bmuIXpmaRcclxuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjee8k+WtmOeahOWAvFxyXG4gICAgICogQHJldHVybnMg57yT5a2Y55qE5YC8XHJcbiAgICAgKi9cclxuICAgIGdldCgpOiBUIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiuvue9ruaWsOeahOe8k+WtmOWAvFxyXG4gICAgICogQHBhcmFtIG5ld1ZhbHVlIOaWsOeahOWAvFxyXG4gICAgICovXHJcbiAgICBzZXQobmV3VmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhOiBTdG9yYWdlRGF0YTxUPiA9IHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IG5ld1ZhbHVlLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJ5OiB0aGlzLmV4cGlyZXMgPyBEYXRlLm5vdygpICsgdGhpcy5leHBpcmVzIDogbnVsbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCksIEpTT04uc3RyaW5naWZ5KHN0b3JhZ2VEYXRhKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihg5a2Y5YKo5pWw5o2u5aSx6LSlIChrZXk6ICR7dGhpcy5nZXRTdG9yYWdlS2V5KCl9KTpgLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5L2/55So5o+Q5L6b55qE5Ye95pWw5pu05paw57yT5a2Y55qE5YC8XHJcbiAgICAgKiBAcGFyYW0gdXBkYXRlRm4g5LiA5Liq5o6l5Y+X5b2T5YmN5YC85bm26L+U5Zue5paw5YC855qE5Ye95pWwXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGNvbnN0IGNvdW50U3RvcmUgPSBuZXcgU3RvcmU8bnVtYmVyPignY291bnQnLCAwKTtcclxuICAgICAqIGNvdW50U3RvcmUudXBkYXRlKGNvdW50ID0+IGNvdW50ICsgMSk7XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZSh1cGRhdGVGbjogKGN1cnJlbnRWYWx1ZTogVCkgPT4gVCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdXBkYXRlRm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXQodXBkYXRlRm4odGhpcy52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOa4hemZpOe8k+WtmOaVsOaNrlxyXG4gICAgICovXHJcbiAgICBjbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihg5riF6Zmk5a2Y5YKo5pWw5o2u5aSx6LSlIChrZXk6ICR7dGhpcy5nZXRTdG9yYWdlS2V5KCl9KTpgLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5qOA5p+l57yT5a2Y5piv5ZCm5a2Y5Zyo5LiU5pyq6L+H5pyfXHJcbiAgICAgKiBAcmV0dXJucyDlpoLmnpznvJPlrZjlrZjlnKjkuJTmnKrov4fmnJ/ov5Tlm54gdHJ1Ze+8jOWQpuWImei/lOWbniBmYWxzZVxyXG4gICAgICovXHJcbiAgICBoYXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBleHBpcnkgfSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpIGFzIFN0b3JhZ2VEYXRhPFQ+O1xyXG4gICAgICAgICAgICByZXR1cm4gIWV4cGlyeSB8fCBleHBpcnkgPiBEYXRlLm5vdygpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|