@k8slens/hotbar-contracts 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +308 -0
- package/dist/src/add-to-hotbar.d.ts +54 -0
- package/dist/src/add-to-hotbar.d.ts.map +1 -0
- package/dist/src/eject-hotbar-item.d.ts +18 -0
- package/dist/src/eject-hotbar-item.d.ts.map +1 -0
- package/dist/src/get-hotbar-item-kind-injectable-bunch.d.ts +60 -0
- package/dist/src/get-hotbar-item-kind-injectable-bunch.d.ts.map +1 -0
- package/dist/src/has-hotbar-item.d.ts +27 -0
- package/dist/src/has-hotbar-item.d.ts.map +1 -0
- package/dist/src/hotbar-item-component.d.ts +44 -0
- package/dist/src/hotbar-item-component.d.ts.map +1 -0
- package/dist/src/hotbar-item-context-menu-item.d.ts +48 -0
- package/dist/src/hotbar-item-context-menu-item.d.ts.map +1 -0
- package/dist/src/hotbar-item-frame.d.ts +18 -0
- package/dist/src/hotbar-item-frame.d.ts.map +1 -0
- package/dist/src/hotbar-item-id.d.ts +6 -0
- package/dist/src/hotbar-item-id.d.ts.map +1 -0
- package/dist/src/hotbar-item-kind.d.ts +69 -0
- package/dist/src/hotbar-item-kind.d.ts.map +1 -0
- package/dist/src/hotbar-item-persisted-data.d.ts +33 -0
- package/dist/src/hotbar-item-persisted-data.d.ts.map +1 -0
- package/dist/src/hotbar-item.d.ts +12 -0
- package/dist/src/hotbar-item.d.ts.map +1 -0
- package/dist/src/insert-hotbar-item.d.ts +17 -0
- package/dist/src/insert-hotbar-item.d.ts.map +1 -0
- package/dist/src/is-in-hotbar.d.ts +89 -0
- package/dist/src/is-in-hotbar.d.ts.map +1 -0
- package/dist/src/remove-from-hotbar.d.ts +47 -0
- package/dist/src/remove-from-hotbar.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +63 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type { HotbarItemId } from "./src/hotbar-item-id";
|
|
2
|
+
export { getHotbarItemKind, getHotbarItemKindId, type HotbarItemKind, type HotbarItemKindId, type HotbarItemPersistedData, parseHotbarItemKindId, } from "./src/hotbar-item-kind";
|
|
3
|
+
export type { HotbarItem } from "./src/hotbar-item";
|
|
4
|
+
export { getHotbarItemKindInjectableBunch, type HotbarItemKindBunchParams, type HotbarItemProps, } from "./src/get-hotbar-item-kind-injectable-bunch";
|
|
5
|
+
export { addToHotbarInjectionToken, type AddToHotbar, type AddToHotbarTokenFor, type AddToHotbarTokenForKind, } from "./src/add-to-hotbar";
|
|
6
|
+
export { removeFromHotbarInjectionToken, type RemoveFromHotbar, type RemoveFromHotbarTokenFor, type RemoveFromHotbarTokenForKind, } from "./src/remove-from-hotbar";
|
|
7
|
+
export { isInHotbarInjectionToken, isInHotbarReactiveInjectionToken, type IsInHotbar, type IsInHotbarReactive, type IsInHotbarReactiveTokenFor, type IsInHotbarReactiveTokenForKind, type IsInHotbarTokenFor, type IsInHotbarTokenForKind, } from "./src/is-in-hotbar";
|
|
8
|
+
export { hotbarItemContextMenuItemInjectionToken, type HotbarItemContextMenuItemFor, type HotbarItemContextMenuItemTokenFor, type HotbarItemContextMenuItemTokenForKind, } from "./src/hotbar-item-context-menu-item";
|
|
9
|
+
/**
|
|
10
|
+
* The hotbar's side of the contract: implemented by the hotbar, built on by
|
|
11
|
+
* `getHotbarItemKindInjectableBunch`. A kind has no reason to touch these directly.
|
|
12
|
+
*/
|
|
13
|
+
export { hotbarItemComponentInjectionToken, type HotbarItemComponent, type HotbarItemComponentFactory, type HotbarItemComponentProps, type HotbarItemComponentTokenFor, type HotbarItemComponentTokenForKind, } from "./src/hotbar-item-component";
|
|
14
|
+
export { HotbarItemFrame, type HotbarItemFrameProps } from "./src/hotbar-item-frame";
|
|
15
|
+
export { hotbarItemPersistedDataInjectionToken, type HotbarItemPersistedDataEntry, type HotbarItemPersistedDataStore, type HotbarItemPersistedDataStoreFor, } from "./src/hotbar-item-persisted-data";
|
|
16
|
+
export { insertHotbarItemInjectionToken, type InsertHotbarItem } from "./src/insert-hotbar-item";
|
|
17
|
+
export { ejectHotbarItemInjectionToken, type EjectHotbarItem } from "./src/eject-hotbar-item";
|
|
18
|
+
export { hasHotbarItemInjectionToken, hasHotbarItemReactiveInjectionToken, type HasHotbarItem, type HasHotbarItemReactive, } from "./src/has-hotbar-item";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,gCAAgC,EAChC,KAAK,yBAAyB,EAC9B,KAAK,eAAe,GACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,yBAAyB,EACzB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,GAClC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAChC,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uCAAuC,EACvC,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,qCAAqC,GAC3C,MAAM,qCAAqC,CAAC;AAE7C;;;GAGG;AACH,OAAO,EACL,iCAAiC,EACjC,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,GACrC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,qCAAqC,EACrC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,GACrC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,6BAA6B,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EACL,2BAA2B,EAC3B,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
HotbarItemFrame: () => HotbarItemFrame,
|
|
24
|
+
addToHotbarInjectionToken: () => addToHotbarInjectionToken,
|
|
25
|
+
ejectHotbarItemInjectionToken: () => ejectHotbarItemInjectionToken,
|
|
26
|
+
getHotbarItemKind: () => getHotbarItemKind,
|
|
27
|
+
getHotbarItemKindId: () => getHotbarItemKindId,
|
|
28
|
+
getHotbarItemKindInjectableBunch: () => getHotbarItemKindInjectableBunch,
|
|
29
|
+
hasHotbarItemInjectionToken: () => hasHotbarItemInjectionToken,
|
|
30
|
+
hasHotbarItemReactiveInjectionToken: () => hasHotbarItemReactiveInjectionToken,
|
|
31
|
+
hotbarItemComponentInjectionToken: () => hotbarItemComponentInjectionToken,
|
|
32
|
+
hotbarItemContextMenuItemInjectionToken: () => hotbarItemContextMenuItemInjectionToken,
|
|
33
|
+
hotbarItemPersistedDataInjectionToken: () => hotbarItemPersistedDataInjectionToken,
|
|
34
|
+
insertHotbarItemInjectionToken: () => insertHotbarItemInjectionToken,
|
|
35
|
+
isInHotbarInjectionToken: () => isInHotbarInjectionToken,
|
|
36
|
+
isInHotbarReactiveInjectionToken: () => isInHotbarReactiveInjectionToken,
|
|
37
|
+
parseHotbarItemKindId: () => parseHotbarItemKindId,
|
|
38
|
+
removeFromHotbarInjectionToken: () => removeFromHotbarInjectionToken
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(index_exports);
|
|
41
|
+
|
|
42
|
+
// src/hotbar-item-kind.ts
|
|
43
|
+
var import_injectable = require("@k8slens/injectable");
|
|
44
|
+
var getHotbarItemKindId = (kind, scopeIds) => [...scopeIds, kind].join(":");
|
|
45
|
+
var parseHotbarItemKindId = (kindId) => {
|
|
46
|
+
const segments = String(kindId).split(":");
|
|
47
|
+
return {
|
|
48
|
+
kind: segments[segments.length - 1],
|
|
49
|
+
scopeIds: segments.slice(0, -1)
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
var getHotbarItemKind = () => (specifier) => {
|
|
53
|
+
if (specifier.includes(":")) {
|
|
54
|
+
throw new Error(
|
|
55
|
+
`Tried to create hotbar item kind "${specifier}", but ":" is reserved for scoping the kind to its registration.`
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
return (0, import_injectable.getTypedSpecifier)()(specifier);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// src/get-hotbar-item-kind-injectable-bunch.tsx
|
|
62
|
+
var import_injectable10 = require("@k8slens/injectable");
|
|
63
|
+
var import_injectable_react2 = require("@k8slens/injectable-react");
|
|
64
|
+
var import_mobx_react = require("mobx-react");
|
|
65
|
+
var import_react = require("react");
|
|
66
|
+
|
|
67
|
+
// src/add-to-hotbar.ts
|
|
68
|
+
var import_injectable2 = require("@k8slens/injectable");
|
|
69
|
+
var addToHotbarTokenForKind = (kind) => (0, import_injectable2.getInjectionToken2)({
|
|
70
|
+
id: `add-to-hotbar-${kind}`,
|
|
71
|
+
speciality: kind,
|
|
72
|
+
cardinality: "zero-or-many"
|
|
73
|
+
})(
|
|
74
|
+
(scopeIds) => (0, import_injectable2.getInjectionToken2)({
|
|
75
|
+
id: `add-to-hotbar-${getHotbarItemKindId(kind, scopeIds)}`,
|
|
76
|
+
speciality: getHotbarItemKindId(kind, scopeIds),
|
|
77
|
+
cardinality: "one"
|
|
78
|
+
})()
|
|
79
|
+
);
|
|
80
|
+
var addToHotbarInjectionToken = (0, import_injectable2.getInjectionToken2)({
|
|
81
|
+
id: "add-to-hotbar",
|
|
82
|
+
cardinality: "zero-or-many"
|
|
83
|
+
})(addToHotbarTokenForKind);
|
|
84
|
+
|
|
85
|
+
// src/eject-hotbar-item.ts
|
|
86
|
+
var import_injectable3 = require("@k8slens/injectable");
|
|
87
|
+
var ejectHotbarItemInjectionToken = (0, import_injectable3.getInjectionToken2)({
|
|
88
|
+
id: "eject-hotbar-item",
|
|
89
|
+
cardinality: "one"
|
|
90
|
+
})();
|
|
91
|
+
|
|
92
|
+
// src/has-hotbar-item.ts
|
|
93
|
+
var import_injectable4 = require("@k8slens/injectable");
|
|
94
|
+
var hasHotbarItemInjectionToken = (0, import_injectable4.getInjectionToken2)({
|
|
95
|
+
id: "has-hotbar-item",
|
|
96
|
+
cardinality: "one"
|
|
97
|
+
})();
|
|
98
|
+
var hasHotbarItemReactiveInjectionToken = (0, import_injectable4.getInjectionToken2)({
|
|
99
|
+
id: "has-hotbar-item-reactive",
|
|
100
|
+
cardinality: "one"
|
|
101
|
+
})();
|
|
102
|
+
|
|
103
|
+
// src/hotbar-item-component.ts
|
|
104
|
+
var import_injectable5 = require("@k8slens/injectable");
|
|
105
|
+
var hotbarItemComponentTokenForKind = (kind) => (0, import_injectable5.getInjectionToken2)({
|
|
106
|
+
id: `hotbar-item-component-${kind}`,
|
|
107
|
+
speciality: kind,
|
|
108
|
+
cardinality: "zero-or-many"
|
|
109
|
+
})(
|
|
110
|
+
(scopeIds) => (0, import_injectable5.getInjectionToken2)({
|
|
111
|
+
id: `hotbar-item-component-${getHotbarItemKindId(kind, scopeIds)}`,
|
|
112
|
+
speciality: getHotbarItemKindId(kind, scopeIds),
|
|
113
|
+
cardinality: "zero-or-one"
|
|
114
|
+
})()
|
|
115
|
+
);
|
|
116
|
+
var hotbarItemComponentInjectionToken = (0, import_injectable5.getInjectionToken2)({
|
|
117
|
+
id: "hotbar-item-component",
|
|
118
|
+
cardinality: "zero-or-many"
|
|
119
|
+
})(hotbarItemComponentTokenForKind);
|
|
120
|
+
|
|
121
|
+
// src/hotbar-item-frame.ts
|
|
122
|
+
var import_injectable_react = require("@k8slens/injectable-react");
|
|
123
|
+
var HotbarItemFrame = (0, import_injectable_react.getInjectionTokenComponent2)({
|
|
124
|
+
id: "hotbar-item-frame"
|
|
125
|
+
})();
|
|
126
|
+
|
|
127
|
+
// src/hotbar-item-persisted-data.ts
|
|
128
|
+
var import_injectable6 = require("@k8slens/injectable");
|
|
129
|
+
var hotbarItemPersistedDataInjectionToken = (0, import_injectable6.getInjectionToken2)({
|
|
130
|
+
id: "hotbar-item-persisted-data",
|
|
131
|
+
cardinality: "one"
|
|
132
|
+
})();
|
|
133
|
+
|
|
134
|
+
// src/insert-hotbar-item.ts
|
|
135
|
+
var import_injectable7 = require("@k8slens/injectable");
|
|
136
|
+
var insertHotbarItemInjectionToken = (0, import_injectable7.getInjectionToken2)({
|
|
137
|
+
id: "insert-hotbar-item",
|
|
138
|
+
cardinality: "one"
|
|
139
|
+
})();
|
|
140
|
+
|
|
141
|
+
// src/is-in-hotbar.ts
|
|
142
|
+
var import_injectable8 = require("@k8slens/injectable");
|
|
143
|
+
var isInHotbarTokenForKind = (kind) => (0, import_injectable8.getInjectionToken2)({
|
|
144
|
+
id: `is-in-hotbar-${kind}`,
|
|
145
|
+
speciality: kind,
|
|
146
|
+
cardinality: "zero-or-many"
|
|
147
|
+
})(
|
|
148
|
+
(scopeIds) => (0, import_injectable8.getInjectionToken2)({
|
|
149
|
+
id: `is-in-hotbar-${getHotbarItemKindId(kind, scopeIds)}`,
|
|
150
|
+
speciality: getHotbarItemKindId(kind, scopeIds),
|
|
151
|
+
cardinality: "one"
|
|
152
|
+
})()
|
|
153
|
+
);
|
|
154
|
+
var isInHotbarInjectionToken = (0, import_injectable8.getInjectionToken2)({
|
|
155
|
+
id: "is-in-hotbar",
|
|
156
|
+
cardinality: "zero-or-many"
|
|
157
|
+
})(isInHotbarTokenForKind);
|
|
158
|
+
var isInHotbarReactiveTokenForKind = (kind) => (0, import_injectable8.getInjectionToken2)({
|
|
159
|
+
id: `is-in-hotbar-reactive-${kind}`,
|
|
160
|
+
speciality: kind,
|
|
161
|
+
cardinality: "zero-or-many"
|
|
162
|
+
})(
|
|
163
|
+
(scopeIds) => (0, import_injectable8.getInjectionToken2)({
|
|
164
|
+
id: `is-in-hotbar-reactive-${getHotbarItemKindId(kind, scopeIds)}`,
|
|
165
|
+
speciality: getHotbarItemKindId(kind, scopeIds),
|
|
166
|
+
cardinality: "one"
|
|
167
|
+
})()
|
|
168
|
+
);
|
|
169
|
+
var isInHotbarReactiveInjectionToken = (0, import_injectable8.getInjectionToken2)({
|
|
170
|
+
id: "is-in-hotbar-reactive",
|
|
171
|
+
cardinality: "zero-or-many"
|
|
172
|
+
})(isInHotbarReactiveTokenForKind);
|
|
173
|
+
|
|
174
|
+
// src/remove-from-hotbar.ts
|
|
175
|
+
var import_injectable9 = require("@k8slens/injectable");
|
|
176
|
+
var removeFromHotbarTokenForKind = (kind) => (0, import_injectable9.getInjectionToken2)({
|
|
177
|
+
id: `remove-from-hotbar-${kind}`,
|
|
178
|
+
speciality: kind,
|
|
179
|
+
cardinality: "zero-or-many"
|
|
180
|
+
})(
|
|
181
|
+
(scopeIds) => (0, import_injectable9.getInjectionToken2)({
|
|
182
|
+
id: `remove-from-hotbar-${getHotbarItemKindId(kind, scopeIds)}`,
|
|
183
|
+
speciality: getHotbarItemKindId(kind, scopeIds),
|
|
184
|
+
cardinality: "one"
|
|
185
|
+
})()
|
|
186
|
+
);
|
|
187
|
+
var removeFromHotbarInjectionToken = (0, import_injectable9.getInjectionToken2)({
|
|
188
|
+
id: "remove-from-hotbar",
|
|
189
|
+
cardinality: "zero-or-many"
|
|
190
|
+
})(removeFromHotbarTokenForKind);
|
|
191
|
+
|
|
192
|
+
// src/get-hotbar-item-kind-injectable-bunch.tsx
|
|
193
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
194
|
+
var getHotbarItemKindInjectableBunch = ({
|
|
195
|
+
kind,
|
|
196
|
+
Component
|
|
197
|
+
}) => {
|
|
198
|
+
const HotbarItemOfKind = (0, import_mobx_react.observer)(({ item }) => {
|
|
199
|
+
const di = (0, import_injectable_react2.useDi)();
|
|
200
|
+
const persistedData = (0, import_react.useMemo)(() => di.inject(hotbarItemPersistedDataInjectionToken, item.kind), [di, item.kind]);
|
|
201
|
+
const entry = persistedData.get(item.id).get();
|
|
202
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HotbarItemFrame, { item, children: entry ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { id: item.id, persistedData: entry.persistedData }) : null });
|
|
203
|
+
});
|
|
204
|
+
return (0, import_injectable10.getInjectableBunch)({
|
|
205
|
+
component: (0, import_injectable_react2.getInjectableComponent2)({
|
|
206
|
+
id: `hotbar-item-component-${kind}`,
|
|
207
|
+
Component: HotbarItemOfKind,
|
|
208
|
+
injectionToken: ({ scopeIds }) => hotbarItemComponentInjectionToken.for(kind).for(scopeIds)
|
|
209
|
+
}),
|
|
210
|
+
addToHotbar: (0, import_injectable10.getInjectable2)({
|
|
211
|
+
id: `add-to-hotbar-${kind}`,
|
|
212
|
+
consumptions: [
|
|
213
|
+
hotbarItemPersistedDataInjectionToken,
|
|
214
|
+
insertHotbarItemInjectionToken,
|
|
215
|
+
hasHotbarItemInjectionToken
|
|
216
|
+
],
|
|
217
|
+
instantiate: (di) => {
|
|
218
|
+
const kindId = getHotbarItemKindId(kind, di.scopeIds);
|
|
219
|
+
const persistedData = di.inject(hotbarItemPersistedDataInjectionToken)(kindId);
|
|
220
|
+
const insertHotbarItem = di.inject(insertHotbarItemInjectionToken)();
|
|
221
|
+
const hasHotbarItem = di.inject(hasHotbarItemInjectionToken)();
|
|
222
|
+
const addToHotbar = async ({ id, persistedData: data }) => {
|
|
223
|
+
if (await hasHotbarItem({ id, kind: kindId })) {
|
|
224
|
+
throw new Error(`Tried to add hotbar item "${id}" of kind "${kindId}", but it is already in the hotbar.`);
|
|
225
|
+
}
|
|
226
|
+
await persistedData.set(id, data);
|
|
227
|
+
await insertHotbarItem({ id, kind: kindId });
|
|
228
|
+
};
|
|
229
|
+
return () => addToHotbar;
|
|
230
|
+
},
|
|
231
|
+
injectionToken: ({ scopeIds }) => addToHotbarInjectionToken.for(kind).for(scopeIds)
|
|
232
|
+
}),
|
|
233
|
+
// The hotbar answers for every kind at once, given the whole { id, kind }; these bind the
|
|
234
|
+
// kind, so a consumer addresses items by kind first and id second, never by id alone.
|
|
235
|
+
isInHotbar: (0, import_injectable10.getInjectable2)({
|
|
236
|
+
id: `is-in-hotbar-${kind}`,
|
|
237
|
+
consumptions: [hasHotbarItemInjectionToken],
|
|
238
|
+
instantiate: (di) => {
|
|
239
|
+
const kindId = getHotbarItemKindId(kind, di.scopeIds);
|
|
240
|
+
const hasHotbarItem = di.inject(hasHotbarItemInjectionToken)();
|
|
241
|
+
const isInHotbar = (id) => hasHotbarItem({ id, kind: kindId });
|
|
242
|
+
return () => isInHotbar;
|
|
243
|
+
},
|
|
244
|
+
injectionToken: ({ scopeIds }) => isInHotbarInjectionToken.for(kind).for(scopeIds)
|
|
245
|
+
}),
|
|
246
|
+
isInHotbarReactive: (0, import_injectable10.getInjectable2)({
|
|
247
|
+
id: `is-in-hotbar-reactive-${kind}`,
|
|
248
|
+
consumptions: [hasHotbarItemReactiveInjectionToken],
|
|
249
|
+
instantiate: (di) => {
|
|
250
|
+
const kindId = getHotbarItemKindId(kind, di.scopeIds);
|
|
251
|
+
const hasHotbarItemReactive = di.inject(hasHotbarItemReactiveInjectionToken);
|
|
252
|
+
const isInHotbarReactive = (id) => hasHotbarItemReactive({ id, kind: kindId });
|
|
253
|
+
return isInHotbarReactive;
|
|
254
|
+
},
|
|
255
|
+
injectionToken: ({ scopeIds }) => isInHotbarReactiveInjectionToken.for(kind).for(scopeIds)
|
|
256
|
+
}),
|
|
257
|
+
removeFromHotbar: (0, import_injectable10.getInjectable2)({
|
|
258
|
+
id: `remove-from-hotbar-${kind}`,
|
|
259
|
+
consumptions: [ejectHotbarItemInjectionToken],
|
|
260
|
+
instantiate: (di) => {
|
|
261
|
+
const kindId = getHotbarItemKindId(kind, di.scopeIds);
|
|
262
|
+
const ejectHotbarItem = di.inject(ejectHotbarItemInjectionToken)();
|
|
263
|
+
const removeFromHotbar = (id) => ejectHotbarItem({ id, kind: kindId });
|
|
264
|
+
return () => removeFromHotbar;
|
|
265
|
+
},
|
|
266
|
+
injectionToken: ({ scopeIds }) => removeFromHotbarInjectionToken.for(kind).for(scopeIds)
|
|
267
|
+
})
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
// src/hotbar-item-context-menu-item.ts
|
|
272
|
+
var import_injectable11 = require("@k8slens/injectable");
|
|
273
|
+
var hotbarItemContextMenuItemInjectionToken = (0, import_injectable11.getInjectionToken2)({
|
|
274
|
+
id: "hotbar-item-context-menu-item",
|
|
275
|
+
cardinality: "zero-or-many"
|
|
276
|
+
})(
|
|
277
|
+
(kind) => (0, import_injectable11.getInjectionToken2)({
|
|
278
|
+
id: `hotbar-item-context-menu-item-${kind}`,
|
|
279
|
+
speciality: kind,
|
|
280
|
+
cardinality: "zero-or-many"
|
|
281
|
+
})(
|
|
282
|
+
(scopeIds) => (0, import_injectable11.getInjectionToken2)({
|
|
283
|
+
id: `hotbar-item-context-menu-item-${getHotbarItemKindId(kind, scopeIds)}`,
|
|
284
|
+
speciality: getHotbarItemKindId(kind, scopeIds),
|
|
285
|
+
cardinality: "zero-or-many"
|
|
286
|
+
})()
|
|
287
|
+
)
|
|
288
|
+
);
|
|
289
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
290
|
+
0 && (module.exports = {
|
|
291
|
+
HotbarItemFrame,
|
|
292
|
+
addToHotbarInjectionToken,
|
|
293
|
+
ejectHotbarItemInjectionToken,
|
|
294
|
+
getHotbarItemKind,
|
|
295
|
+
getHotbarItemKindId,
|
|
296
|
+
getHotbarItemKindInjectableBunch,
|
|
297
|
+
hasHotbarItemInjectionToken,
|
|
298
|
+
hasHotbarItemReactiveInjectionToken,
|
|
299
|
+
hotbarItemComponentInjectionToken,
|
|
300
|
+
hotbarItemContextMenuItemInjectionToken,
|
|
301
|
+
hotbarItemPersistedDataInjectionToken,
|
|
302
|
+
insertHotbarItemInjectionToken,
|
|
303
|
+
isInHotbarInjectionToken,
|
|
304
|
+
isInHotbarReactiveInjectionToken,
|
|
305
|
+
parseHotbarItemKindId,
|
|
306
|
+
removeFromHotbarInjectionToken
|
|
307
|
+
});
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWtpbmQudHMiLCAiLi4vc3JjL2dldC1ob3RiYXItaXRlbS1raW5kLWluamVjdGFibGUtYnVuY2gudHN4IiwgIi4uL3NyYy9hZGQtdG8taG90YmFyLnRzIiwgIi4uL3NyYy9lamVjdC1ob3RiYXItaXRlbS50cyIsICIuLi9zcmMvaGFzLWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1jb21wb25lbnQudHMiLCAiLi4vc3JjL2hvdGJhci1pdGVtLWZyYW1lLnRzIiwgIi4uL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YS50cyIsICIuLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtLnRzIiwgIi4uL3NyYy9pcy1pbi1ob3RiYXIudHMiLCAiLi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhci50cyIsICIuLi9zcmMvaG90YmFyLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vc3JjL2hvdGJhci1pdGVtLWlkXCI7XG5leHBvcnQge1xuICBnZXRIb3RiYXJJdGVtS2luZCxcbiAgZ2V0SG90YmFySXRlbUtpbmRJZCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZCxcbiAgdHlwZSBIb3RiYXJJdGVtS2luZElkLFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhLFxuICBwYXJzZUhvdGJhckl0ZW1LaW5kSWQsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1raW5kXCI7XG5leHBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW1cIjtcblxuZXhwb3J0IHtcbiAgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2gsXG4gIHR5cGUgSG90YmFySXRlbUtpbmRCdW5jaFBhcmFtcyxcbiAgdHlwZSBIb3RiYXJJdGVtUHJvcHMsXG59IGZyb20gXCIuL3NyYy9nZXQtaG90YmFyLWl0ZW0ta2luZC1pbmplY3RhYmxlLWJ1bmNoXCI7XG5leHBvcnQge1xuICBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLFxuICB0eXBlIEFkZFRvSG90YmFyLFxuICB0eXBlIEFkZFRvSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9hZGQtdG8taG90YmFyXCI7XG5leHBvcnQge1xuICByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgUmVtb3ZlRnJvbUhvdGJhcixcbiAgdHlwZSBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IsXG4gIHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCxcbn0gZnJvbSBcIi4vc3JjL3JlbW92ZS1mcm9tLWhvdGJhclwiO1xuZXhwb3J0IHtcbiAgaXNJbkhvdGJhckluamVjdGlvblRva2VuLFxuICBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBJc0luSG90YmFyLFxuICB0eXBlIElzSW5Ib3RiYXJSZWFjdGl2ZSxcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcixcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQsXG4gIHR5cGUgSXNJbkhvdGJhclRva2VuRm9yLFxuICB0eXBlIElzSW5Ib3RiYXJUb2tlbkZvcktpbmQsXG59IGZyb20gXCIuL3NyYy9pcy1pbi1ob3RiYXJcIjtcbmV4cG9ydCB7XG4gIGhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yLFxuICB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvcixcbiAgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgc2lkZSBvZiB0aGUgY29udHJhY3Q6IGltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIsIGJ1aWx0IG9uIGJ5XG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLiBBIGtpbmQgaGFzIG5vIHJlYXNvbiB0byB0b3VjaCB0aGVzZSBkaXJlY3RseS5cbiAqL1xuZXhwb3J0IHtcbiAgaG90YmFySXRlbUNvbXBvbmVudEluamVjdGlvblRva2VuLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnQsXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudEZhY3RvcnksXG4gIHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzLFxuICB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcixcbiAgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kLFxufSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tY29tcG9uZW50XCI7XG5leHBvcnQgeyBIb3RiYXJJdGVtRnJhbWUsIHR5cGUgSG90YmFySXRlbUZyYW1lUHJvcHMgfSBmcm9tIFwiLi9zcmMvaG90YmFyLWl0ZW0tZnJhbWVcIjtcbmV4cG9ydCB7XG4gIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSG90YmFySXRlbVBlcnNpc3RlZERhdGFFbnRyeSxcbiAgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlLFxuICB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3IsXG59IGZyb20gXCIuL3NyYy9ob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YVwiO1xuZXhwb3J0IHsgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuLCB0eXBlIEluc2VydEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvaW5zZXJ0LWhvdGJhci1pdGVtXCI7XG5leHBvcnQgeyBlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiwgdHlwZSBFamVjdEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9zcmMvZWplY3QtaG90YmFyLWl0ZW1cIjtcbmV4cG9ydCB7XG4gIGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4sXG4gIHR5cGUgSGFzSG90YmFySXRlbSxcbiAgdHlwZSBIYXNIb3RiYXJJdGVtUmVhY3RpdmUsXG59IGZyb20gXCIuL3NyYy9oYXMtaG90YmFyLWl0ZW1cIjtcbiIsICJpbXBvcnQgeyBnZXRUeXBlZFNwZWNpZmllciwgdHlwZSBUeXBlZFNwZWNpZmllciwgdHlwZSBUeXBlZFNwZWNpZmllclR5cGUgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuXG4vKipcbiAqIElkZW50aWZpZXMgb25lIGtpbmQgb2YgaG90YmFyIGl0ZW06IHdoYXQgYW4gaXRlbSBpcywgYXMgb3Bwb3NlZCB0byB3aGljaCBpdGVtIGl0IGlzLlxuICogRXZlcnkgaXRlbSBpbiB0aGUgaG90YmFyIGlzIHBlcnNpc3RlZCBhcyBgeyBpZCwga2luZCB9YCwgYW5kIHRoZSBraW5kIGRlY2lkZXMgaG93IHRoZVxuICogaXRlbSByZW5kZXJzLlxuICpcbiAqIGBQZXJzaXN0ZWREYXRhYCBpcyB3aGF0IHRoZSBob3RiYXIgcGVyc2lzdHMgbmV4dCB0byB0aGUgaXRlbSdzIGlkIHdoZW4gdGhlIGl0ZW0gaXNcbiAqIGFkZGVkLCBhbmQgaGFuZHMgYmFjayB0byB0aGUga2luZCdzIGNvbXBvbmVudCB3aGVuZXZlciB0aGUgaXRlbSByZW5kZXJzLiBBIGtpbmRcbiAqIGNyZWF0ZWQgd2l0aG91dCBgUGVyc2lzdGVkRGF0YWAgcGVyc2lzdHMgbm90aGluZyBiZXlvbmQgdGhlIGlkLlxuICpcbiAqIEF0IHJ1bnRpbWUgYSBraW5kIGlzIGEgYnJhbmRlZCBzdHJpbmcsIHNvIGl0IGlzIHVzYWJsZSBhcyBhIGAuZm9yKClgIGtleS5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUtpbmQ8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+ID0gVHlwZWRTcGVjaWZpZXI8c3RyaW5nLCB7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEgfT47XG5cbi8qKlxuICogUmVjb3ZlcnMgdGhlIHBlcnNpc3RlZCBkYXRhIHR5cGUgYm91bmQgdG8gYSB7QGxpbmsgSG90YmFySXRlbUtpbmR9IG9yIGEge0BsaW5rIEhvdGJhckl0ZW1LaW5kSWR9LlxuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55PiB8IEhvdGJhckl0ZW1LaW5kSWQ8YW55Pj4gPSBUeXBlZFNwZWNpZmllclR5cGU8XG4gIFwicGVyc2lzdGVkRGF0YVwiLFxuICBLXG4+O1xuXG4vKipcbiAqIFdoYXQgdGhlIGhvdGJhciBrbm93cyBhIGtpbmQgYnk6IHRoZSBraW5kJ3Mgc3BlY2lmaWVyLCBzY29wZWQgdG8gd2hvZXZlciByZWdpc3RlcmVkIGl0LCBhc1xuICogb25lIHN0cmluZy4gSXQgaXMgd2hhdCB0aGUgaG90YmFyIHBlcnNpc3RzIGFzIGFuIGl0ZW0ncyBga2luZGAgYW5kIHdoYXQga2V5cyB0aGUga2luZCdzXG4gKiBwZXJzaXN0ZWQgZGF0YS4gVHdvIGV4dGVuc2lvbnMgZGVjbGFyaW5nIGEga2luZCB3aXRoIHRoZSBzYW1lIHNwZWNpZmllciBnZXQgdHdvIGlkcywgYmVjYXVzZVxuICogdGhlaXIgc2NvcGVzIGRpZmZlcjsgdGhlIHNwZWNpZmllciBhbG9uZSBpcyBuZXZlciBhbiBpZGVudGl0eS5cbiAqXG4gKiBUaGUgdG9rZW5zIHRha2UgdGhlIHR3byBwYXJ0cyBzZXBhcmF0ZWx5LCBgdG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgOyB0aGUgaWQgaXMgdGhlXG4gKiBob3RiYXIncyBzaWRlIG9mIHRoZSBzYW1lIGlkZW50aXR5LiBNYWRlIGJ5IHtAbGluayBnZXRIb3RiYXJJdGVtS2luZElkfSwgdGFrZW4gYXBhcnQgYnlcbiAqIHtAbGluayBwYXJzZUhvdGJhckl0ZW1LaW5kSWR9LiBUeXBlZCBieSB0aGUga2luZCdzIHBlcnNpc3RlZCBkYXRhLCBsaWtlIHRoZSBraW5kIGl0c2VsZi5cbiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUtpbmRJZDxQZXJzaXN0ZWREYXRhID0gdW5rbm93bj4gPSBUeXBlZFNwZWNpZmllcjxcbiAgc3RyaW5nLFxuICB7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGE7IHNjb3BlZEhvdGJhckl0ZW1LaW5kOiB0cnVlIH1cbj47XG5cbi8qKlxuICogVGhlIGlkIG9mIGEga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRoZSBnaXZlbiBzY29wZXM6IHRoZSBzY29wZSBpZHMsIHRoZW4gdGhlIHNwZWNpZmllcixcbiAqIGpvaW5lZCB3aXRoIFwiOlwiLCB3aGljaCBpcyB3aHkgYSBzcGVjaWZpZXIgbWF5IG5vdCBjb250YWluIG9uZS4gVGhlIHNhbWUga2luZCB1bmRlciB0aGUgc2FtZVxuICogc2NvcGVzIGFsd2F5cyB5aWVsZHMgdGhlIHNhbWUgaWQuIFRoZSBob3RiYXIgY29tcHV0ZXMgaXQgZnJvbSBhbiBpdGVtJ3Mga2luZCBhbmQgc2NvcGVzO1xuICogYSBraW5kJ3Mgb3duIGNvZGUgaGFzIG5vIG5lZWQgZm9yIGl0LCB0aGUgdG9rZW5zIHRha2UgdGhlIHBhcnRzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0SG90YmFySXRlbUtpbmRJZCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oXG4gIGtpbmQ6IEssXG4gIHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IEhvdGJhckl0ZW1LaW5kSWQ8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+ID0+XG4gIFsuLi5zY29wZUlkcywga2luZF0uam9pbihcIjpcIikgYXMgSG90YmFySXRlbUtpbmRJZDxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj47XG5cbi8qKlxuICogVGhlIHR3byBwYXJ0cyBvZiBhIGtpbmQgaWQ6IHRoZSBzY29wZXMgdGhlIGtpbmQgd2FzIHJlZ2lzdGVyZWQgdW5kZXIgYW5kIHRoZSBraW5kIGl0c2VsZixcbiAqIGFzIHRoZSB0b2tlbnMgdGFrZSB0aGVtOiBgdG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLiBUaGUgaW52ZXJzZSBvZlxuICoge0BsaW5rIGdldEhvdGJhckl0ZW1LaW5kSWR9LiBBIGtpbmQgcmVnaXN0ZXJlZCBhdCBjb250YWluZXIgbGV2ZWwsIG9yIHBlcnNpc3RlZCBiZWZvcmUga2luZHNcbiAqIHdlcmUgc2NvcGVkLCBwYXJzZXMgdG8gbm8gc2NvcGVzLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VIb3RiYXJJdGVtS2luZElkID0gPERhdGE+KFxuICBraW5kSWQ6IEhvdGJhckl0ZW1LaW5kSWQ8RGF0YT4sXG4pOiB7IHJlYWRvbmx5IGtpbmQ6IEhvdGJhckl0ZW1LaW5kPERhdGE+OyByZWFkb25seSBzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10gfSA9PiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gU3RyaW5nKGtpbmRJZCkuc3BsaXQoXCI6XCIpO1xuXG4gIHJldHVybiB7XG4gICAga2luZDogc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gYXMgSG90YmFySXRlbUtpbmQ8RGF0YT4sXG4gICAgc2NvcGVJZHM6IHNlZ21lbnRzLnNsaWNlKDAsIC0xKSxcbiAgfTtcbn07XG5cbi8qKlxuICogQ3VycmllZCBjcmVhdG9yIGZvciBhIHtAbGluayBIb3RiYXJJdGVtS2luZH0uIFRoZSBmaXJzdCBjYWxsIGJpbmRzIHRoZSBwZXJzaXN0ZWQgZGF0YVxuICogdHlwZTsgdGhlIHNlY29uZCB0aGUgZ2xvYmFsbHkgdW5pcXVlIHNwZWNpZmllciBzdHJpbmcuIFJlZ2lzdGVyIHRoZSBraW5kIHdpdGhcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHRoZW4gYWRkIGl0ZW1zIG9mIGl0IHdpdGhcbiAqIGBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBBIGtpbmQgd2hvc2UgaXRlbXMgY2FycnkgYSBVUkw6XG4gKiBleHBvcnQgY29uc3QgYm9va21hcmtIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kPHsgdXJsOiBzdHJpbmcgfT4oKShcIm15LWV4dGVuc2lvbi1ib29rbWFya1wiKTtcbiAqXG4gKiAvLyBBIGtpbmQgd2hvc2UgaXRlbXMgbmVlZCBub3RoaW5nIGJleW9uZCB0aGVpciBpZDpcbiAqIGV4cG9ydCBjb25zdCBkYXNoYm9hcmRIb3RiYXJJdGVtS2luZCA9IGdldEhvdGJhckl0ZW1LaW5kKCkoXCJteS1leHRlbnNpb24tZGFzaGJvYXJkXCIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZCA9XG4gIDxQZXJzaXN0ZWREYXRhID0gdm9pZD4oKSA9PlxuICA8UyBleHRlbmRzIHN0cmluZz4oc3BlY2lmaWVyOiBTKSA9PiB7XG4gICAgaWYgKHNwZWNpZmllci5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNyZWF0ZSBob3RiYXIgaXRlbSBraW5kIFwiJHtzcGVjaWZpZXJ9XCIsIGJ1dCBcIjpcIiBpcyByZXNlcnZlZCBmb3Igc2NvcGluZyB0aGUga2luZCB0byBpdHMgcmVnaXN0cmF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRUeXBlZFNwZWNpZmllcjx7IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEgfT4oKShzcGVjaWZpZXIpO1xuICB9O1xuIiwgImltcG9ydCB7IGdldEluamVjdGFibGUyLCBnZXRJbmplY3RhYmxlQnVuY2ggfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHsgZ2V0SW5qZWN0YWJsZUNvbXBvbmVudDIsIHVzZURpIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGUtcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmVyIH0gZnJvbSBcIm1vYngtcmVhY3RcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdHlwZSBBZGRUb0hvdGJhciwgYWRkVG9Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2FkZC10by1ob3RiYXJcIjtcbmltcG9ydCB7IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuIH0gZnJvbSBcIi4vZWplY3QtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IGhhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbiwgaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9oYXMtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudFByb3BzLCBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1jb21wb25lbnRcIjtcbmltcG9ydCB7IEhvdGJhckl0ZW1GcmFtZSB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWZyYW1lXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kLCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuaW1wb3J0IHsgaG90YmFySXRlbVBlcnNpc3RlZERhdGFJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2hvdGJhci1pdGVtLXBlcnNpc3RlZC1kYXRhXCI7XG5pbXBvcnQgeyBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9pbnNlcnQtaG90YmFyLWl0ZW1cIjtcbmltcG9ydCB7XG4gIHR5cGUgSXNJbkhvdGJhcixcbiAgdHlwZSBJc0luSG90YmFyUmVhY3RpdmUsXG4gIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbixcbiAgaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4sXG59IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuaW1wb3J0IHsgdHlwZSBSZW1vdmVGcm9tSG90YmFyLCByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9yZW1vdmUtZnJvbS1ob3RiYXJcIjtcblxuLyoqXG4gKiBXaGF0IGEga2luZCdzIGNvbXBvbmVudCByZWNlaXZlczogd2hpY2ggaXRlbSBpdCByZW5kZXJzLCBhbmQgdGhlIGRhdGEgdGhhdCB3YXNcbiAqIHBlcnNpc3RlZCB3aGVuIHRoZSBpdGVtIHdhcyBhZGRlZC4gVHlwZWQgYnkgdGhlIGtpbmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbVByb3BzPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PiB7XG4gIHJlYWRvbmx5IGlkOiBIb3RiYXJJdGVtSWQ7XG4gIHJlYWRvbmx5IHBlcnNpc3RlZERhdGE6IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1LaW5kQnVuY2hQYXJhbXM8SyBleHRlbmRzIEhvdGJhckl0ZW1LaW5kPGFueT4+IHtcbiAgLyoqIFRoZSBraW5kIGJlaW5nIHJlZ2lzdGVyZWQsIGZyb20gYGdldEhvdGJhckl0ZW1LaW5kYC4gKi9cbiAgcmVhZG9ubHkga2luZDogSztcbiAgLyoqXG4gICAqIFJlbmRlcnMgYW4gaXRlbSBvZiB0aGUga2luZCwgaW5zaWRlIHRoZSBzbG90J3MgZnJhbWUuIFJlY2VpdmVzIHRoZSBpdGVtJ3MgaWQgYW5kIGl0c1xuICAgKiBwZXJzaXN0ZWQgZGF0YSwgYW5kIGRlY2lkZXMgZXZlcnl0aGluZyBlbHNlOiB3aGF0IHRoZSBpdGVtIGxvb2tzIGxpa2UsIGFuZCB3aGF0XG4gICAqIGNsaWNraW5nIGl0IGRvZXMuIE11c3QgYmUgZGVmaW5lZCBhdCBtb2R1bGUgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBDb21wb25lbnQ6IFJlYWN0LkNvbXBvbmVudFR5cGU8SG90YmFySXRlbVByb3BzPEs+Pjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIGtpbmQgb2YgaG90YmFyIGl0ZW0uIE9uZSBjYWxsIGRlY2xhcmVzIGhvdyBpdGVtcyBvZiB0aGUga2luZCByZW5kZXIsIHdpcmVzXG4gKiB0aGVpciBwZXJzaXN0ZWQgZGF0YSwgYW5kIGdpdmVzIHRoZSBraW5kIGl0cyB0eXBlZCBhZGRlciwgYGFkZFRvSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgLFxuICogYWxvbmcgd2l0aCBpdHMgb3duIG1lbWJlcnNoaXAgcXVlcmllcyBhbmQgcmVtb3ZlciwgYGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAsXG4gKiBgaXNJbkhvdGJhclJlYWN0aXZlSW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIGFuZCBgcmVtb3ZlRnJvbUhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC5cbiAqXG4gKiBUaGUgbGFzdCBgLmZvcigpYCBpcyB0aGUgc2NvcGUgb2YgdGhlIHJlZ2lzdHJhdGlvbjogZXZlcnkgdG9rZW4gaGVyZSBpcyByZWdpc3RlcmVkIHVuZGVyXG4gKiB0aGUgc2NvcGVzIG9mIHdob2V2ZXIgcmVnaXN0ZXJzIHRoZSBidW5jaCwgc28gdHdvIGV4dGVuc2lvbnMgZGVjbGFyaW5nIGEga2luZCB3aXRoIHRoZSBzYW1lXG4gKiBzcGVjaWZpZXIgbmV2ZXIgbWVldC4gSXRlbXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIga2luZCwgaXRzIHNjb3BlcywgYW5kIHRoZW4gdGhlaXIgb3duXG4gKiBpZCwgbmV2ZXIgYnkgdGhlIGlkIGFsb25lLlxuICpcbiAqIFRoZSBob3RiYXIgZnJhbWVzIGVhY2ggaXRlbSwgcGVyc2lzdHMgaXRzIGB7IGlkLCBraW5kIH1gIGFuZCBkYXRhLCBwYWdlcyBhbmQgZHJhZ3MgaXQsXG4gKiBhbmQgZ2l2ZXMgaXRzIHJpZ2h0LWNsaWNrIG1lbnUgYSB3YXkgdG8gcmVtb3ZlIGl0LiBUaGUgY29tcG9uZW50IG93bnMgdGhlIHJlc3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZXhwb3J0IGNvbnN0IGJvb2ttYXJrSG90YmFySXRlbUtpbmQgPSBnZXRIb3RiYXJJdGVtS2luZDx7IHVybDogc3RyaW5nIH0+KCkoXCJteS1leHRlbnNpb24tYm9va21hcmtcIik7XG4gKlxuICogY29uc3QgQm9va21hcmsgPSAoeyBwZXJzaXN0ZWREYXRhIH06IEhvdGJhckl0ZW1Qcm9wczx0eXBlb2YgYm9va21hcmtIb3RiYXJJdGVtS2luZD4pID0+IChcbiAqICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBvcGVuKHBlcnNpc3RlZERhdGEudXJsKX0+e25ldyBVUkwocGVyc2lzdGVkRGF0YS51cmwpLmhvc3R9PC9CdXR0b24+XG4gKiApO1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoKHtcbiAqICAga2luZDogYm9va21hcmtIb3RiYXJJdGVtS2luZCxcbiAqICAgQ29tcG9uZW50OiBCb29rbWFyayxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaCA9IDxLIGV4dGVuZHMgSG90YmFySXRlbUtpbmQ8YW55Pj4oe1xuICBraW5kLFxuICBDb21wb25lbnQsXG59OiBIb3RiYXJJdGVtS2luZEJ1bmNoUGFyYW1zPEs+KSA9PiB7XG4gIC8vIEJ1aWx0IG9uY2UgcGVyIGtpbmQgc28gdGhlIGNvbXBvbmVudCByZWZlcmVuY2UgaXMgc3RhYmxlIGFjcm9zcyBpbmplY3Rpb25zOyBhIGZyZXNoXG4gIC8vIHJlZmVyZW5jZSBvbiBlYWNoIGluamVjdGlvbiB3b3VsZCByZW1vdW50IHRoZSBpdGVtIGFuZCBsb3NlIGl0cyBzdGF0ZS5cbiAgY29uc3QgSG90YmFySXRlbU9mS2luZCA9IG9ic2VydmVyKCh7IGl0ZW0gfTogSG90YmFySXRlbUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgY29uc3QgZGkgPSB1c2VEaSgpO1xuICAgIC8vIFJlc29sdmVkIHN0cmFpZ2h0IGZyb20gdGhlIGNvbnRhaW5lcjogdGhlIHN0b3JlIGlzIGEgc2luZ2xldG9uIHBlciBraW5kLCBhbmQgYVxuICAgIC8vIHN1c3BlbmRpbmcgaG9vayBoYXMgbm8gcGxhY2UgYXJvdW5kIGFuIGl0ZW0gdGhhdCBpcyBhbHJlYWR5IG9uIHNjcmVlbi4gVGhlIGl0ZW0gY2Fycmllc1xuICAgIC8vIHRoZSBraW5kJ3MgaWQsIHdoaWNoIGlzIHdoYXQgdGhlIHN0b3JlIGlzIGtleWVkIGJ5LlxuICAgIGNvbnN0IHBlcnNpc3RlZERhdGEgPSB1c2VNZW1vKCgpID0+IGRpLmluamVjdChob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuLCBpdGVtLmtpbmQpLCBbZGksIGl0ZW0ua2luZF0pO1xuICAgIGNvbnN0IGVudHJ5ID0gcGVyc2lzdGVkRGF0YS5nZXQoaXRlbS5pZCkuZ2V0KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhvdGJhckl0ZW1GcmFtZSBpdGVtPXtpdGVtfT5cbiAgICAgICAge2VudHJ5ID8gPENvbXBvbmVudCBpZD17aXRlbS5pZH0gcGVyc2lzdGVkRGF0YT17ZW50cnkucGVyc2lzdGVkRGF0YSBhcyBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPn0gLz4gOiBudWxsfVxuICAgICAgPC9Ib3RiYXJJdGVtRnJhbWU+XG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gVGhlIHRva2VucyBhcmUga2V5ZWQgYnkgdGhlIHNjb3BlcyBvZiB3aG9ldmVyIHJlZ2lzdGVycyB0aGlzIGJ1bmNoICh0aGUgYGluamVjdGlvblRva2VuYFxuICAvLyBmdW5jdGlvbnMpLCBhbmQgdGhlIGluc3RhbmNlcyBjb21wdXRlIHRoZSBob3RiYXIncyBpZCBvZiB0aGUga2luZCBmcm9tIHRoZWlyIG93blxuICAvLyBgZGkuc2NvcGVJZHNgLCBzbyB0aGUgdHdvIGFsd2F5cyBhZ3JlZS5cbiAgcmV0dXJuIGdldEluamVjdGFibGVCdW5jaCh7XG4gICAgY29tcG9uZW50OiBnZXRJbmplY3RhYmxlQ29tcG9uZW50Mih7XG4gICAgICBpZDogYGhvdGJhci1pdGVtLWNvbXBvbmVudC0ke2tpbmR9YCxcbiAgICAgIENvbXBvbmVudDogSG90YmFySXRlbU9mS2luZCxcbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBob3RiYXJJdGVtQ29tcG9uZW50SW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICBhZGRUb0hvdGJhcjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGBhZGQtdG8taG90YmFyLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbXG4gICAgICAgIGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4sXG4gICAgICAgIGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbixcbiAgICAgICAgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuLFxuICAgICAgXSxcblxuICAgICAgaW5zdGFudGlhdGU6IChkaSkgPT4ge1xuICAgICAgICBjb25zdCBraW5kSWQgPSBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIGRpLnNjb3BlSWRzKTtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkRGF0YSA9IGRpLmluamVjdChob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VuKShraW5kSWQpO1xuICAgICAgICBjb25zdCBpbnNlcnRIb3RiYXJJdGVtID0gZGkuaW5qZWN0KGluc2VydEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcbiAgICAgICAgY29uc3QgaGFzSG90YmFySXRlbSA9IGRpLmluamVjdChoYXNIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4pKCk7XG5cbiAgICAgICAgY29uc3QgYWRkVG9Ib3RiYXI6IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9IGFzeW5jICh7IGlkLCBwZXJzaXN0ZWREYXRhOiBkYXRhIH0pID0+IHtcbiAgICAgICAgICAvLyBDaGVja2VkIGJlZm9yZSBwZXJzaXN0aW5nLCBzbyBhIHJlamVjdGVkIGFkZCBsZWF2ZXMgdGhlIGl0ZW0ncyBkYXRhIGFzIGl0IHdhcy5cbiAgICAgICAgICBpZiAoYXdhaXQgaGFzSG90YmFySXRlbSh7IGlkLCBraW5kOiBraW5kSWQgfSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJpZWQgdG8gYWRkIGhvdGJhciBpdGVtIFwiJHtpZH1cIiBvZiBraW5kIFwiJHtraW5kSWR9XCIsIGJ1dCBpdCBpcyBhbHJlYWR5IGluIHRoZSBob3RiYXIuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgcGVyc2lzdGVkRGF0YS5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgIGF3YWl0IGluc2VydEhvdGJhckl0ZW0oeyBpZCwga2luZDoga2luZElkIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoKSA9PiBhZGRUb0hvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpLFxuICAgIH0pLFxuXG4gICAgLy8gVGhlIGhvdGJhciBhbnN3ZXJzIGZvciBldmVyeSBraW5kIGF0IG9uY2UsIGdpdmVuIHRoZSB3aG9sZSB7IGlkLCBraW5kIH07IHRoZXNlIGJpbmQgdGhlXG4gICAgLy8ga2luZCwgc28gYSBjb25zdW1lciBhZGRyZXNzZXMgaXRlbXMgYnkga2luZCBmaXJzdCBhbmQgaWQgc2Vjb25kLCBuZXZlciBieSBpZCBhbG9uZS5cbiAgICBpc0luSG90YmFyOiBnZXRJbmplY3RhYmxlMih7XG4gICAgICBpZDogYGlzLWluLWhvdGJhci0ke2tpbmR9YCxcbiAgICAgIGNvbnN1bXB0aW9uczogW2hhc0hvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGhhc0hvdGJhckl0ZW0gPSBkaS5pbmplY3QoaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuKSgpO1xuICAgICAgICBjb25zdCBpc0luSG90YmFyOiBJc0luSG90YmFyID0gKGlkKSA9PiBoYXNIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gaXNJbkhvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG5cbiAgICBpc0luSG90YmFyUmVhY3RpdmU6IGdldEluamVjdGFibGUyKHtcbiAgICAgIGlkOiBgaXMtaW4taG90YmFyLXJlYWN0aXZlLSR7a2luZH1gLFxuICAgICAgY29uc3VtcHRpb25zOiBbaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW5dLFxuXG4gICAgICBpbnN0YW50aWF0ZTogKGRpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtpbmRJZCA9IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgZGkuc2NvcGVJZHMpO1xuICAgICAgICBjb25zdCBoYXNIb3RiYXJJdGVtUmVhY3RpdmUgPSBkaS5pbmplY3QoaGFzSG90YmFySXRlbVJlYWN0aXZlSW5qZWN0aW9uVG9rZW4pO1xuICAgICAgICBjb25zdCBpc0luSG90YmFyUmVhY3RpdmU6IElzSW5Ib3RiYXJSZWFjdGl2ZSA9IChpZCkgPT4gaGFzSG90YmFySXRlbVJlYWN0aXZlKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gaXNJbkhvdGJhclJlYWN0aXZlO1xuICAgICAgfSxcblxuICAgICAgaW5qZWN0aW9uVG9rZW46ICh7IHNjb3BlSWRzIH0pID0+IGlzSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGlvblRva2VuLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpLFxuICAgIH0pLFxuXG4gICAgcmVtb3ZlRnJvbUhvdGJhcjogZ2V0SW5qZWN0YWJsZTIoe1xuICAgICAgaWQ6IGByZW1vdmUtZnJvbS1ob3RiYXItJHtraW5kfWAsXG4gICAgICBjb25zdW1wdGlvbnM6IFtlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbl0sXG5cbiAgICAgIGluc3RhbnRpYXRlOiAoZGkpID0+IHtcbiAgICAgICAgY29uc3Qga2luZElkID0gZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBkaS5zY29wZUlkcyk7XG4gICAgICAgIGNvbnN0IGVqZWN0SG90YmFySXRlbSA9IGRpLmluamVjdChlamVjdEhvdGJhckl0ZW1JbmplY3Rpb25Ub2tlbikoKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlRnJvbUhvdGJhcjogUmVtb3ZlRnJvbUhvdGJhciA9IChpZCkgPT4gZWplY3RIb3RiYXJJdGVtKHsgaWQsIGtpbmQ6IGtpbmRJZCB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4gcmVtb3ZlRnJvbUhvdGJhcjtcbiAgICAgIH0sXG5cbiAgICAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiByZW1vdmVGcm9tSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGtpbmQpLmZvcihzY29wZUlkcyksXG4gICAgfSksXG4gIH0pO1xufTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtS2luZCwgSG90YmFySXRlbVBlcnNpc3RlZERhdGEgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuaW1wb3J0IHR5cGUgeyBpc0luSG90YmFySW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiLi9pcy1pbi1ob3RiYXJcIjtcblxuLyoqXG4gKiBBZGRzIGFuIGl0ZW0gb2Ygb25lIGtpbmQgdG8gdGhlIGhvdGJhcjogcGVyc2lzdHMgaXRzIGRhdGEgdW5kZXIgaXRzIGlkLCB0aGVuIHB1dHMgaXRcbiAqIGludG8gdGhlIGZpcnN0IGZyZWUgc2xvdCBvZiB0aGUgY3VycmVudCBwYWdlLiBUZWxscyB0aGUgdXNlciB3aGVuIHRoZXJlIGlzIG5vIGZyZWUgc2xvdC5cbiAqXG4gKiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnkgaXRzIGtpbmQgYW5kIHRoZW4gaXRzIGlkLCBzbyB0aGUgaWQgbmVlZHMgdG8gYmUgdW5pcXVlIG9ubHkgYW1vbmdcbiAqIGl0ZW1zIG9mIHRoZSBraW5kLiBUaHJvd3Mgd2hlbiBhbiBpdGVtIG9mIHRoZSBraW5kIHdpdGggdGhlIGlkIGlzIGFscmVhZHkgb24gdGhlIGN1cnJlbnRcbiAqIHBhZ2UsIGxlYXZpbmcgdGhlIGhvdGJhciBhbmQgdGhlIGl0ZW0ncyBwZXJzaXN0ZWQgZGF0YSBhcyB0aGV5IHdlcmUuIEEgdG9nZ2xlIGFza3NcbiAqIHtAbGluayBpc0luSG90YmFySW5qZWN0aW9uVG9rZW59IGZpcnN0LlxuICovXG5leHBvcnQgdHlwZSBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPiA9IChpdGVtOiB7XG4gIHJlYWRvbmx5IGlkOiBIb3RiYXJJdGVtSWQ7XG4gIHJlYWRvbmx5IHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGE7XG59KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIGFkZGVyIHBlciBraW5kIHBlciBzY29wZSwgdHlwZWQgYnkgaXRzIHBlcnNpc3RlZCBkYXRhLiAqL1xuZXhwb3J0IHR5cGUgQWRkVG9Ib3RiYXJUb2tlbkZvcjxQZXJzaXN0ZWREYXRhPiA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8UGVyc2lzdGVkRGF0YT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiO1xufT47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpYCB5aWVsZHM6IHRoZSBraW5kJ3MgYWRkZXJzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIEFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kPFBlcnNpc3RlZERhdGE+ID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBBZGRUb0hvdGJhcjxQZXJzaXN0ZWREYXRhPjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IEFkZFRvSG90YmFyPFBlcnNpc3RlZERhdGE+PjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IEFkZFRvSG90YmFyVG9rZW5Gb3I8UGVyc2lzdGVkRGF0YT47XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbi8qKlxuICogVGhlIGAuZm9yKClgIGZhY3RvcmllcywgYW5ub3RhdGVkIHNvIGEga2luZCdzIG93biBwZXJzaXN0ZWQgZGF0YSB0eXBlIHN1cnZpdmVzIGJvdGggbGV2ZWxzLlxuICogSW5mZXJlbmNlIGZyb20gdGhlIHZhbHVlIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBhIHJldHVybiB0eXBlIHRoYXQgbWVudGlvbnMgdGhlXG4gKiBzcGVjaWZpZXIncyBvd24gdHlwZSBwYXJhbWV0ZXIuXG4gKi9cbmNvbnN0IGFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kID0gPEsgZXh0ZW5kcyBIb3RiYXJJdGVtS2luZDxhbnk+PihcbiAga2luZDogSyxcbik6IEFkZFRvSG90YmFyVG9rZW5Gb3JLaW5kPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgIHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PjtcbiAgICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gQWRkVG9Ib3RiYXI8SG90YmFySXRlbVBlcnNpc3RlZERhdGE8Sz4+PjtcbiAgfT4oe1xuICAgIGlkOiBgYWRkLXRvLWhvdGJhci0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogQWRkVG9Ib3RiYXJUb2tlbkZvcjxIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YTxLPj4gPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IEFkZFRvSG90YmFyPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhPEs+PiB9Pih7XG4gICAgICAgIGlkOiBgYWRkLXRvLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogQWRkIGFuIGl0ZW0gdG8gdGhlIGhvdGJhciwgdHlwZWQgYnkgaXRzIGtpbmQ6IGAuZm9yKGtpbmQpYCBuYXJyb3dzIHRvIHRoZSBraW5kLCB3aG9zZVxuICogYHBlcnNpc3RlZERhdGFgIGlzIHdoYXQgdGhlIGtpbmQgd2FzIGNyZWF0ZWQgZm9yLCBhbmQgYC5mb3Ioc2NvcGVJZHMpYCB0byB0aGUgcmVnaXN0cmF0aW9uXG4gKiBvZiBpdCwgd2l0aCB0aGUgYGRpLnNjb3BlSWRzYCBvZiB0aGUgaW5qZWN0YWJsZSBhc2tpbmcuIFJlZ2lzdGVyZWQgYnlcbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgYWRkQm9va21hcmtUb0hvdGJhciA9IGRpLmluamVjdChhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihib29rbWFya0hvdGJhckl0ZW1LaW5kKS5mb3IoZGkuc2NvcGVJZHMpKSgpO1xuICpcbiAqIGF3YWl0IGFkZEJvb2ttYXJrVG9Ib3RiYXIoeyBpZDogYGJvb2ttYXJrKCR7dXJsfSlgLCBwZXJzaXN0ZWREYXRhOiB7IHVybCB9IH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUb0hvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gQWRkVG9Ib3RiYXI8YW55PjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IEFkZFRvSG90YmFyPGFueT4+O1xufT4oe1xuICBpZDogXCJhZGQtdG8taG90YmFyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkoYWRkVG9Ib3RiYXJUb2tlbkZvcktpbmQpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9ob3RiYXItaXRlbVwiO1xuXG4vKipcbiAqIFRha2VzIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgb3V0IG9mIHRoZSBjdXJyZW50IGhvdGJhciBwYWdlLiBUaHJvd3Mgd2hlbiBubyBzdWNoIGl0ZW1cbiAqIGlzIHRoZXJlLlxuICovXG5leHBvcnQgdHlwZSBFamVjdEhvdGJhckl0ZW0gPSAoaXRlbTogSG90YmFySXRlbSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIHJlbW92YWwsIHRoZSBjb3VudGVycGFydCBvZiBgaW5zZXJ0SG90YmFySXRlbUluamVjdGlvblRva2VuYDogb25lXG4gKiBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnkga2luZCwgZ2l2ZW4gdGhlIHdob2xlIGB7IGlkLCBraW5kIH1gLlxuICogYGdldEhvdGJhckl0ZW1LaW5kSW5qZWN0YWJsZUJ1bmNoYCBidWlsZHMgYHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZClgIG9uIGl0LFxuICogc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGVqZWN0SG90YmFySXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gRWplY3RIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiZWplY3QtaG90YmFyLWl0ZW1cIixcbiAgY2FyZGluYWxpdHk6IFwib25lXCIsXG59KSgpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuMiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIGFzIG9mIG5vdy4gKi9cbmV4cG9ydCB0eXBlIEhhc0hvdGJhckl0ZW0gPSAoaXRlbTogSG90YmFySXRlbSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuLyoqXG4gKiBUaGUgaG90YmFyJ3Mgb3duIG1lbWJlcnNoaXAgcXVlcnk6IG9uZSBpbXBsZW1lbnRhdGlvbiBmb3IgZXZlcnkga2luZCwgYXNrZWQgd2l0aCB0aGUgd2hvbGVcbiAqIGB7IGlkLCBraW5kIH1gLiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIGJ1aWxkcyBgaXNJbkhvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWBcbiAqIG9uIGl0LCBzbyByZWFjaCBmb3IgdGhhdCBvbmUgaW5zdGVhZC5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLlxuICovXG5leHBvcnQgY29uc3QgaGFzSG90YmFySXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gSGFzSG90YmFySXRlbSB9Pih7XG4gIGlkOiBcImhhcy1ob3RiYXItaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG5cbi8qKiBXaGV0aGVyIHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YCwgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIHJlYWN0aXZlbHkuICovXG5leHBvcnQgdHlwZSBIYXNIb3RiYXJJdGVtUmVhY3RpdmUgPSAoaXRlbTogSG90YmFySXRlbSkgPT4gSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG5cbi8qKlxuICogVGhlIGhvdGJhcidzIG93biByZWFjdGl2ZSBtZW1iZXJzaGlwIHF1ZXJ5LCBhc2tlZCB3aXRoIHRoZSB3aG9sZSBgeyBpZCwga2luZCB9YC5cbiAqIGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAgYnVpbGRzIGBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbi5mb3Ioa2luZClgIG9uIGl0LFxuICogc28gcmVhY2ggZm9yIHRoYXQgb25lIGluc3RlYWQuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0hvdGJhckl0ZW1SZWFjdGl2ZUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogSGFzSG90YmFySXRlbVJlYWN0aXZlIH0+KHtcbiAgaWQ6IFwiaGFzLWhvdGJhci1pdGVtLXJlYWN0aXZlXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQge1xuICBnZXRJbmplY3Rpb25Ub2tlbjIsXG4gIHR5cGUgTWFueUZhY3RvcnksXG4gIHR5cGUgTWF5YmVSZXN1bHRGYWN0b3J5LFxuICB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yLFxufSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW0gfSBmcm9tIFwiLi9ob3RiYXItaXRlbVwiO1xuaW1wb3J0IHsgZ2V0SG90YmFySXRlbUtpbmRJZCwgdHlwZSBIb3RiYXJJdGVtS2luZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWtpbmRcIjtcblxuLyoqIFdoYXQgdGhlIGhvdGJhciBoYW5kcyBhIGtpbmQncyBjb21wb25lbnQ6IHRoZSBpdGVtLCBhcyBgeyBpZCwga2luZCB9YC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRQcm9wcyA9IHsgaXRlbTogSG90YmFySXRlbSB9O1xuXG4vKipcbiAqIFJlbmRlcnMgb25lIGl0ZW0gb2YgYSBraW5kIGluc2lkZSBpdHMgaG90YmFyIHNsb3QuIFRoZSBob3RiYXIgaGFuZHMgaXQgdGhlIGl0ZW0gb25seTtcbiAqIHRoZSBjb21wb25lbnQgcmVzb2x2ZXMgd2hhdGV2ZXIgZWxzZSBpdCBuZWVkcyBmcm9tIHRoZSBpdGVtJ3MgaWQgYW5kIGtpbmQuXG4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnQgPSBSZWFjdC5Db21wb25lbnRUeXBlPEhvdGJhckl0ZW1Db21wb25lbnRQcm9wcz47XG5cbi8qKiBIb3cgdGhlIGNvbXBvbmVudCBpcyByZWdpc3RlcmVkOiBhIHYyIHRva2VuIG1vZGVscyBhIGZhY3RvcnksIHNvIGEgY29tcG9uZW50IGlzIHdyYXBwZWQgaW4gb25lLiAqL1xuZXhwb3J0IHR5cGUgSG90YmFySXRlbUNvbXBvbmVudEZhY3RvcnkgPSAoKSA9PiBIb3RiYXJJdGVtQ29tcG9uZW50O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGF0IG1vc3Qgb25lIGNvbXBvbmVudCBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3IgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICBtYXliZUZhY3Rvcnk6IE1heWJlUmVzdWx0RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiB1bmRlZmluZWQ7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3Itb25lXCI7XG59PjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZClgIHlpZWxkczogdGhlIGtpbmQncyBjb21wb25lbnRzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gSG90YmFySXRlbUNvbXBvbmVudFRva2VuRm9yO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG5jb25zdCBob3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3JLaW5kID0+XG4gIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5PjtcbiAgfT4oe1xuICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBIb3RiYXJJdGVtQ29tcG9uZW50VG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7XG4gICAgICAgIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db21wb25lbnRGYWN0b3J5O1xuICAgICAgICBtYXliZUZhY3Rvcnk6IE1heWJlUmVzdWx0RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG4gICAgICB9Pih7XG4gICAgICAgIGlkOiBgaG90YmFyLWl0ZW0tY29tcG9uZW50LSR7Z2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyl9YCxcbiAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3Itb25lXCIsXG4gICAgICB9KSgpLFxuICApO1xuXG4vKipcbiAqIEhvdyB0aGUgaG90YmFyIHJlbmRlcnMgYW4gaXRlbTogdGhlIGNvbXBvbmVudCByZWdpc3RlcmVkIGZvciB0aGUgaXRlbSdzIGtpbmQsIHZpYVxuICogYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAuIEEga2luZCB3aXRoIG5vIGNvbXBvbmVudCBpcyB1bmtub3duIHRvIHRoZSBob3RiYXIsIGFuZCBpdHMgaXRlbXNcbiAqIHJlbmRlciBhcyB1bmF2YWlsYWJsZS5cbiAqXG4gKiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIHJlZ2lzdGVycyB0aGlzIGZvciBhIGtpbmQ7IHByZWZlciBpdCBvdmVyIGJpbmRpbmdcbiAqIHRvIHRoZSB0b2tlbiBieSBoYW5kLCBzaW5jZSBpdCBhbHNvIHdpcmVzIHRoZSBwZXJzaXN0ZWQgZGF0YSBhbmQgdGhlIGFkZGVyLlxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbUNvbXBvbmVudEluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbXBvbmVudEZhY3Rvcnk7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29tcG9uZW50RmFjdG9yeT47XG59Pih7XG4gIGlkOiBcImhvdGJhci1pdGVtLWNvbXBvbmVudFwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGhvdGJhckl0ZW1Db21wb25lbnRUb2tlbkZvcktpbmQpO1xuIiwgImltcG9ydCB7IGdldEluamVjdGlvblRva2VuQ29tcG9uZW50MiB9IGZyb20gXCJAazhzbGVucy9pbmplY3RhYmxlLXJlYWN0XCI7XG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90YmFySXRlbUZyYW1lUHJvcHMge1xuICByZWFkb25seSBpdGVtOiBIb3RiYXJJdGVtO1xuICByZWFkb25seSBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBXaGF0IGV2ZXJ5IGhvdGJhciBpdGVtIHNpdHMgaW46IHRoZSBzbG90J3MgY2hyb21lLCBwbHVzIHRoZSBpdGVtJ3MgcmlnaHQtY2xpY2sgbWVudSxcbiAqIHdoaWNoIGlzIHdoZXJlIHRoZSBob3RiYXIgb2ZmZXJzIHRvIHJlbW92ZSB0aGUgaXRlbS4gV2hhdGV2ZXIgaXMgcmVuZGVyZWQgaW5zaWRlIGRlY2lkZXNcbiAqIHdoYXQgY2xpY2tpbmcgdGhlIGl0ZW0gZG9lcy5cbiAqXG4gKiBJbXBsZW1lbnRlZCBieSB0aGUgaG90YmFyLiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgIHdyYXBzIGEga2luZCdzIGNvbXBvbmVudFxuICogaW4gaXQsIHNvIGEga2luZCBuZWVkcyB0byByZW5kZXIgb25seSBpdHMgb3duIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBIb3RiYXJJdGVtRnJhbWUgPSBnZXRJbmplY3Rpb25Ub2tlbkNvbXBvbmVudDI8UmVhY3QuQ29tcG9uZW50VHlwZTxIb3RiYXJJdGVtRnJhbWVQcm9wcz4+KHtcbiAgaWQ6IFwiaG90YmFyLWl0ZW0tZnJhbWVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSUNvbXB1dGVkVmFsdWUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtSWQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1pZFwiO1xuaW1wb3J0IHR5cGUgeyBIb3RiYXJJdGVtS2luZElkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKipcbiAqIFRoZSBwZXJzaXN0ZWQgZGF0YSBvZiBvbmUgaXRlbSwgd3JhcHBlZCBzbyB0aGF0IFwibm8gZGF0YSBwZXJzaXN0ZWRcIiBhbmQgXCJwZXJzaXN0ZWRcbiAqIGB1bmRlZmluZWRgXCIgKGEga2luZCB3aXRob3V0IGRhdGEpIHN0YXkgZGlzdGluZ3Vpc2hhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhRW50cnk8UGVyc2lzdGVkRGF0YSA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgcGVyc2lzdGVkRGF0YTogUGVyc2lzdGVkRGF0YTtcbn1cblxuLyoqXG4gKiBUaGUgcGVyc2lzdGVkIGRhdGEgb2YgZXZlcnkgaXRlbSBvZiBvbmUga2luZCwga2V5ZWQgYnkgaXRlbSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlPFBlcnNpc3RlZERhdGEgPSB1bmtub3duPiB7XG4gIC8qKiBUaGUgaXRlbSdzIGVudHJ5LCBgdW5kZWZpbmVkYCB1bnRpbCB0aGUgc3RvcmUgaGFzIGxvYWRlZCBhbmQgd2hpbGUgdGhlIGl0ZW0gaGFzIG5vbmUuICovXG4gIHJlYWRvbmx5IGdldDogKGlkOiBIb3RiYXJJdGVtSWQpID0+IElDb21wdXRlZFZhbHVlPEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhRW50cnk8UGVyc2lzdGVkRGF0YT4gfCB1bmRlZmluZWQ+O1xuICAvKiogUGVyc2lzdHMgdGhlIGl0ZW0ncyBkYXRhLCByZXNvbHZpbmcgb25jZSB0aGUgc3RvcmUgaGFzIGxvYWRlZCBhbmQgdGFrZW4gaXQuICovXG4gIHJlYWRvbmx5IHNldDogKGlkOiBIb3RiYXJJdGVtSWQsIHBlcnNpc3RlZERhdGE6IFBlcnNpc3RlZERhdGEpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBXaGF0IHtAbGluayBob3RiYXJJdGVtUGVyc2lzdGVkRGF0YUluamVjdGlvblRva2VufSB5aWVsZHM6IHRoZSBzdG9yZSBvZiBvbmUga2luZCwgYnkgdGhlIGtpbmQncyBpZC4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmVGb3IgPSAoa2luZElkOiBIb3RiYXJJdGVtS2luZElkPGFueT4pID0+IEhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhU3RvcmU7XG5cbi8qKlxuICogV2hlcmUgdGhlIGhvdGJhciBrZWVwcyB0aGUgcGVyc2lzdGVkIGRhdGEgb2YgaXRlbXMsIG9uZSBzdG9yZSBwZXIga2luZC4gVGhlIGRhdGEgaXNcbiAqIHR5cGVkIGJ5IHRoZSBraW5kLCB3aGljaCBpcyB3aHkgdGhlIHN0b3JlIGl0c2VsZiBpcyB1bnR5cGVkOiBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgXG4gKiBiaW5kcyB0aGUgdHlwZSBvbiBib3RoIHRoZSB3YXkgaW4gKHRoZSBhZGRlcikgYW5kIHRoZSB3YXkgb3V0ICh0aGUgY29tcG9uZW50KSwgc28gYSBraW5kXG4gKiBuZXZlciB0b3VjaGVzIHRoaXMgZGlyZWN0bHkuXG4gKlxuICogSW1wbGVtZW50ZWQgYnkgdGhlIGhvdGJhci5cbiAqL1xuZXhwb3J0IGNvbnN0IGhvdGJhckl0ZW1QZXJzaXN0ZWREYXRhSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtUGVyc2lzdGVkRGF0YVN0b3JlRm9yO1xufT4oe1xuICBpZDogXCJob3RiYXItaXRlbS1wZXJzaXN0ZWQtZGF0YVwiLFxuICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbn0pKCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbSB9IGZyb20gXCIuL2hvdGJhci1pdGVtXCI7XG5cbi8qKlxuICogUHV0cyBhbiBpdGVtIGludG8gdGhlIGZpcnN0IGZyZWUgc2xvdCBvZiB0aGUgY3VycmVudCBob3RiYXIgcGFnZS4gVGVsbHMgdGhlIHVzZXIgd2hlblxuICogdGhlcmUgaXMgbm9uZSwgb3Igd2hlbiB0aGUgaXRlbSdzIGtpbmQgaXMgdW5rbm93biwgaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zZXJ0SG90YmFySXRlbSA9IChpdGVtOiBIb3RiYXJJdGVtKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBob3RiYXIncyBvd24gaW5zZXJ0aW9uOiBpZCBhbmQga2luZCBvbmx5LCBubyBwZXJzaXN0ZWQgZGF0YS4gVGhlIHR5cGVkIGFkZGVyIGEga2luZFxuICogZ2V0cyBmcm9tIGBhZGRUb0hvdGJhckluamVjdGlvblRva2VuLmZvcihraW5kKWAgcGVyc2lzdHMgdGhlIGRhdGEgZmlyc3QgYW5kIHRoZW4gY29tZXNcbiAqIGhlcmUsIHNvIHJlYWNoIGZvciB0aGF0IG9uZSBpbnN0ZWFkLlxuICpcbiAqIEltcGxlbWVudGVkIGJ5IHRoZSBob3RiYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnNlcnRIb3RiYXJJdGVtSW5qZWN0aW9uVG9rZW4gPSBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJbnNlcnRIb3RiYXJJdGVtIH0+KHtcbiAgaWQ6IFwiaW5zZXJ0LWhvdGJhci1pdGVtXCIsXG4gIGNhcmRpbmFsaXR5OiBcIm9uZVwiLFxufSkoKTtcbiIsICJpbXBvcnQgeyBnZXRJbmplY3Rpb25Ub2tlbjIsIHR5cGUgTWFueUZhY3RvcnksIHR5cGUgU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjIgfSBmcm9tIFwiQGs4c2xlbnMvaW5qZWN0YWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcHV0ZWRWYWx1ZSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogV2hldGhlciB0aGUgaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBob3RiYXIgcGFnZSwgYXMgb2Ygbm93LiAqL1xuZXhwb3J0IHR5cGUgSXNJbkhvdGJhciA9IChpZDogSG90YmFySXRlbUlkKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIG1lbWJlcnNoaXAgcXVlcnkgcGVyIGtpbmQgcGVyIHNjb3BlLiAqL1xuZXhwb3J0IHR5cGUgSXNJbkhvdGJhclRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIG1lbWJlcnNoaXAgcXVlcmllcywgb25lIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyVG9rZW5Gb3JLaW5kID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gSXNJbkhvdGJhcj47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBJc0luSG90YmFyVG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbmNvbnN0IGlzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPSAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IElzSW5Ib3RiYXJUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogKCkgPT4gSXNJbkhvdGJhcjsgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IElzSW5Ib3RiYXI+IH0+KHtcbiAgICBpZDogYGlzLWluLWhvdGJhci0ke2tpbmR9YCxcbiAgICBzcGVjaWFsaXR5OiBraW5kLFxuICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICB9KShcbiAgICAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogSXNJbkhvdGJhclRva2VuRm9yID0+XG4gICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBJc0luSG90YmFyIH0+KHtcbiAgICAgICAgaWQ6IGBpcy1pbi1ob3RiYXItJHtnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKX1gLFxuICAgICAgICBzcGVjaWFsaXR5OiBnZXRIb3RiYXJJdGVtS2luZElkKGtpbmQsIHNjb3BlSWRzKSxcbiAgICAgICAgY2FyZGluYWxpdHk6IFwib25lXCIsXG4gICAgICB9KSgpLFxuICApO1xuXG4vKipcbiAqIFdoZXRoZXIgYW4gaXRlbSBpcyBpbiB0aGUgaG90YmFyLCBhc2tlZCBvbmNlOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlIHF1ZXJ5XG4gKiBvZiB0aGF0IGtpbmQgYXMgcmVnaXN0ZXJlZCB1bmRlciB0aG9zZSBzY29wZXMsIHdoaWNoIHRha2VzIHRoZSBpZC4gQW4gaXRlbSBpcyBpZGVudGlmaWVkIGJ5XG4gKiBpdHMga2luZCBhbmQgdGhlbiBpdHMgaWQsIG5ldmVyIGJ5IHRoZSBpZCBhbG9uZSwgc28gdHdvIGtpbmRzIHVzaW5nIHRoZSBzYW1lIGlkIG5ldmVyIGFuc3dlclxuICogZm9yIGVhY2ggb3RoZXI7IHRoZSBzY29wZXMgY29tZSBmcm9tIHRoZSBgZGkuc2NvcGVJZHNgIG9mIHRoZSBpbmplY3RhYmxlIGFza2luZy4gRm9yXG4gKiBkZWNpZGluZyBpbiBhIGhhbmRsZXIsIHNheSB3aGV0aGVyIGEgY2xpY2sgc2hvdWxkIGFkZCB0aGUgaXRlbSBvciByZW1vdmUgaXQuXG4gKlxuICogQSBwcm9taXNlIHJhdGhlciB0aGFuIGEgYm9vbGVhbiBiZWNhdXNlIHRoZSBob3RiYXIgbG9hZHMgd2hhdCBpdCBwZXJzaXN0ZWQgbGF6aWx5OiBhc2tlZFxuICogYmVmb3JlIHRoYXQsIGEgYm9vbGVhbiBjb3VsZCBvbmx5IGJlIGEgZ3Vlc3MuIEZvciBmb2xsb3dpbmcgdGhlIGFuc3dlciBhcyBpdCBjaGFuZ2VzLCBzZWVcbiAqIHtAbGluayBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbn0uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLCBzbyBldmVyeSByZWdpc3RlcmVkIGtpbmQgaGFzIG9uZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGlzQm9va21hcmtJbkhvdGJhciA9IGRpLmluamVjdChpc0luSG90YmFySW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihkaS5zY29wZUlkcykpKCk7XG4gKlxuICogaWYgKGF3YWl0IGlzQm9va21hcmtJbkhvdGJhcihpZCkpIHtcbiAqICAgYXdhaXQgcmVtb3ZlQm9va21hcmtGcm9tSG90YmFyKGlkKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGF3YWl0IGFkZEJvb2ttYXJrVG9Ib3RiYXIoeyBpZCwgcGVyc2lzdGVkRGF0YTogeyB1cmwgfSB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaXNJbkhvdGJhckluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogKCkgPT4gSXNJbkhvdGJhcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PCgpID0+IElzSW5Ib3RiYXI+O1xufT4oe1xuICBpZDogXCJpcy1pbi1ob3RiYXJcIixcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG59KShpc0luSG90YmFyVG9rZW5Gb3JLaW5kKTtcblxuLyoqIFdoZXRoZXIgdGhlIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgaXMgb24gdGhlIGN1cnJlbnQgaG90YmFyIHBhZ2UsIHJlYWN0aXZlbHkuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmUgPSAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gSUNvbXB1dGVkVmFsdWU8Ym9vbGVhbj47XG5cbi8qKiBXaGF0IGAuZm9yKGtpbmQpLmZvcihzY29wZUlkcylgIHlpZWxkczogZXhhY3RseSBvbmUgcmVhY3RpdmUgbWVtYmVyc2hpcCBxdWVyeSBwZXIga2luZCBwZXIgc2NvcGUuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIHJlYWN0aXZlIG1lbWJlcnNoaXAgcXVlcmllcywgb25lIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PElzSW5Ib3RiYXJSZWFjdGl2ZT47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgaXNJbkhvdGJhclJlYWN0aXZlVG9rZW5Gb3JLaW5kID0gKGtpbmQ6IEhvdGJhckl0ZW1LaW5kPGFueT4pOiBJc0luSG90YmFyUmVhY3RpdmVUb2tlbkZvcktpbmQgPT5cbiAgZ2V0SW5qZWN0aW9uVG9rZW4yPHsgc2luZ2xlRmFjdG9yeTogSXNJbkhvdGJhclJlYWN0aXZlOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SXNJbkhvdGJhclJlYWN0aXZlPiB9Pih7XG4gICAgaWQ6IGBpcy1pbi1ob3RiYXItcmVhY3RpdmUtJHtraW5kfWAsXG4gICAgc3BlY2lhbGl0eToga2luZCxcbiAgICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbiAgfSkoXG4gICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IElzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yID0+XG4gICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiBJc0luSG90YmFyUmVhY3RpdmUgfT4oe1xuICAgICAgICBpZDogYGlzLWluLWhvdGJhci1yZWFjdGl2ZS0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogV2hldGhlciBhbiBpdGVtIGlzIGluIHRoZSBob3RiYXIsIGFzIGEgTW9iWCBjb21wdXRlZDogYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzIHRoZVxuICogcXVlcnkgb2YgdGhhdCBraW5kIGFzIHJlZ2lzdGVyZWQgdW5kZXIgdGhvc2Ugc2NvcGVzLCB3aGljaCB0YWtlcyB0aGUgaWQuIFJlYWQgaXQgdW5kZXIgYW5cbiAqIG9ic2VydmVyIChvciBhIHJlYWN0aW9uKSB0byBmb2xsb3cgdGhlIHVzZXIgcGlubmluZyBhbmQgdW5waW5uaW5nLiBgZmFsc2VgIHVudGlsIHRoZSBob3RiYXJcbiAqIGhhcyBsb2FkZWQgd2hhdCBpdCBwZXJzaXN0ZWQuIEZvciBhIG9uZS1vZmYgYW5zd2VyLCBzZWUge0BsaW5rIGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbn0uXG4gKlxuICogUmVnaXN0ZXJlZCBieSBgZ2V0SG90YmFySXRlbUtpbmRJbmplY3RhYmxlQnVuY2hgLCBzbyBldmVyeSByZWdpc3RlcmVkIGtpbmQgaGFzIG9uZS4gQVxuICogY29tcG9uZW50IGhhcyBubyBzY29wZSBvZiBpdHMgb3duLCBzbyBpdCB0YWtlcyB0aGUgcXVlcnkgZnJvbSBhbiBpbmplY3RhYmxlIHRoYXQgcmVhY2hlZCBpdFxuICogd2l0aCBpdHMgYGRpLnNjb3BlSWRzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBQaW5TdGF0ZSA9IG9ic2VydmVyKCh7IHVybCB9OiB7IHVybDogc3RyaW5nIH0pID0+IHtcbiAqICAgY29uc3QgaXNJbkhvdGJhciA9IHVzZUluamVjdChpc0Jvb2ttYXJrSW5Ib3RiYXJSZWFjdGl2ZUluamVjdGFibGUpKGlkT2YodXJsKSkuZ2V0KCk7XG4gKlxuICogICByZXR1cm4gPHNwYW4+e2lzSW5Ib3RiYXIgPyBcIlBpbm5lZFwiIDogXCJOb3QgcGlubmVkXCJ9PC9zcGFuPjtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luSG90YmFyUmVhY3RpdmVJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6IElzSW5Ib3RiYXJSZWFjdGl2ZTtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PElzSW5Ib3RiYXJSZWFjdGl2ZT47XG59Pih7XG4gIGlkOiBcImlzLWluLWhvdGJhci1yZWFjdGl2ZVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKGlzSW5Ib3RiYXJSZWFjdGl2ZVRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5LCB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgSG90YmFySXRlbUlkIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0taWRcIjtcbmltcG9ydCB7IGdldEhvdGJhckl0ZW1LaW5kSWQsIHR5cGUgSG90YmFySXRlbUtpbmQgfSBmcm9tIFwiLi9ob3RiYXItaXRlbS1raW5kXCI7XG5pbXBvcnQgdHlwZSB7IGlzSW5Ib3RiYXJJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCIuL2lzLWluLWhvdGJhclwiO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGl0ZW0gb2YgdGhlIGtpbmQgd2l0aCB0aGUgaWQgZnJvbSB0aGUgY3VycmVudCBob3RiYXIgcGFnZS4gVGhyb3dzIHdoZW4gbm9cbiAqIHN1Y2ggaXRlbSBpcyB0aGVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhciA9IChpZDogSG90YmFySXRlbUlkKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHM6IGV4YWN0bHkgb25lIHJlbW92ZXIgcGVyIGtpbmQgcGVyIHNjb3BlLiAqL1xuZXhwb3J0IHR5cGUgUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiAoKSA9PiBSZW1vdmVGcm9tSG90YmFyO1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJvbmVcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIHJlbW92ZXJzLCBvbmUgcGVyIHNjb3BlLCByZWFjaGVkIHdpdGggYC5mb3Ioc2NvcGVJZHMpYC4gKi9cbmV4cG9ydCB0eXBlIFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcktpbmQgPSBTcGVjaWZpY0luamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPjtcbiAgc3BlY2lmaWNUb2tlbkZhY3Rvcnk6IChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pID0+IFJlbW92ZUZyb21Ib3RiYXJUb2tlbkZvcjtcbiAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCI7XG59PjtcblxuY29uc3QgcmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9IChraW5kOiBIb3RiYXJJdGVtS2luZDxhbnk+KTogUmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCA9PlxuICBnZXRJbmplY3Rpb25Ub2tlbjI8eyBzaW5nbGVGYWN0b3J5OiAoKSA9PiBSZW1vdmVGcm9tSG90YmFyOyBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8KCkgPT4gUmVtb3ZlRnJvbUhvdGJhcj4gfT4oe1xuICAgIGlkOiBgcmVtb3ZlLWZyb20taG90YmFyLSR7a2luZH1gLFxuICAgIHNwZWNpYWxpdHk6IGtpbmQsXG4gICAgY2FyZGluYWxpdHk6IFwiemVyby1vci1tYW55XCIsXG4gIH0pKFxuICAgIChzY29wZUlkczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZW1vdmVGcm9tSG90YmFyVG9rZW5Gb3IgPT5cbiAgICAgIGdldEluamVjdGlvblRva2VuMjx7IHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXIgfT4oe1xuICAgICAgICBpZDogYHJlbW92ZS1mcm9tLWhvdGJhci0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgIHNwZWNpYWxpdHk6IGdldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpLFxuICAgICAgICBjYXJkaW5hbGl0eTogXCJvbmVcIixcbiAgICAgIH0pKCksXG4gICk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgaG90YmFyOiBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYCB5aWVsZHMgdGhlIHJlbW92ZXIgb2YgdGhhdCBraW5kXG4gKiBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcywgd2hpY2ggdGFrZXMgdGhlIGlkLiBBbiBpdGVtIGlzIGlkZW50aWZpZWQgYnkgaXRzIGtpbmQgYW5kXG4gKiB0aGVuIGl0cyBpZCwgc28gcmVtb3Zpbmcgb25lIGtpbmQncyBpdGVtIGxlYXZlcyBhbm90aGVyIGtpbmQncyBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxvbmUuXG4gKiBUaGUgcGVyc2lzdGVkIGRhdGEgb2YgdGhlIGl0ZW0gaXMgbGVmdCBpbiBwbGFjZSwgc28gYWRkaW5nIHRoZSBzYW1lIGlkIGJhY2sgZmluZHMgaXQgYWdhaW4uXG4gKiBUaGUgc2NvcGVzIGNvbWUgZnJvbSB0aGUgYGRpLnNjb3BlSWRzYCBvZiB0aGUgaW5qZWN0YWJsZSBhc2tpbmcuXG4gKlxuICogVGhyb3dzIHdoZW4gbm8gaXRlbSBvZiB0aGUga2luZCB3aXRoIHRoZSBpZCBpcyBvbiB0aGUgY3VycmVudCBwYWdlOiByZW1vdmluZyBpcyBzb21ldGhpbmdcbiAqIGRvbmUgdG8gYW4gaXRlbSBrbm93biB0byBiZSB0aGVyZSwgc28gYSB0b2dnbGUgYXNrcyB7QGxpbmsgaXNJbkhvdGJhckluamVjdGlvblRva2VufSBmaXJzdC5cbiAqXG4gKiBSZWdpc3RlcmVkIGJ5IGBnZXRIb3RiYXJJdGVtS2luZEluamVjdGFibGVCdW5jaGAsIHNvIGV2ZXJ5IHJlZ2lzdGVyZWQga2luZCBoYXMgb25lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgcmVtb3ZlQm9va21hcmtGcm9tSG90YmFyID0gZGkuaW5qZWN0KHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbi5mb3IoYm9va21hcmtIb3RiYXJJdGVtS2luZCkuZm9yKGRpLnNjb3BlSWRzKSkoKTtcbiAqXG4gKiBhd2FpdCByZW1vdmVCb29rbWFya0Zyb21Ib3RiYXIoYG15LWV4dGVuc2lvbi1ib29rbWFyaygke3VybH0pYCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Ib3RiYXJJbmplY3Rpb25Ub2tlbiA9IGdldEluamVjdGlvblRva2VuMjx7XG4gIHNpbmdsZUZhY3Rvcnk6ICgpID0+IFJlbW92ZUZyb21Ib3RiYXI7XG4gIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTwoKSA9PiBSZW1vdmVGcm9tSG90YmFyPjtcbn0+KHtcbiAgaWQ6IFwicmVtb3ZlLWZyb20taG90YmFyXCIsXG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxufSkocmVtb3ZlRnJvbUhvdGJhclRva2VuRm9yS2luZCk7XG4iLCAiaW1wb3J0IHsgZ2V0SW5qZWN0aW9uVG9rZW4yLCB0eXBlIE1hbnlGYWN0b3J5LCB0eXBlIFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yIH0gZnJvbSBcIkBrOHNsZW5zL2luamVjdGFibGVcIjtcbmltcG9ydCB0eXBlIHsgTWVudUl0ZW0gfSBmcm9tIFwiQGs4c2xlbnMvZHJvcC1kb3duLW1lbnUtY29udHJhY3RzXCI7XG5pbXBvcnQgdHlwZSB7IE1heWJlUHJvbWlzZSB9IGZyb20gXCJAazhzbGVucy9wdWJsaWMtdXRpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IEhvdGJhckl0ZW1JZCB9IGZyb20gXCIuL2hvdGJhci1pdGVtLWlkXCI7XG5pbXBvcnQgeyBnZXRIb3RiYXJJdGVtS2luZElkLCB0eXBlIEhvdGJhckl0ZW1LaW5kIH0gZnJvbSBcIi4vaG90YmFyLWl0ZW0ta2luZFwiO1xuXG4vKiogUHJvZHVjZXMgdGhlIG1lbnUgaXRlbSBmb3Igb25lIGhvdGJhciBpdGVtLCBwb3NzaWJseSBsYXRlci4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3IgPSAoaWQ6IEhvdGJhckl0ZW1JZCkgPT4gTWF5YmVQcm9taXNlPE1lbnVJdGVtPjtcblxuLyoqIFdoYXQgYC5mb3Ioa2luZCkuZm9yKHNjb3BlSWRzKWAgeWllbGRzOiB0aGUgbWVudSBpdGVtcyBjb250cmlidXRlZCB0byBvbmUga2luZCBhcyByZWdpc3RlcmVkIHVuZGVyIHRob3NlIHNjb3Blcy4gKi9cbmV4cG9ydCB0eXBlIEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvciA9IFNwZWNpZmljSW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xuICBzcGVjaWZpY1Rva2VuRmFjdG9yeTogdW5kZWZpbmVkO1xuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIjtcbn0+O1xuXG4vKiogV2hhdCBgLmZvcihraW5kKWAgeWllbGRzOiB0aGUga2luZCdzIG1lbnUgaXRlbXMsIHBlciBzY29wZSwgcmVhY2hlZCB3aXRoIGAuZm9yKHNjb3BlSWRzKWAuICovXG5leHBvcnQgdHlwZSBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3JLaW5kID0gU3BlY2lmaWNJbmplY3Rpb25Ub2tlbjI8e1xuICBzaW5nbGVGYWN0b3J5OiBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yO1xuICBtYW55RmFjdG9yeTogTWFueUZhY3Rvcnk8SG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcj47XG4gIHNwZWNpZmljVG9rZW5GYWN0b3J5OiAoc2NvcGVJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtVG9rZW5Gb3I7XG4gIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiO1xufT47XG5cbi8qKlxuICogVGhlIHJpZ2h0LWNsaWNrIG1lbnUgb2YgYSBob3RiYXIgaXRlbTogb25lIGVudHJ5IHBlciBjb250cmlidXRpb24sIHJlZ2lzdGVyZWQgYWdhaW5zdCB0aGVcbiAqIGl0ZW0ncyBraW5kIHZpYSBgLmZvcihraW5kKS5mb3Ioc2NvcGVJZHMpYC4gVGhlIHNjb3BlcyBhcmUgdGhvc2Ugb2YgdGhlIHJlZ2lzdHJhdGlvbiwgc28gdGhlXG4gKiBgaW5qZWN0aW9uVG9rZW5gIGlzIGdpdmVuIGFzIGEgZnVuY3Rpb24gb2YgdGhlbS4gVGhlIGhvdGJhciBjb250cmlidXRlcyB0aGUgd2F5IHRvIHJlbW92ZVxuICogdGhlIGl0ZW0gdG8gZXZlcnkga2luZCBpdHNlbGYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBleHBvcnQgY29uc3Qgb3BlbkJvb2ttYXJrSW5Ccm93c2VySW5qZWN0YWJsZSA9IGdldEluamVjdGFibGUyKHtcbiAqICAgaWQ6IFwib3Blbi1ib29rbWFyay1pbi1icm93c2VyXCIsXG4gKiAgIGluc3RhbnRpYXRlOiAoKSA9PiAoaWQpOiBNZW51SXRlbSA9PiAoe1xuICogICAgIGlkOiBcIm9wZW4taW4tYnJvd3NlclwiLFxuICogICAgIGtpbmQ6IFwiYWN0aW9uXCIsXG4gKiAgICAgbGFiZWxUZXh0OiBcIk9wZW4gaW4gYnJvd3NlclwiLFxuICogICAgIG9uQ2xpY2s6ICgpID0+IG9wZW5JbkJyb3dzZXIodXJsT2YoaWQpKSxcbiAqICAgICBvcmRlck51bWJlcjogMTAsXG4gKiAgICAgcGFyZW50SWQ6IHVuZGVmaW5lZCxcbiAqICAgfSksXG4gKiAgIGluamVjdGlvblRva2VuOiAoeyBzY29wZUlkcyB9KSA9PiBob3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtSW5qZWN0aW9uVG9rZW4uZm9yKGJvb2ttYXJrSG90YmFySXRlbUtpbmQpLmZvcihzY29wZUlkcyksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaG90YmFySXRlbUNvbnRleHRNZW51SXRlbUluamVjdGlvblRva2VuID0gZ2V0SW5qZWN0aW9uVG9rZW4yPHtcbiAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xufT4oe1xuICBpZDogXCJob3RiYXItaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiLFxuICBjYXJkaW5hbGl0eTogXCJ6ZXJvLW9yLW1hbnlcIixcbn0pKFxuICAoa2luZDogSG90YmFySXRlbUtpbmQ8YW55Pik6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvcktpbmQgPT5cbiAgICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgICAgc2luZ2xlRmFjdG9yeTogSG90YmFySXRlbUNvbnRleHRNZW51SXRlbUZvcjtcbiAgICAgIG1hbnlGYWN0b3J5OiBNYW55RmFjdG9yeTxIb3RiYXJJdGVtQ29udGV4dE1lbnVJdGVtRm9yPjtcbiAgICB9Pih7XG4gICAgICBpZDogYGhvdGJhci1pdGVtLWNvbnRleHQtbWVudS1pdGVtLSR7a2luZH1gLFxuICAgICAgc3BlY2lhbGl0eToga2luZCxcbiAgICAgIGNhcmRpbmFsaXR5OiBcInplcm8tb3ItbWFueVwiLFxuICAgIH0pKFxuICAgICAgKHNjb3BlSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Ub2tlbkZvciA9PlxuICAgICAgICBnZXRJbmplY3Rpb25Ub2tlbjI8e1xuICAgICAgICAgIHNpbmdsZUZhY3Rvcnk6IEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I7XG4gICAgICAgICAgbWFueUZhY3Rvcnk6IE1hbnlGYWN0b3J5PEhvdGJhckl0ZW1Db250ZXh0TWVudUl0ZW1Gb3I+O1xuICAgICAgICB9Pih7XG4gICAgICAgICAgaWQ6IGBob3RiYXItaXRlbS1jb250ZXh0LW1lbnUtaXRlbS0ke2dldEhvdGJhckl0ZW1LaW5kSWQoa2luZCwgc2NvcGVJZHMpfWAsXG4gICAgICAgICAgc3BlY2lhbGl0eTogZ2V0SG90YmFySXRlbUtpbmRJZChraW5kLCBzY29wZUlkcyksXG4gICAgICAgICAgY2FyZGluYWxpdHk6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QSxNQUNqQyxjQUFjLENBQUMsbUNBQW1DO0FBQUEsTUFFbEQsYUFBYSxDQUFDLE9BQU87QUFDbkIsY0FBTSxTQUFTLG9CQUFvQixNQUFNLEdBQUcsUUFBUTtBQUNwRCxjQUFNLHdCQUF3QixHQUFHLE9BQU8sbUNBQW1DO0FBQzNFLGNBQU0scUJBQXlDLENBQUMsT0FBTyxzQkFBc0IsRUFBRSxJQUFJLE1BQU0sT0FBTyxDQUFDO0FBRWpHLGVBQU87QUFBQSxNQUNUO0FBQUEsTUFFQSxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsTUFBTSxpQ0FBaUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRO0FBQUEsSUFDM0YsQ0FBQztBQUFBLElBRUQsc0JBQWtCLG9DQUFlO0FBQUEsTUFDL0IsSUFBSSxzQkFBc0IsSUFBSTtBQUFBLE1BQzlCLGNBQWMsQ0FBQyw2QkFBNkI7QUFBQSxNQUU1QyxhQUFhLENBQUMsT0FBTztBQUNuQixjQUFNLFNBQVMsb0JBQW9CLE1BQU0sR0FBRyxRQUFRO0FBQ3BELGNBQU0sa0JBQWtCLEdBQUcsT0FBTyw2QkFBNkIsRUFBRTtBQUNqRSxjQUFNLG1CQUFxQyxDQUFDLE9BQU8sZ0JBQWdCLEVBQUUsSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUV2RixlQUFPLE1BQU07QUFBQSxNQUNmO0FBQUEsTUFFQSxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsTUFBTSwrQkFBK0IsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRO0FBQUEsSUFDekYsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIOzs7QVVsTEEsSUFBQUMsc0JBQW1GO0FBK0M1RSxJQUFNLDhDQUEwQyx3Q0FHcEQ7QUFBQSxFQUNELElBQUk7QUFBQSxFQUNKLGFBQWE7QUFDZixDQUFDO0FBQUEsRUFDQyxDQUFDLGFBQ0Msd0NBR0c7QUFBQSxJQUNELElBQUksaUNBQWlDLElBQUk7QUFBQSxJQUN6QyxZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQUEsSUFDQyxDQUFDLGlCQUNDLHdDQUdHO0FBQUEsTUFDRCxJQUFJLGlDQUFpQyxvQkFBb0IsTUFBTSxRQUFRLENBQUM7QUFBQSxNQUN4RSxZQUFZLG9CQUFvQixNQUFNLFFBQVE7QUFBQSxNQUM5QyxhQUFhO0FBQUEsSUFDZixDQUFDLEVBQUU7QUFBQSxFQUNQO0FBQ0o7IiwKICAibmFtZXMiOiBbImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlX3JlYWN0IiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIiwgImltcG9ydF9pbmplY3RhYmxlIl0KfQo=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type ManyFactory, type SpecificInjectionToken2 } from "@k8slens/injectable";
|
|
2
|
+
import type { HotbarItemId } from "./hotbar-item-id";
|
|
3
|
+
import type { HotbarItemKind, HotbarItemPersistedData } from "./hotbar-item-kind";
|
|
4
|
+
/**
|
|
5
|
+
* Adds an item of one kind to the hotbar: persists its data under its id, then puts it
|
|
6
|
+
* into the first free slot of the current page. Tells the user when there is no free slot.
|
|
7
|
+
*
|
|
8
|
+
* An item is identified by its kind and then its id, so the id needs to be unique only among
|
|
9
|
+
* items of the kind. Throws when an item of the kind with the id is already on the current
|
|
10
|
+
* page, leaving the hotbar and the item's persisted data as they were. A toggle asks
|
|
11
|
+
* {@link isInHotbarInjectionToken} first.
|
|
12
|
+
*/
|
|
13
|
+
export type AddToHotbar<PersistedData> = (item: {
|
|
14
|
+
readonly id: HotbarItemId;
|
|
15
|
+
readonly persistedData: PersistedData;
|
|
16
|
+
}) => Promise<void>;
|
|
17
|
+
/** What `.for(kind).for(scopeIds)` yields: exactly one adder per kind per scope, typed by its persisted data. */
|
|
18
|
+
export type AddToHotbarTokenFor<PersistedData> = SpecificInjectionToken2<{
|
|
19
|
+
singleFactory: () => AddToHotbar<PersistedData>;
|
|
20
|
+
specificTokenFactory: undefined;
|
|
21
|
+
cardinality: "one";
|
|
22
|
+
}>;
|
|
23
|
+
/** What `.for(kind)` yields: the kind's adders, one per scope, reached with `.for(scopeIds)`. */
|
|
24
|
+
export type AddToHotbarTokenForKind<PersistedData> = SpecificInjectionToken2<{
|
|
25
|
+
singleFactory: () => AddToHotbar<PersistedData>;
|
|
26
|
+
manyFactory: ManyFactory<() => AddToHotbar<PersistedData>>;
|
|
27
|
+
specificTokenFactory: (scopeIds: readonly string[]) => AddToHotbarTokenFor<PersistedData>;
|
|
28
|
+
cardinality: "zero-or-many";
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* The `.for()` factories, annotated so a kind's own persisted data type survives both levels.
|
|
32
|
+
* Inference from the value alone cannot reconstruct a return type that mentions the
|
|
33
|
+
* specifier's own type parameter.
|
|
34
|
+
*/
|
|
35
|
+
declare const addToHotbarTokenForKind: <K extends HotbarItemKind<any>>(kind: K) => AddToHotbarTokenForKind<HotbarItemPersistedData<K>>;
|
|
36
|
+
/**
|
|
37
|
+
* Add an item to the hotbar, typed by its kind: `.for(kind)` narrows to the kind, whose
|
|
38
|
+
* `persistedData` is what the kind was created for, and `.for(scopeIds)` to the registration
|
|
39
|
+
* of it, with the `di.scopeIds` of the injectable asking. Registered by
|
|
40
|
+
* `getHotbarItemKindInjectableBunch`, so every registered kind has one.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* const addBookmarkToHotbar = di.inject(addToHotbarInjectionToken.for(bookmarkHotbarItemKind).for(di.scopeIds))();
|
|
45
|
+
*
|
|
46
|
+
* await addBookmarkToHotbar({ id: `bookmark(${url})`, persistedData: { url } });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare const addToHotbarInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => AddToHotbar<any>, () => AddToHotbar<any>[], "zero-or-many", () => import("@k8slens/injectable").InjectionInstanceWithMeta<AddToHotbar<any>>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<AddToHotbar<any>>[]> & {
|
|
50
|
+
readonly __abstract: true;
|
|
51
|
+
for: typeof addToHotbarTokenForKind;
|
|
52
|
+
};
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=add-to-hotbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-to-hotbar.d.ts","sourceRoot":"","sources":["../../src/add-to-hotbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAIlF;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE;IAC9C,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,iHAAiH;AACjH,MAAM,MAAM,mBAAmB,CAAC,aAAa,IAAI,uBAAuB,CAAC;IACvE,aAAa,EAAE,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAChD,oBAAoB,EAAE,SAAS,CAAC;IAChC,WAAW,EAAE,KAAK,CAAC;CACpB,CAAC,CAAC;AAEH,iGAAiG;AACjG,MAAM,MAAM,uBAAuB,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAC3E,aAAa,EAAE,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IAChD,WAAW,EAAE,WAAW,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3D,oBAAoB,EAAE,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC1F,WAAW,EAAE,cAAc,CAAC;CAC7B,CAAC,CAAC;AAEH;;;;GAIG;AACH,QAAA,MAAM,uBAAuB,GAAI,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,QACtD,CAAC,KACN,uBAAuB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAelD,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,0DACf,WAAW,CAAC,GAAG,CAAC;;;CAKZ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HotbarItem } from "./hotbar-item";
|
|
2
|
+
/**
|
|
3
|
+
* Takes the item, as `{ id, kind }`, out of the current hotbar page. Throws when no such item
|
|
4
|
+
* is there.
|
|
5
|
+
*/
|
|
6
|
+
export type EjectHotbarItem = (item: HotbarItem) => Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* The hotbar's own removal, the counterpart of `insertHotbarItemInjectionToken`: one
|
|
9
|
+
* implementation for every kind, given the whole `{ id, kind }`.
|
|
10
|
+
* `getHotbarItemKindInjectableBunch` builds `removeFromHotbarInjectionToken.for(kind)` on it,
|
|
11
|
+
* so reach for that one instead.
|
|
12
|
+
*
|
|
13
|
+
* Implemented by the hotbar.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ejectHotbarItemInjectionToken: import("@k8slens/injectable").InjectionToken2Base<() => EjectHotbarItem, () => EjectHotbarItem[], "one", () => import("@k8slens/injectable").InjectionInstanceWithMeta<EjectHotbarItem>, () => import("@k8slens/injectable").InjectionInstanceWithMeta<EjectHotbarItem>[]> & {
|
|
16
|
+
readonly __abstract?: never;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=eject-hotbar-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eject-hotbar-item.d.ts","sourceRoot":"","sources":["../../src/eject-hotbar-item.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElE;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,0DAA6C,eAAe;;CAGlG,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import { type AddToHotbar } from "./add-to-hotbar";
|
|
3
|
+
import type { HotbarItemId } from "./hotbar-item-id";
|
|
4
|
+
import { type HotbarItemKind, type HotbarItemPersistedData } from "./hotbar-item-kind";
|
|
5
|
+
import { type IsInHotbar, type IsInHotbarReactive } from "./is-in-hotbar";
|
|
6
|
+
import { type RemoveFromHotbar } from "./remove-from-hotbar";
|
|
7
|
+
/**
|
|
8
|
+
* What a kind's component receives: which item it renders, and the data that was
|
|
9
|
+
* persisted when the item was added. Typed by the kind.
|
|
10
|
+
*/
|
|
11
|
+
export interface HotbarItemProps<K extends HotbarItemKind<any>> {
|
|
12
|
+
readonly id: HotbarItemId;
|
|
13
|
+
readonly persistedData: HotbarItemPersistedData<K>;
|
|
14
|
+
}
|
|
15
|
+
export interface HotbarItemKindBunchParams<K extends HotbarItemKind<any>> {
|
|
16
|
+
/** The kind being registered, from `getHotbarItemKind`. */
|
|
17
|
+
readonly kind: K;
|
|
18
|
+
/**
|
|
19
|
+
* Renders an item of the kind, inside the slot's frame. Receives the item's id and its
|
|
20
|
+
* persisted data, and decides everything else: what the item looks like, and what
|
|
21
|
+
* clicking it does. Must be defined at module scope.
|
|
22
|
+
*/
|
|
23
|
+
readonly Component: React.ComponentType<HotbarItemProps<K>>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Register a kind of hotbar item. One call declares how items of the kind render, wires
|
|
27
|
+
* their persisted data, and gives the kind its typed adder, `addToHotbarInjectionToken.for(kind).for(scopeIds)`,
|
|
28
|
+
* along with its own membership queries and remover, `isInHotbarInjectionToken.for(kind).for(scopeIds)`,
|
|
29
|
+
* `isInHotbarReactiveInjectionToken.for(kind).for(scopeIds)` and `removeFromHotbarInjectionToken.for(kind).for(scopeIds)`.
|
|
30
|
+
*
|
|
31
|
+
* The last `.for()` is the scope of the registration: every token here is registered under
|
|
32
|
+
* the scopes of whoever registers the bunch, so two extensions declaring a kind with the same
|
|
33
|
+
* specifier never meet. Items are identified by their kind, its scopes, and then their own
|
|
34
|
+
* id, never by the id alone.
|
|
35
|
+
*
|
|
36
|
+
* The hotbar frames each item, persists its `{ id, kind }` and data, pages and drags it,
|
|
37
|
+
* and gives its right-click menu a way to remove it. The component owns the rest.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* export const bookmarkHotbarItemKind = getHotbarItemKind<{ url: string }>()("my-extension-bookmark");
|
|
42
|
+
*
|
|
43
|
+
* const Bookmark = ({ persistedData }: HotbarItemProps<typeof bookmarkHotbarItemKind>) => (
|
|
44
|
+
* <Button onClick={() => open(persistedData.url)}>{new URL(persistedData.url).host}</Button>
|
|
45
|
+
* );
|
|
46
|
+
*
|
|
47
|
+
* export default getHotbarItemKindInjectableBunch({
|
|
48
|
+
* kind: bookmarkHotbarItemKind,
|
|
49
|
+
* Component: Bookmark,
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const getHotbarItemKindInjectableBunch: <K extends HotbarItemKind<any>>({ kind, Component, }: HotbarItemKindBunchParams<K>) => {
|
|
54
|
+
component: import("@k8slens/injectable-react").InjectableComponent2<import("./hotbar-item-component").HotbarItemComponent>;
|
|
55
|
+
addToHotbar: import("@k8slens/injectable").Injectable2<() => AddToHotbar<HotbarItemPersistedData<K>>>;
|
|
56
|
+
isInHotbar: import("@k8slens/injectable").Injectable2<() => IsInHotbar>;
|
|
57
|
+
isInHotbarReactive: import("@k8slens/injectable").Injectable2<IsInHotbarReactive>;
|
|
58
|
+
removeFromHotbar: import("@k8slens/injectable").Injectable2<() => RemoveFromHotbar>;
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=get-hotbar-item-kind-injectable-bunch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-hotbar-item-kind-injectable-bunch.d.ts","sourceRoot":"","sources":["../../src/get-hotbar-item-kind-injectable-bunch.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,WAAW,EAA6B,MAAM,iBAAiB,CAAC;AAK9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAuB,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG5G,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EAGxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,gBAAgB,EAAkC,MAAM,sBAAsB,CAAC;AAE7F;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC;IAC5D,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,yBAAyB,CAAC,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC;IACtE,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,gCAAgC,GAAI,CAAC,SAAS,cAAc,CAAC,GAAG,CAAC,wBAG3E,yBAAyB,CAAC,CAAC,CAAC;;;;;;CAyG9B,CAAC"}
|