@expressive/mvc 0.71.0 → 0.72.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.
@@ -1,90 +1,81 @@
1
+ import { enter } from "../control";
1
2
  import { Context } from "../context";
2
- import { createEffect } from "../control";
3
- import { fetch, METHOD, Model, PARENT, event, update } from "../model";
3
+ import { PARENT, update } from "../state";
4
4
  import { use } from "./use";
5
- const STALE = /* @__PURE__ */ new WeakSet();
6
- function get(arg0, arg1) {
7
- return use((key, subject, state) => {
8
- if (typeof arg0 == "symbol")
9
- throw new Error(`Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`);
10
- if (Model.is(arg0)) {
11
- let assign2 = function(value) {
12
- if (typeof arg1 == "function")
13
- value.get((x) => arg1(x, key));
14
- update(subject, key, value);
5
+ function get(Type, arg1, arg2) {
6
+ const isDownstream = arg1 === true;
7
+ const isOptional = arg1 === false;
8
+ return use((key, subject) => {
9
+ if (isDownstream) {
10
+ const callback = typeof arg2 === "function" ? arg2 : void 0;
11
+ const applied = /* @__PURE__ */ new Set();
12
+ const reset = () => {
13
+ update(subject, key, Object.freeze(Array.from(applied)));
15
14
  };
16
- var assign = assign2;
17
- const hasParent = PARENT.get(subject);
18
- if (!hasParent && arg1 === true)
19
- throw new Error(`${subject} may only exist as a child of type ${arg0}.`);
20
- else if (hasParent) {
21
- if (hasParent instanceof arg0) {
22
- assign2(hasParent);
23
- return {};
24
- } else if (arg1 === true)
25
- throw new Error(`New ${subject} created as child of ${hasParent}, but must be instanceof ${arg0}.`);
26
- }
27
15
  Context.get(subject, (context) => {
28
- const model = context.get(arg0);
29
- if (model)
30
- assign2(model);
31
- else if (arg1 !== false)
32
- throw new Error(`Required ${arg0} not found in context for ${subject}.`);
16
+ context.get(Type, (state) => {
17
+ let remove;
18
+ let flush;
19
+ if (applied.has(state)) return;
20
+ if (callback) {
21
+ const exit = enter();
22
+ try {
23
+ const done2 = callback(state, subject);
24
+ if (done2 === false) return false;
25
+ if (typeof done2 == "function") remove = done2;
26
+ } finally {
27
+ flush = exit();
28
+ }
29
+ }
30
+ applied.add(state);
31
+ reset();
32
+ const done = () => {
33
+ if (flush) flush();
34
+ ignore();
35
+ applied.delete(state);
36
+ reset();
37
+ if (typeof remove == "function") remove();
38
+ remove = void 0;
39
+ };
40
+ const ignore = state.set(done, null);
41
+ return done;
42
+ });
33
43
  });
34
44
  return {
35
- get: arg1 !== false,
45
+ value: [],
36
46
  enumerable: false
37
47
  };
38
48
  }
39
- let from = subject;
40
- if (arg0 instanceof Model) {
41
- from = arg0;
42
- } else {
43
- const fn = METHOD.get(arg0) || arg0;
44
- arg1 = (p, k) => fn.call(p, k, p);
45
- }
46
- const source = (resolve) => resolve(from);
47
- const getter = arg1;
48
- let reset;
49
- let isAsync;
50
- let proxy;
51
- function connect(model) {
52
- reset = createEffect(model, (current) => {
53
- proxy = current;
54
- if (!(key in state) || STALE.delete(compute))
55
- compute(!reset);
56
- return (didUpdate) => {
57
- if (didUpdate) {
58
- STALE.add(compute);
59
- event(subject, key, true);
60
- }
61
- };
62
- }, false);
63
- }
64
- function compute(initial) {
65
- let next;
66
- try {
67
- next = getter.call(proxy, proxy, key);
68
- } catch (err) {
69
- console.warn(`An exception was thrown while ${initial ? "initializing" : "refreshing"} ${subject}.${key}.`);
70
- if (initial)
71
- throw err;
72
- console.error(err);
49
+ const hasParent = PARENT.get(subject);
50
+ function assign(value) {
51
+ if (typeof arg1 === "function") {
52
+ const callback = arg1;
53
+ const result = callback(value, subject);
54
+ if (typeof result === "function") {
55
+ subject.set(result, null);
56
+ }
73
57
  }
74
- update(subject, key, next, !isAsync);
58
+ update(subject, key, value);
75
59
  }
76
- return () => {
77
- if (!proxy) {
78
- source(connect);
79
- isAsync = true;
80
- }
81
- if (STALE.delete(compute))
82
- compute();
83
- return fetch(subject, key, !proxy);
60
+ if (hasParent && hasParent instanceof Type) {
61
+ assign(hasParent);
62
+ return {};
63
+ }
64
+ Context.get(subject, (context) => {
65
+ const self = context.get(Type);
66
+ if (self) assign(self);
67
+ else if (!isOptional)
68
+ throw new Error(
69
+ `Required ${Type} not found in context for ${subject}.`
70
+ );
71
+ });
72
+ return {
73
+ get: !isOptional,
74
+ enumerable: false
84
75
  };
85
76
  });
86
77
  }
87
78
  export {
88
79
  get
89
80
  };
90
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2dldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgY3JlYXRlRWZmZWN0IH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBmZXRjaCwgTUVUSE9ELCBNb2RlbCwgUEFSRU5ULCBldmVudCwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG50eXBlIFR5cGU8VCBleHRlbmRzIE1vZGVsPiA9IE1vZGVsLlR5cGU8VD4gJiB0eXBlb2YgTW9kZWw7XG5cbmNvbnN0IFNUQUxFID0gbmV3IFdlYWtTZXQ8KCkgPT4gdm9pZD4oKTtcblxuZGVjbGFyZSBuYW1lc3BhY2UgZ2V0IHtcbiAgdHlwZSBDb21wdXRlPFQsIFMgPSBhbnk+ID0gKG9uOiBTLCBrZXk6IHN0cmluZykgPT4gVDtcblxuICB0eXBlIEZhY3Rvcnk8VCwgUyA9IGFueT4gPSAodGhpczogUywga2V5OiBzdHJpbmcsIHRoaXNBcmc6IFMpID0+IFQ7XG5cbiAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIHR5cGUgRWZmZWN0PFQ+ID0gKG1vZGVsOiBULCBrZXk6IHN0cmluZykgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBhc3NpZ25zIHRoZSBjb250cm9sbGVyIHdoaWNoIHNwYXduZWQgdGhpcyBob3N0LlxuICogV2hlbiBwYXJlbnQgYXNzaWducyBhbiBpbnN0YW5jZSB2aWEgYHVzZSgpYCBkaXJlY3RpdmUsIGl0XG4gKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGNoaWxkIHVwb24gdGhpcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNsYXNzLiBcbiAqIEBwYXJhbSBleHBlY3RQYXJlbnQgLSBJZiB0cnVlLCB3aWxsIHRocm93IGlmIE1vZGVsIGlzIGNyZWF0ZWQgd2l0aG91dCBhIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBleHBlY3RQYXJlbnQ/OiB0cnVlKTogVDtcblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBhc3NpZ25zIHRoZSBjb250cm9sbGVyIHdoaWNoIHNwYXduZWQgdGhpcyBob3N0LlxuICogV2hlbiBwYXJlbnQgYXNzaWducyBhbiBpbnN0YW5jZSB2aWEgYHVzZSgpYCBkaXJlY3RpdmUsIGl0XG4gKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGNoaWxkIHVwb24gdGhpcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNsYXNzLiBcbiAqIEBwYXJhbSByZXF1aXJlZCAtIElmIGZhbHNlLCBwcm9wZXJ0eSBtYXkgYmUgdW5kZWZpbmVkLiBPdGhlcndpc2Ugd2lsbCB0aHJvdyBzdXNwZW5zZS5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlZD86IGZhbHNlKTogVCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBJbXBsZW1lbnQgYSBjb21wdXRlZCB2YWx1ZSBmcm9tIGEgZm9yZWlnbiBtb2RlbC4gT3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHByb3ZpZGVkIGZ1bmN0aW9uLFxuICogd2hlcmUgdGhlIGZvcmVpZ24gbW9kZWwgd2lsbCBiZSBwYXNzZWQgdG8gdGhhdCBmdW5jdGlvbi5cbiAqIFxuICogQHBhcmFtIHNvdXJjZSAtIFR5cGUgb2YgTW9kZWwgdG8gZmV0Y2ggZm9yIGNvbXB1dGF0aW9uLlxuICogQHBhcmFtIGNvbXB1dGUgLSBDb21wdXRlIGZ1bmN0aW9uLiBXaWxsIHVwZGF0ZSBhdXRvbWF0aWNhbGx5IGFzIGlucHV0IHZhbHVlcyBjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldCA8VCBleHRlbmRzIE1vZGVsPiAoVHlwZTogTW9kZWwuVHlwZTxUPiwgZWZmZWN0OiBnZXQuRWZmZWN0PFQ+KTogVDtcblxuLyoqXG4gKiBJbXBsZW1lbnQgYSBjb21wdXRlZCB2YWx1ZTsgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHByb3ZpZGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgLSBTb3VyY2UgbW9kZWwgZnJvbSB3aGljaCBjb21wdXRlZCB2YWx1ZSB3aWxsIGJlIGEgc3Vic2NyaWJlci5cbiAqIEBwYXJhbSBjb21wdXRlIC0gQ29tcHV0ZSBmdW5jdGlvbi4gQm91bmQgdG8gYSBzdWJzY3JpYmVyLXByb3h5IG9mIHNvdXJjZSwgcmV0dXJucyBvdXRwdXQgdmFsdWUuIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxSLCBUIGV4dGVuZHMgTW9kZWw+IChzb3VyY2U6IFQsIGNvbXB1dGU6IGdldC5Db21wdXRlPFIsIFQ+KTogUjtcblxuLyoqXG4gKiBJbXBsZW1lbnQgYSBjb21wdXRlZCB2YWx1ZTsgb3V0cHV0IGlzIHJldHVybmVkIGJ5IGZ1bmN0aW9uIGZyb20gcHJvdmlkZWQgZmFjdG9yeS5cbiAqIFxuICogRmFjdG9yeSBpcyBib3VuZCB0byBvd25lciBvZiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gY29tcHV0ZSAtIEZhY3RvcnkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBnZXR0ZXIgdG8gc3Vic2NyaWJlIGRlcGVuZGFuY2llcy5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxSLCBUPiAoY29tcHV0ZTogZ2V0LkZhY3Rvcnk8UiwgVD4pOiBSO1xuIFxuZnVuY3Rpb24gZ2V0PFIsIFQgZXh0ZW5kcyBNb2RlbD4oXG4gIGFyZzA6IFQgfCBnZXQuRmFjdG9yeTxSLCBUPiB8IFR5cGU8VD4sXG4gIGFyZzE/OiBGdW5jdGlvbiB8IGJvb2xlYW4pe1xuXG4gIHJldHVybiB1c2UoKGtleSwgc3ViamVjdCwgc3RhdGUpID0+IHtcbiAgICBpZih0eXBlb2YgYXJnMCA9PSBcInN5bWJvbFwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0ZWQgdG8gdXNlIGFuIGluc3RydWN0aW9uIHJlc3VsdCAocHJvYmFibHkgdXNlIG9yIGdldCkgYXMgY29tcHV0ZWQgc291cmNlIGZvciAke3N1YmplY3R9LiR7a2V5fS4gVGhpcyBpcyBub3QgYWxsb3dlZC5gKVxuXG4gICAgaWYoTW9kZWwuaXMoYXJnMCkpe1xuICAgICAgY29uc3QgaGFzUGFyZW50ID0gUEFSRU5ULmdldChzdWJqZWN0KSBhcyBUO1xuXG4gICAgICAvLyBUT0RPOiBub3RpZnkgb24gZGlzY292ZXJlZCBjb250ZXh0IFxuICAgICAgZnVuY3Rpb24gYXNzaWduKHZhbHVlOiBUKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgdmFsdWUuZ2V0KHggPT4gKGFyZzEgYXMgRnVuY3Rpb24pKHgsIGtleSkpO1xuXG4gICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYoIWhhc1BhcmVudCAmJiBhcmcxID09PSB0cnVlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3ViamVjdH0gbWF5IG9ubHkgZXhpc3QgYXMgYSBjaGlsZCBvZiB0eXBlICR7YXJnMH0uYCk7XG4gICAgICBlbHNlIGlmKGhhc1BhcmVudClcbiAgICAgICAgaWYoaGFzUGFyZW50IGluc3RhbmNlb2YgYXJnMCl7XG4gICAgICAgICAgYXNzaWduKGhhc1BhcmVudCk7XG4gICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihhcmcxID09PSB0cnVlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTmV3ICR7c3ViamVjdH0gY3JlYXRlZCBhcyBjaGlsZCBvZiAke2hhc1BhcmVudH0sIGJ1dCBtdXN0IGJlIGluc3RhbmNlb2YgJHthcmcwfS5gKTtcbiBcbiAgICAgIENvbnRleHQuZ2V0KHN1YmplY3QsIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXQoYXJnMCk7XG5cbiAgICAgICAgaWYobW9kZWwpXG4gICAgICAgICAgYXNzaWduKG1vZGVsKTtcbiAgICAgICAgZWxzZSBpZihhcmcxICE9PSBmYWxzZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkICR7YXJnMH0gbm90IGZvdW5kIGluIGNvbnRleHQgZm9yICR7c3ViamVjdH0uYClcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXQ6IGFyZzEgIT09IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgbGV0IGZyb20gPSBzdWJqZWN0O1xuICAgIFxuICAgIGlmKGFyZzAgaW5zdGFuY2VvZiBNb2RlbCl7XG4gICAgICBmcm9tID0gYXJnMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBmbiA9IE1FVEhPRC5nZXQoYXJnMCkgfHwgYXJnMDtcbiAgICAgIGFyZzEgPSAoKHAsIGspID0+IGZuLmNhbGwocCwgaywgcCkpIGFzIGdldC5FZmZlY3Q8VD47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlOiBnZXQuU291cmNlPFQ+ID0gcmVzb2x2ZSA9PiByZXNvbHZlKGZyb20pO1xuICAgIGNvbnN0IGdldHRlciA9IGFyZzEgYXMgZ2V0LkNvbXB1dGU8UiwgVD47XG5cbiAgICBsZXQgcmVzZXQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaXNBc3luYzogYm9vbGVhbjtcbiAgICBsZXQgcHJveHk6IGFueTtcblxuICAgIGZ1bmN0aW9uIGNvbm5lY3QobW9kZWw6IE1vZGVsKXtcbiAgICAgIHJlc2V0ID0gY3JlYXRlRWZmZWN0KG1vZGVsLCBjdXJyZW50ID0+IHtcbiAgICAgICAgcHJveHkgPSBjdXJyZW50O1xuXG4gICAgICAgIGlmKCEoa2V5IGluIHN0YXRlKSB8fCBTVEFMRS5kZWxldGUoY29tcHV0ZSkpXG4gICAgICAgICAgY29tcHV0ZSghcmVzZXQpO1xuXG4gICAgICAgIHJldHVybiAoZGlkVXBkYXRlKSA9PiB7XG4gICAgICAgICAgaWYoZGlkVXBkYXRlKXtcbiAgICAgICAgICAgIFNUQUxFLmFkZChjb21wdXRlKTtcbiAgICAgICAgICAgIGV2ZW50KHN1YmplY3QsIGtleSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSwgZmFsc2UpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZShpbml0aWFsPzogYm9vbGVhbil7XG4gICAgICBsZXQgbmV4dDogUiB8IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dCA9IGdldHRlci5jYWxsKHByb3h5LCBwcm94eSwga2V5KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycil7XG4gICAgICAgIGNvbnNvbGUud2FybihgQW4gZXhjZXB0aW9uIHdhcyB0aHJvd24gd2hpbGUgJHtpbml0aWFsID8gXCJpbml0aWFsaXppbmdcIiA6IFwicmVmcmVzaGluZ1wifSAke3N1YmplY3R9LiR7a2V5fS5gKVxuXG4gICAgICAgIGlmKGluaXRpYWwpXG4gICAgICAgICAgdGhyb3cgZXJyO1xuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgbmV4dCwgIWlzQXN5bmMpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZighcHJveHkpe1xuICAgICAgICBzb3VyY2UoY29ubmVjdCk7XG4gICAgICAgIGlzQXN5bmMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZihTVEFMRS5kZWxldGUoY29tcHV0ZSkpXG4gICAgICAgIGNvbXB1dGUoKTtcblxuICAgICAgcmV0dXJuIGZldGNoKHN1YmplY3QsIGtleSwgIXByb3h5KSBhcyBUO1xuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IHsgZ2V0IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsT0FBTyxRQUFRLE9BQU8sUUFBUSxPQUFPLGNBQWM7QUFDNUQsU0FBUyxXQUFXO0FBSXBCLE1BQU0sUUFBUSxvQkFBSSxRQUFvQjtBQTBEdEMsU0FBUyxJQUNQLE1BQ0EsTUFBMEI7QUFFMUIsU0FBTyxJQUFJLENBQUMsS0FBSyxTQUFTLFVBQVU7QUFDbEMsUUFBRyxPQUFPLFFBQVE7QUFDaEIsWUFBTSxJQUFJLE1BQU0sdUZBQXVGLE9BQU8sSUFBSSxHQUFHLHdCQUF3QjtBQUUvSSxRQUFHLE1BQU0sR0FBRyxJQUFJLEdBQUU7QUFJaEIsVUFBU0EsVUFBVCxTQUFnQixPQUFVO0FBQ3hCLFlBQUksT0FBTyxRQUFRO0FBQ2pCLGdCQUFNLElBQUksT0FBTSxLQUFrQixHQUFHLEdBQUcsQ0FBQztBQUUzQyxlQUFPLFNBQVMsS0FBSyxLQUFLO0FBQUEsTUFDNUI7QUFMUyxtQkFBQUE7QUFIVCxZQUFNLFlBQVksT0FBTyxJQUFJLE9BQU87QUFVcEMsVUFBRyxDQUFDLGFBQWEsU0FBUztBQUN4QixjQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sc0NBQXNDLElBQUksR0FBRztBQUFBLGVBQ2pFO0FBQ04sWUFBRyxxQkFBcUIsTUFBSztBQUMzQixVQUFBQSxRQUFPLFNBQVM7QUFDaEIsaUJBQU8sQ0FBQztBQUFBLFFBQ1YsV0FDUSxTQUFTO0FBQ2YsZ0JBQU0sSUFBSSxNQUFNLE9BQU8sT0FBTyx3QkFBd0IsU0FBUyw0QkFBNEIsSUFBSSxHQUFHO0FBQUE7QUFFdEcsY0FBUSxJQUFJLFNBQVMsQ0FBQyxZQUFZO0FBQ2hDLGNBQU0sUUFBUSxRQUFRLElBQUksSUFBSTtBQUU5QixZQUFHO0FBQ0QsVUFBQUEsUUFBTyxLQUFLO0FBQUEsaUJBQ04sU0FBUztBQUNmLGdCQUFNLElBQUksTUFBTSxZQUFZLElBQUksNkJBQTZCLE9BQU8sR0FBRztBQUFBLE1BQzNFLENBQUM7QUFFRCxhQUFPO0FBQUEsUUFDTCxLQUFLLFNBQVM7QUFBQSxRQUNkLFlBQVk7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUVBLFFBQUksT0FBTztBQUVYLFFBQUcsZ0JBQWdCLE9BQU07QUFDdkIsYUFBTztBQUFBLElBQ1QsT0FDSztBQUNILFlBQU0sS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLO0FBQy9CLGFBQVEsQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQUEsSUFDbkM7QUFFQSxVQUFNLFNBQXdCLGFBQVcsUUFBUSxJQUFJO0FBQ3JELFVBQU0sU0FBUztBQUVmLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUVKLGFBQVMsUUFBUSxPQUFhO0FBQzVCLGNBQVEsYUFBYSxPQUFPLGFBQVc7QUFDckMsZ0JBQVE7QUFFUixZQUFHLEVBQUUsT0FBTyxVQUFVLE1BQU0sT0FBTyxPQUFPO0FBQ3hDLGtCQUFRLENBQUMsS0FBSztBQUVoQixlQUFPLENBQUMsY0FBYztBQUNwQixjQUFHLFdBQVU7QUFDWCxrQkFBTSxJQUFJLE9BQU87QUFDakIsa0JBQU0sU0FBUyxLQUFLLElBQUk7QUFBQSxVQUMxQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLEdBQUcsS0FBSztBQUFBLElBQ1Y7QUFFQSxhQUFTLFFBQVEsU0FBa0I7QUFDakMsVUFBSTtBQUVKLFVBQUk7QUFDRixlQUFPLE9BQU8sS0FBSyxPQUFPLE9BQU8sR0FBRztBQUFBLE1BQ3RDLFNBQ00sS0FBSTtBQUNSLGdCQUFRLEtBQUssaUNBQWlDLFVBQVUsaUJBQWlCLFlBQVksSUFBSSxPQUFPLElBQUksR0FBRyxHQUFHO0FBRTFHLFlBQUc7QUFDRCxnQkFBTTtBQUVSLGdCQUFRLE1BQU0sR0FBRztBQUFBLE1BQ25CO0FBRUEsYUFBTyxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU87QUFBQSxJQUNyQztBQUVBLFdBQU8sTUFBTTtBQUNYLFVBQUcsQ0FBQyxPQUFNO0FBQ1IsZUFBTyxPQUFPO0FBQ2Qsa0JBQVU7QUFBQSxNQUNaO0FBRUEsVUFBRyxNQUFNLE9BQU8sT0FBTztBQUNyQixnQkFBUTtBQUVWLGFBQU8sTUFBTSxTQUFTLEtBQUssQ0FBQyxLQUFLO0FBQUEsSUFDbkM7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiYXNzaWduIl0KfQo=
81
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2dldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZW50ZXIgfSBmcm9tICcuLi9jb250cm9sJztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IFN0YXRlLCBQQVJFTlQsIHVwZGF0ZSB9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxudHlwZSBUeXBlPFQgZXh0ZW5kcyBTdGF0ZT4gPSBTdGF0ZS5FeHRlbmRzPFQ+ICYgdHlwZW9mIFN0YXRlO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSBnZXQge1xuICB0eXBlIENhbGxiYWNrPFQgPSBhbnk+ID0gKFxuICAgIHN0YXRlOiBULFxuICAgIHN1YmplY3Q6IFN0YXRlXG4gICkgPT4gdm9pZCB8IGJvb2xlYW4gfCAoKCkgPT4gdm9pZCk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyB1cHN0cmVhbSBTdGF0ZSBmcm9tIGNvbnRleHQgd2l0aCBvcHRpb25hbCBsaWZlY3ljbGUgY2FsbGJhY2suXG4gKiBDYWxsYmFjayBydW5zIG9uIG1vdW50IGFuZCBjYW4gcmV0dXJuIGNsZWFudXAgZnVuY3Rpb24gZm9yIHVubW91bnQuXG4gKlxuICogQHBhcmFtIFR5cGUgLSBUeXBlIG9mIFN0YXRlIHRvIGZldGNoLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gT3B0aW9uYWwgbGlmZWN5Y2xlIGNhbGxiYWNrLCByZWNlaXZlcyAoc3RhdGUsIHN1YmplY3QpLiBDYW4gcmV0dXJuIGNsZWFudXAgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGdldDxUIGV4dGVuZHMgU3RhdGU+KFxuICBUeXBlOiBTdGF0ZS5FeHRlbmRzPFQ+LFxuICBjYWxsYmFjaz86IGdldC5DYWxsYmFjazxUPlxuKTogVDtcblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBhc3NpZ25zIHRoZSBjb250cm9sbGVyIHdoaWNoIHNwYXduZWQgdGhpcyBob3N0LlxuICogV2hlbiBwYXJlbnQgYXNzaWducyBhbiBpbnN0YW5jZSB2aWEgYHVzZSgpYCBkaXJlY3RpdmUsIGl0XG4gKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGNoaWxkIHVwb24gdGhpcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNsYXNzLlxuICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgZmFsc2UsIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQuIE90aGVyd2lzZSB3aWxsIHRocm93IHN1c3BlbnNlLlxuICovXG5mdW5jdGlvbiBnZXQ8VCBleHRlbmRzIFN0YXRlPihcbiAgVHlwZTogU3RhdGUuRXh0ZW5kczxUPixcbiAgcmVxdWlyZWQ6IGZhbHNlXG4pOiBUIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIENvbGxlY3RzIGRvd25zdHJlYW0gU3RhdGVzLCB0aGlzIHdpbGwgYWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIG9mIHNwZWNpZmllZCB0eXBlIGZvciB3aGljaCB0aGlzIGlzIGFuIGFuY2VzdG9yLlxuICogUmV0dXJucyBhIGZyb3plbiBhcnJheSB0aGF0IHVwZGF0ZXMgYXMgU3RhdGVzIGFyZSBhZGRlZCBvciByZW1vdmVkLlxuICogQ2FsbGJhY2sgcnVucyBvbiBlYWNoIFN0YXRlIHJlZ2lzdHJhdGlvbiBhbmQgY2FuIHJldHVybiBjbGVhbnVwIG9yIGZhbHNlIHRvIHByZXZlbnQgcmVnaXN0cmF0aW9uLlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBTdGF0ZSB0byBjb2xsZWN0LlxuICogQHBhcmFtIGRvd25zdHJlYW0gLSBNdXN0IGJlIHRydWUgdG8gZW5hYmxlIGRvd25zdHJlYW0gbW9kZS5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGxpZmVjeWNsZSBjYWxsYmFjaywgcmVjZWl2ZXMgKHN0YXRlLCBzdWJqZWN0KS4gTWF5IHJldHVybiBmYWxzZSB0byBwcmV2ZW50IHJlZ2lzdHJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oXG4gIFR5cGU6IFN0YXRlLkV4dGVuZHM8VD4sXG4gIGRvd25zdHJlYW06IHRydWUsXG4gIGNhbGxiYWNrPzogZ2V0LkNhbGxiYWNrPFQ+XG4pOiByZWFkb25seSBUW107XG5cbmZ1bmN0aW9uIGdldDxSLCBUIGV4dGVuZHMgU3RhdGU+KFxuICBUeXBlOiBUeXBlPFQ+LFxuICBhcmcxPzogRnVuY3Rpb24gfCBib29sZWFuLFxuICBhcmcyPzogRnVuY3Rpb25cbikge1xuICBjb25zdCBpc0Rvd25zdHJlYW0gPSBhcmcxID09PSB0cnVlO1xuICBjb25zdCBpc09wdGlvbmFsID0gYXJnMSA9PT0gZmFsc2U7XG5cbiAgcmV0dXJuIHVzZTxUW10gfCBUPigoa2V5LCBzdWJqZWN0KSA9PiB7XG4gICAgLy8gRG93bnN0cmVhbSBjb2xsZWN0aW9uIG1vZGVcbiAgICBpZiAoaXNEb3duc3RyZWFtKSB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9XG4gICAgICAgIHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nID8gKGFyZzIgYXMgZ2V0LkNhbGxiYWNrPFQ+KSA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQ8U3RhdGU+KCk7XG4gICAgICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGFwcGxpZWQpKSk7XG4gICAgICB9O1xuXG4gICAgICBDb250ZXh0LmdldChzdWJqZWN0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb250ZXh0LmdldChUeXBlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICBsZXQgcmVtb3ZlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGZsdXNoOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoYXBwbGllZC5oYXMoc3RhdGUpKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXQgPSBlbnRlcigpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBkb25lID0gY2FsbGJhY2soc3RhdGUsIHN1YmplY3QpO1xuXG4gICAgICAgICAgICAgIGlmIChkb25lID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRvbmUgPT0gJ2Z1bmN0aW9uJykgcmVtb3ZlID0gZG9uZTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGZsdXNoID0gZXhpdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFwcGxpZWQuYWRkKHN0YXRlKTtcbiAgICAgICAgICByZXNldCgpO1xuXG4gICAgICAgICAgY29uc3QgZG9uZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChmbHVzaCkgZmx1c2goKTtcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuXG4gICAgICAgICAgICBhcHBsaWVkLmRlbGV0ZShzdGF0ZSk7XG4gICAgICAgICAgICByZXNldCgpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlbW92ZSA9PSAnZnVuY3Rpb24nKSByZW1vdmUoKTtcblxuICAgICAgICAgICAgcmVtb3ZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmUgPSBzdGF0ZS5zZXQoZG9uZSwgbnVsbCk7XG5cbiAgICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcHN0cmVhbSBtb2RlXG4gICAgY29uc3QgaGFzUGFyZW50ID0gUEFSRU5ULmdldChzdWJqZWN0KSBhcyBUO1xuXG4gICAgZnVuY3Rpb24gYXNzaWduKHZhbHVlOiBUKSB7XG4gICAgICAvLyBJZiBjYWxsYmFjayBwcm92aWRlZCwgcnVuIGl0IGFzIGxpZmVjeWNsZSBob29rXG4gICAgICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmcxIGFzIGdldC5DYWxsYmFjazxUPjtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2sodmFsdWUsIHN1YmplY3QpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGNsZWFudXAgaWYgcmV0dXJuZWRcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzdWJqZWN0LnNldChyZXN1bHQsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBwYXJlbnRcbiAgICBpZiAoaGFzUGFyZW50ICYmIGhhc1BhcmVudCBpbnN0YW5jZW9mIFR5cGUpIHtcbiAgICAgIGFzc2lnbihoYXNQYXJlbnQpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGNvbnRleHRcbiAgICBDb250ZXh0LmdldChzdWJqZWN0LCAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZiA9IGNvbnRleHQuZ2V0KFR5cGUpO1xuXG4gICAgICBpZiAoc2VsZikgYXNzaWduKHNlbGYpO1xuICAgICAgZWxzZSBpZiAoIWlzT3B0aW9uYWwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUmVxdWlyZWQgJHtUeXBlfSBub3QgZm91bmQgaW4gY29udGV4dCBmb3IgJHtzdWJqZWN0fS5gXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0OiAhaXNPcHRpb25hbCxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IGdldCB9O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsZUFBZTtBQUN4QixTQUFnQixRQUFRLGNBQWM7QUFDdEMsU0FBUyxXQUFXO0FBbURwQixTQUFTLElBQ1AsTUFDQSxNQUNBLE1BQ0E7QUFDQSxRQUFNLGVBQWUsU0FBUztBQUM5QixRQUFNLGFBQWEsU0FBUztBQUU1QixTQUFPLElBQWEsQ0FBQyxLQUFLLFlBQVk7QUFFcEMsUUFBSSxjQUFjO0FBQ2hCLFlBQU0sV0FDSixPQUFPLFNBQVMsYUFBYyxPQUEyQjtBQUUzRCxZQUFNLFVBQVUsb0JBQUksSUFBVztBQUMvQixZQUFNLFFBQVEsTUFBTTtBQUNsQixlQUFPLFNBQVMsS0FBSyxPQUFPLE9BQU8sTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQUEsTUFDekQ7QUFFQSxjQUFRLElBQUksU0FBUyxDQUFDLFlBQVk7QUFDaEMsZ0JBQVEsSUFBSSxNQUFNLENBQUMsVUFBVTtBQUMzQixjQUFJO0FBQ0osY0FBSTtBQUVKLGNBQUksUUFBUSxJQUFJLEtBQUssRUFBRztBQUV4QixjQUFJLFVBQVU7QUFDWixrQkFBTSxPQUFPLE1BQU07QUFFbkIsZ0JBQUk7QUFDRixvQkFBTUEsUUFBTyxTQUFTLE9BQU8sT0FBTztBQUVwQyxrQkFBSUEsVUFBUyxNQUFPLFFBQU87QUFDM0Isa0JBQUksT0FBT0EsU0FBUSxXQUFZLFVBQVNBO0FBQUEsWUFDMUMsVUFBRTtBQUNBLHNCQUFRLEtBQUs7QUFBQSxZQUNmO0FBQUEsVUFDRjtBQUVBLGtCQUFRLElBQUksS0FBSztBQUNqQixnQkFBTTtBQUVOLGdCQUFNLE9BQU8sTUFBTTtBQUNqQixnQkFBSSxNQUFPLE9BQU07QUFDakIsbUJBQU87QUFFUCxvQkFBUSxPQUFPLEtBQUs7QUFDcEIsa0JBQU07QUFFTixnQkFBSSxPQUFPLFVBQVUsV0FBWSxRQUFPO0FBRXhDLHFCQUFTO0FBQUEsVUFDWDtBQUVBLGdCQUFNLFNBQVMsTUFBTSxJQUFJLE1BQU0sSUFBSTtBQUVuQyxpQkFBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELGFBQU87QUFBQSxRQUNMLE9BQU8sQ0FBQztBQUFBLFFBQ1IsWUFBWTtBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBR0EsVUFBTSxZQUFZLE9BQU8sSUFBSSxPQUFPO0FBRXBDLGFBQVMsT0FBTyxPQUFVO0FBRXhCLFVBQUksT0FBTyxTQUFTLFlBQVk7QUFDOUIsY0FBTSxXQUFXO0FBQ2pCLGNBQU0sU0FBUyxTQUFTLE9BQU8sT0FBTztBQUd0QyxZQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLGtCQUFRLElBQUksUUFBUSxJQUFJO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBRUEsYUFBTyxTQUFTLEtBQUssS0FBSztBQUFBLElBQzVCO0FBR0EsUUFBSSxhQUFhLHFCQUFxQixNQUFNO0FBQzFDLGFBQU8sU0FBUztBQUNoQixhQUFPLENBQUM7QUFBQSxJQUNWO0FBR0EsWUFBUSxJQUFJLFNBQVMsQ0FBQyxZQUFZO0FBQ2hDLFlBQU0sT0FBTyxRQUFRLElBQUksSUFBSTtBQUU3QixVQUFJLEtBQU0sUUFBTyxJQUFJO0FBQUEsZUFDWixDQUFDO0FBQ1IsY0FBTSxJQUFJO0FBQUEsVUFDUixZQUFZLElBQUksNkJBQTZCLE9BQU87QUFBQSxRQUN0RDtBQUFBLElBQ0osQ0FBQztBQUVELFdBQU87QUFBQSxNQUNMLEtBQUssQ0FBQztBQUFBLE1BQ04sWUFBWTtBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiZG9uZSJdCn0K
@@ -1,5 +1,5 @@
1
1
  import { addListener, enter } from "../control";
2
- import { update } from "../model";
2
+ import { update } from "../state";
3
3
  import { use } from "./use";
4
4
  const { defineProperty, defineProperties } = Object;
5
5
  function ref(arg, arg2) {
@@ -7,54 +7,57 @@ function ref(arg, arg2) {
7
7
  let value = {};
8
8
  const method = (key2, from) => (callback) => callback ? addListener(subject, () => callback(from[key2]), key2) : from[key2];
9
9
  if (arg === subject)
10
- addListener(subject, () => {
11
- for (const key2 in subject)
12
- if (typeof arg2 == "function")
13
- defineProperty(value, key2, {
14
- configurable: true,
15
- get() {
16
- const out = arg2(key2);
17
- defineProperty(value, key2, { value: out });
18
- return out;
19
- }
20
- });
21
- else {
22
- const get = method(key2, subject);
23
- const set = (x) => subject[key2] = x;
24
- defineProperties(set, {
25
- current: { get, set },
26
- get: { value: get },
27
- is: { value: subject },
28
- key: { value: key2 }
29
- });
30
- defineProperty(value, key2, { value: set });
31
- }
32
- return null;
33
- }, true);
10
+ addListener(
11
+ subject,
12
+ () => {
13
+ for (const key2 in subject)
14
+ if (typeof arg2 == "function")
15
+ defineProperty(value, key2, {
16
+ configurable: true,
17
+ get() {
18
+ const out = arg2(key2);
19
+ defineProperty(value, key2, { value: out });
20
+ return out;
21
+ }
22
+ });
23
+ else {
24
+ const get = method(key2, subject);
25
+ const set = (x) => subject[key2] = x;
26
+ defineProperties(set, {
27
+ current: { get, set },
28
+ get: { value: get },
29
+ is: { value: subject },
30
+ key: { value: key2 }
31
+ });
32
+ defineProperty(value, key2, { value: set });
33
+ }
34
+ return null;
35
+ },
36
+ true
37
+ );
34
38
  else if (typeof arg == "object")
35
- throw new Error("ref instruction does not support object which is not 'this'");
39
+ throw new Error(
40
+ "ref instruction does not support object which is not 'this'"
41
+ );
36
42
  else {
37
43
  let unset;
38
44
  const get = method(key, state);
39
45
  const set = (value2) => {
40
- if (!update(subject, key, value2) || !arg)
41
- return;
42
- if (unset)
43
- unset = void unset(value2);
44
- if (value2 === null && arg2 !== false)
45
- return;
46
+ if (!update(subject, key, value2) || !arg) return;
47
+ if (unset) unset = void unset(value2);
48
+ if (value2 === null && arg2 !== false) return;
46
49
  const exit = enter();
47
50
  const out = arg.call(subject, value2);
48
51
  const flush = exit();
49
52
  unset = (key2) => {
50
- if (typeof out == "function")
51
- out(key2);
53
+ if (typeof out == "function") out(key2);
52
54
  flush();
53
55
  };
54
56
  };
55
57
  state[key] = null;
56
- value = defineProperties({ get, key, is: subject }, {
57
- current: { get, set }
58
+ value = defineProperty({ get, key, is: subject }, "current", {
59
+ get,
60
+ set
58
61
  });
59
62
  }
60
63
  defineProperty(subject, key, { value });
@@ -63,4 +66,4 @@ function ref(arg, arg2) {
63
66
  export {
64
67
  ref
65
68
  };
66
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3JlZi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIGVudGVyIH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBNb2RlbCwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBkZWZpbmVQcm9wZXJ0aWVzIH0gPSBPYmplY3Q7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIHJlZiB7XG4gIHR5cGUgQ2FsbGJhY2s8VD4gPSAoYXJndW1lbnQ6IFQpID0+XG4gICAgKChuZXh0OiBUIHwgbnVsbCkgPT4gdm9pZCkgfCBQcm9taXNlPHZvaWQ+IHwgdm9pZCB8IGJvb2xlYW47XG5cbiAgaW50ZXJmYWNlIE9iamVjdDxUID0gYW55PiB7XG4gICAgLyoqIEN1cnJlbnQgdmFsdWUgaGVsZCBieSB0aGlzIHJlZmVyZW5jZS4gKi9cbiAgICBjdXJyZW50OiBUO1xuXG4gICAgLyoqIE1vZGVsIGluc3RhbmNlIHRoaXMgcmVmZXJlbmNlIGJlbG9uZ3MgdG8uICovXG4gICAgaXM6IE1vZGVsO1xuXG4gICAgLyoqIEtleSBvZiBwcm9wZXJ0eSBvbiBtb2RlbCB0aGlzIHJlZmVyZW5jZSBiZWxvbmdzIHRvLiAqL1xuICAgIGtleTogc3RyaW5nO1xuXG4gICAgLyoqIFxuICAgICAqIFN1YnNjcmliZSB0byBjaGFuZ2VzIG9mIHRoaXMgcmVmZXJlbmNlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIHdoZW4gaXQgY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyBVbnN1YnNjcmliZSBmdW5jdGlvbiB0byBzdG9wIGxpc3RlbmluZyB0byBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGdldChjYWxsYmFjazogKHZhbHVlOiBUKSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcblxuICAgIC8qKiBSZXRyaWV2ZSBjdXJyZW50IHZhbHVlLiAqL1xuICAgIGdldCgpOiBUIHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBPYmplY3Qgd2l0aCByZWZlcmVuY2VzIHRvIGFsbCBtYW5hZ2VkIHZhbHVlcyBvZiBgVGAuICovXG5cbiAgLyoqIE9iamVjdCB3aXRoIHJlZmVyZW5jZXMgdG8gYWxsIG1hbmFnZWQgdmFsdWVzIG9mIGBUYC4gKi9cbiAgdHlwZSBQcm94eTxUIGV4dGVuZHMgTW9kZWw+ID1cbiAgICAmIHsgW1AgaW4gTW9kZWwuRmllbGQ8VD5dLT86IE9iamVjdDxUW1BdPiB9XG4gICAgJiB7IGdldCgpOiBUIH07XG5cbiAgdHlwZSBDdXN0b21Qcm94eTxUIGV4dGVuZHMgTW9kZWwsIFI+ID1cbiAgICAmIHsgW1AgaW4gTW9kZWwuRmllbGQ8VD5dLT86IFIgfVxuICAgICYgeyBnZXQoKTogVCB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggcmVmZXJlbmNlcyB0byBhbGwgbWFuYWdlZCB2YWx1ZXMuXG4gKiBFYWNoIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gdG8gc2V0IHZhbHVlIGluIHN0YXRlIHdoZW4gaW52b2tlZC5cbiAqXG4gKiAqUHJvcGVydGllcyBhcmUgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBTb3VyY2UgbW9kZWwgZnJvbSB3aGljaCB0byByZWZlcmVuY2UgdmFsdWVzLlxuICovXG5mdW5jdGlvbiByZWYgPFQgZXh0ZW5kcyBNb2RlbD4gKHRhcmdldDogVCk6IHJlZi5Qcm94eTxUPjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBiYXNlZCBvbiBtYW5hZ2VkIHZhbHVlcy5cbiAqIEVhY2ggcHJvcGVydHkgd2lsbCBpbnZva2UgbWFwcGVyIGZ1bmN0aW9uIG9uIGZpcnN0IGFjY2VzcyBzdXBwbHlcbiAqIHRoZSBpdHMgcmV0dXJuIHZhbHVlIGdvaW5nIGZvcndhcmQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIHRvIHJlZmVyZW5jZSB2YWx1ZXMuXG4gKiBAcGFyYW0gbWFwcGVyIC0gRnVuY3Rpb24gcHJvZHVjaW5nIHRoZSBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYW55IGdpdmVuIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiByZWYgPE8gZXh0ZW5kcyBNb2RlbCwgUj5cbiAgKHRhcmdldDogTywgbWFwcGVyOiAoa2V5OiBNb2RlbC5GaWVsZDxPPikgPT4gUik6IHJlZi5DdXN0b21Qcm94eTxPLCBSPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVmLWNvbXBhdGlibGUgcHJvcGVydHkuXG4gKiBXaWxsIHBlcnNpc3QgdmFsdWUsIGFuZCB1cGRhdGVzIHRvIHRoaXMgYXJlIG1hZGUgcGFydCBvZiBjb250cm9sbGVyIGV2ZW50LXN0cmVhbS5cbiAqXG4gKiAqT3V0cHV0IGlzIHNpbXVsdGFuZW91c2x5IGEgcmVmLWZ1bmN0aW9uIGFuZCByZWYtb2JqZWN0LCB1c2UgYXMgbmVlZGVkLipcbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byBzeW5jaHJvbm91c2x5IGZpcmUgd2hlbiByZWZlcmVuY2UgaXMgZmlyc3Qgc2V0IG9yIGRvZXMgdXBkYXRlLlxuICovXG5mdW5jdGlvbiByZWYgPFQ+IChjYWxsYmFjaz86IHJlZi5DYWxsYmFjazxUPik6IHJlZi5PYmplY3Q8VD47XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZi1jb21wYXRpYmxlIHByb3BlcnR5LlxuICogV2lsbCBwZXJzaXN0IHZhbHVlLCBhbmQgdXBkYXRlcyB0byB0aGlzIGFyZSBtYWRlIHBhcnQgb2YgY29udHJvbGxlciBldmVudC1zdHJlYW0uXG4gKlxuICogKk91dHB1dCBpcyBzaW11bHRhbmVvdXNseSBhIHJlZi1mdW5jdGlvbiBhbmQgcmVmLW9iamVjdCwgdXNlIGFzIG5lZWRlZC4qXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gc3luY2hyb25vdXNseSBmaXJlIHdoZW4gcmVmZXJlbmNlIGlzIGZpcnN0IHNldCBvciBkb2VzIHVwZGF0ZS5cbiAqIEBwYXJhbSBpZ25vcmVOdWxsIC0gRGVmYXVsdCBgdHJ1ZWAuIElmIGBmYWxzZWAsIHdpbGwgc3RpbGwgY2FsbGJhY2sgd2l0aCBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VD4gKGNhbGxiYWNrOiByZWYuQ2FsbGJhY2s8VCB8IG51bGw+LCBpZ25vcmVOdWxsOiBib29sZWFuKTogcmVmLk9iamVjdDxUPjtcblxuZnVuY3Rpb24gcmVmPFQ+KFxuICBhcmc/OiByZWYuQ2FsbGJhY2s8VD4gfCBNb2RlbCxcbiAgYXJnMj86ICgoa2V5OiBzdHJpbmcpID0+IGFueSkgfCBib29sZWFuKXtcblxuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QsIHN0YXRlKSA9PiB7XG4gICAgbGV0IHZhbHVlID0ge307XG4gICAgY29uc3QgbWV0aG9kID0gKGtleTogc3RyaW5nLCBmcm9tOiBSZWNvcmQ8c3RyaW5nLCBUPikgPT5cbiAgICAgIChjYWxsYmFjaz86ICh2YWx1ZTogVCkgPT4gdm9pZCkgPT4gY2FsbGJhY2tcbiAgICAgICAgPyBhZGRMaXN0ZW5lcihzdWJqZWN0LCAoKSA9PiBjYWxsYmFjayhmcm9tW2tleV0pLCBrZXkpXG4gICAgICAgIDogZnJvbVtrZXldO1xuXG4gICAgaWYoYXJnID09PSBzdWJqZWN0KVxuICAgICAgYWRkTGlzdGVuZXIoc3ViamVjdCwgKCkgPT4ge1xuICAgICAgICBmb3IoY29uc3Qga2V5IGluIHN1YmplY3QpXG4gICAgICAgICAgaWYodHlwZW9mIGFyZzIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodmFsdWUsIGtleSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGdldCgpe1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dCA9IGFyZzIoa2V5KTtcbiAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7IHZhbHVlOiBvdXQgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdldCA9IG1ldGhvZChrZXksIHN1YmplY3QpO1xuICAgICAgICAgICAgY29uc3Qgc2V0ID0gKHg6IGFueSkgPT4gc3ViamVjdFtrZXldID0geDtcblxuICAgICAgICAgICAgZGVmaW5lUHJvcGVydGllcyhzZXQsIHtcbiAgICAgICAgICAgICAgY3VycmVudDogeyBnZXQsIHNldCB9LFxuICAgICAgICAgICAgICBnZXQ6IHsgdmFsdWU6IGdldCB9LFxuICAgICAgICAgICAgICBpczogeyB2YWx1ZTogc3ViamVjdCB9LFxuICAgICAgICAgICAgICBrZXk6IHsgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCBrZXksIHsgdmFsdWU6IHNldCB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LCB0cnVlKTtcblxuICAgIGVsc2UgaWYodHlwZW9mIGFyZyA9PSBcIm9iamVjdFwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgb2JqZWN0IHdoaWNoIGlzIG5vdCAndGhpcydcIik7XG5cbiAgICBlbHNlIHtcbiAgICAgIGxldCB1bnNldDogKChuZXh0OiBUKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGdldCA9IG1ldGhvZChrZXksIHN0YXRlKTtcbiAgICAgIGNvbnN0IHNldCA9ICh2YWx1ZT86IGFueSkgPT4ge1xuICAgICAgICBpZighdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpIHx8ICFhcmcpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmKHVuc2V0KVxuICAgICAgICAgIHVuc2V0ID0gdm9pZCB1bnNldCh2YWx1ZSk7XG4gICAgXG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsICYmIGFyZzIgIT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBleGl0ID0gZW50ZXIoKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXJnLmNhbGwoc3ViamVjdCwgdmFsdWUpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGV4aXQoKTtcblxuICAgICAgICB1bnNldCA9IGtleSA9PiB7XG4gICAgICAgICAgaWYodHlwZW9mIG91dCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBvdXQoa2V5KTtcblxuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gIFxuICAgICAgc3RhdGVba2V5XSA9IG51bGw7XG4gICAgICB2YWx1ZSA9IGRlZmluZVByb3BlcnRpZXMoeyBnZXQsIGtleSwgaXM6IHN1YmplY3QgfSwge1xuICAgICAgICBjdXJyZW50OiB7IGdldCwgc2V0IH1cbiAgICAgIH0pIGFzIHJlZi5PYmplY3Q8VD47XG4gICAgfVxuXG4gICAgZGVmaW5lUHJvcGVydHkoc3ViamVjdCwga2V5LCB7IHZhbHVlIH0pO1xuICB9KVxufVxuXG5leHBvcnQgeyByZWYgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsYUFBYSxhQUFhO0FBQ25DLFNBQWdCLGNBQWM7QUFDOUIsU0FBUyxXQUFXO0FBRXBCLE1BQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUFrRjdDLFNBQVMsSUFDUCxLQUNBLE1BQXdDO0FBRXhDLFNBQU8sSUFBTyxDQUFDLEtBQUssU0FBUyxVQUFVO0FBQ3JDLFFBQUksUUFBUSxDQUFDO0FBQ2IsVUFBTSxTQUFTLENBQUNBLE1BQWEsU0FDM0IsQ0FBQyxhQUFrQyxXQUMvQixZQUFZLFNBQVMsTUFBTSxTQUFTLEtBQUtBLElBQUcsQ0FBQyxHQUFHQSxJQUFHLElBQ25ELEtBQUtBLElBQUc7QUFFZCxRQUFHLFFBQVE7QUFDVCxrQkFBWSxTQUFTLE1BQU07QUFDekIsbUJBQVVBLFFBQU87QUFDZixjQUFHLE9BQU8sUUFBUTtBQUNoQiwyQkFBZSxPQUFPQSxNQUFLO0FBQUEsY0FDekIsY0FBYztBQUFBLGNBQ2QsTUFBSztBQUNILHNCQUFNLE1BQU0sS0FBS0EsSUFBRztBQUNwQiwrQkFBZSxPQUFPQSxNQUFLLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDekMsdUJBQU87QUFBQSxjQUNUO0FBQUEsWUFDRixDQUFDO0FBQUEsZUFDRTtBQUNILGtCQUFNLE1BQU0sT0FBT0EsTUFBSyxPQUFPO0FBQy9CLGtCQUFNLE1BQU0sQ0FBQyxNQUFXLFFBQVFBLElBQUcsSUFBSTtBQUV2Qyw2QkFBaUIsS0FBSztBQUFBLGNBQ3BCLFNBQVMsRUFBRSxLQUFLLElBQUk7QUFBQSxjQUNwQixLQUFLLEVBQUUsT0FBTyxJQUFJO0FBQUEsY0FDbEIsSUFBSSxFQUFFLE9BQU8sUUFBUTtBQUFBLGNBQ3JCLEtBQUssRUFBRSxPQUFPQSxLQUFJO0FBQUEsWUFDcEIsQ0FBQztBQUVELDJCQUFlLE9BQU9BLE1BQUssRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLFVBQzNDO0FBRUYsZUFBTztBQUFBLE1BQ1QsR0FBRyxJQUFJO0FBQUEsYUFFRCxPQUFPLE9BQU87QUFDcEIsWUFBTSxJQUFJLE1BQU0sNkRBQTZEO0FBQUEsU0FFMUU7QUFDSCxVQUFJO0FBQ0osWUFBTSxNQUFNLE9BQU8sS0FBSyxLQUFLO0FBQzdCLFlBQU0sTUFBTSxDQUFDQyxXQUFnQjtBQUMzQixZQUFHLENBQUMsT0FBTyxTQUFTLEtBQUtBLE1BQUssS0FBSyxDQUFDO0FBQ2xDO0FBRUYsWUFBRztBQUNELGtCQUFRLEtBQUssTUFBTUEsTUFBSztBQUUxQixZQUFHQSxXQUFVLFFBQVEsU0FBUztBQUM1QjtBQUVGLGNBQU0sT0FBTyxNQUFNO0FBQ25CLGNBQU0sTUFBTSxJQUFJLEtBQUssU0FBU0EsTUFBSztBQUNuQyxjQUFNLFFBQVEsS0FBSztBQUVuQixnQkFBUSxDQUFBRCxTQUFPO0FBQ2IsY0FBRyxPQUFPLE9BQU87QUFDZixnQkFBSUEsSUFBRztBQUVULGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLEdBQUcsSUFBSTtBQUNiLGNBQVEsaUJBQWlCLEVBQUUsS0FBSyxLQUFLLElBQUksUUFBUSxHQUFHO0FBQUEsUUFDbEQsU0FBUyxFQUFFLEtBQUssSUFBSTtBQUFBLE1BQ3RCLENBQUM7QUFBQSxJQUNIO0FBRUEsbUJBQWUsU0FBUyxLQUFLLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDeEMsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJrZXkiLCAidmFsdWUiXQp9Cg==
69
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3JlZi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIGVudGVyIH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBTdGF0ZSwgdXBkYXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG5jb25zdCB7IGRlZmluZVByb3BlcnR5LCBkZWZpbmVQcm9wZXJ0aWVzIH0gPSBPYmplY3Q7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIHJlZiB7XG4gIHR5cGUgQ2FsbGJhY2s8VD4gPSAoXG4gICAgYXJndW1lbnQ6IFRcbiAgKSA9PiAoKG5leHQ6IFQgfCBudWxsKSA9PiB2b2lkKSB8IFByb21pc2U8dm9pZD4gfCB2b2lkIHwgYm9vbGVhbjtcblxuICBpbnRlcmZhY2UgT2JqZWN0PFQgPSBhbnk+IHtcbiAgICAvKiogQ3VycmVudCB2YWx1ZSBoZWxkIGJ5IHRoaXMgcmVmZXJlbmNlLiAqL1xuICAgIGN1cnJlbnQ6IFQ7XG5cbiAgICAvKiogU3RhdGUgaW5zdGFuY2UgdGhpcyByZWZlcmVuY2UgYmVsb25ncyB0by4gKi9cbiAgICBpczogU3RhdGU7XG5cbiAgICAvKiogS2V5IG9mIHByb3BlcnR5IG9uIHN0YXRlIHRoaXMgcmVmZXJlbmNlIGJlbG9uZ3MgdG8uICovXG4gICAga2V5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTdWJzY3JpYmUgdG8gY2hhbmdlcyBvZiB0aGlzIHJlZmVyZW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIGludm9rZSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlIHdoZW4gaXQgY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyBVbnN1YnNjcmliZSBmdW5jdGlvbiB0byBzdG9wIGxpc3RlbmluZyB0byBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGdldChjYWxsYmFjazogKHZhbHVlOiBUKSA9PiB2b2lkKTogKCkgPT4gdm9pZDtcblxuICAgIC8qKiBSZXRyaWV2ZSBjdXJyZW50IHZhbHVlLiAqL1xuICAgIGdldCgpOiBUIHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBPYmplY3Qgd2l0aCByZWZlcmVuY2VzIHRvIGFsbCBtYW5hZ2VkIHZhbHVlcyBvZiBgVGAuICovXG5cbiAgLyoqIE9iamVjdCB3aXRoIHJlZmVyZW5jZXMgdG8gYWxsIG1hbmFnZWQgdmFsdWVzIG9mIGBUYC4gKi9cbiAgdHlwZSBQcm94eTxUIGV4dGVuZHMgU3RhdGU+ID0geyBbUCBpbiBTdGF0ZS5GaWVsZDxUPl0tPzogT2JqZWN0PFRbUF0+IH0gJiB7XG4gICAgZ2V0KCk6IFQ7XG4gIH07XG5cbiAgdHlwZSBDdXN0b21Qcm94eTxUIGV4dGVuZHMgU3RhdGUsIFI+ID0geyBbUCBpbiBTdGF0ZS5GaWVsZDxUPl0tPzogUiB9ICYge1xuICAgIGdldCgpOiBUO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggcmVmZXJlbmNlcyB0byBhbGwgbWFuYWdlZCB2YWx1ZXMuXG4gKiBFYWNoIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gdG8gc2V0IHZhbHVlIGluIHN0YXRlIHdoZW4gaW52b2tlZC5cbiAqXG4gKiAqUHJvcGVydGllcyBhcmUgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBTb3VyY2Ugc3RhdGUgZnJvbSB3aGljaCB0byByZWZlcmVuY2UgdmFsdWVzLlxuICovXG5mdW5jdGlvbiByZWY8VCBleHRlbmRzIFN0YXRlPih0YXJnZXQ6IFQpOiByZWYuUHJveHk8VD47XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgYmFzZWQgb24gbWFuYWdlZCB2YWx1ZXMuXG4gKiBFYWNoIHByb3BlcnR5IHdpbGwgaW52b2tlIG1hcHBlciBmdW5jdGlvbiBvbiBmaXJzdCBhY2Nlc3Mgc3VwcGx5XG4gKiB0aGUgaXRzIHJldHVybiB2YWx1ZSBnb2luZyBmb3J3YXJkLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBTb3VyY2Ugc3RhdGUgZnJvbSB3aGljaCB0byByZWZlcmVuY2UgdmFsdWVzLlxuICogQHBhcmFtIG1hcHBlciAtIEZ1bmN0aW9uIHByb2R1Y2luZyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGFueSBnaXZlbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gcmVmPE8gZXh0ZW5kcyBTdGF0ZSwgUj4oXG4gIHRhcmdldDogTyxcbiAgbWFwcGVyOiAoa2V5OiBTdGF0ZS5GaWVsZDxPPikgPT4gUlxuKTogcmVmLkN1c3RvbVByb3h5PE8sIFI+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZWYtY29tcGF0aWJsZSBwcm9wZXJ0eS5cbiAqIFdpbGwgcGVyc2lzdCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdG8gdGhpcyBhcmUgbWFkZSBwYXJ0IG9mIGNvbnRyb2xsZXIgZXZlbnQtc3RyZWFtLlxuICpcbiAqICpPdXRwdXQgaXMgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHN5bmNocm9ub3VzbHkgZmlyZSB3aGVuIHJlZmVyZW5jZSBpcyBmaXJzdCBzZXQgb3IgZG9lcyB1cGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlZjxUPihjYWxsYmFjaz86IHJlZi5DYWxsYmFjazxUPik6IHJlZi5PYmplY3Q8VD47XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZi1jb21wYXRpYmxlIHByb3BlcnR5LlxuICogV2lsbCBwZXJzaXN0IHZhbHVlLCBhbmQgdXBkYXRlcyB0byB0aGlzIGFyZSBtYWRlIHBhcnQgb2YgY29udHJvbGxlciBldmVudC1zdHJlYW0uXG4gKlxuICogKk91dHB1dCBpcyBzaW11bHRhbmVvdXNseSBhIHJlZi1mdW5jdGlvbiBhbmQgcmVmLW9iamVjdCwgdXNlIGFzIG5lZWRlZC4qXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gc3luY2hyb25vdXNseSBmaXJlIHdoZW4gcmVmZXJlbmNlIGlzIGZpcnN0IHNldCBvciBkb2VzIHVwZGF0ZS5cbiAqIEBwYXJhbSBpZ25vcmVOdWxsIC0gRGVmYXVsdCBgdHJ1ZWAuIElmIGBmYWxzZWAsIHdpbGwgc3RpbGwgY2FsbGJhY2sgd2l0aCBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIHJlZjxUPihcbiAgY2FsbGJhY2s6IHJlZi5DYWxsYmFjazxUIHwgbnVsbD4sXG4gIGlnbm9yZU51bGw6IGJvb2xlYW5cbik6IHJlZi5PYmplY3Q8VD47XG5cbmZ1bmN0aW9uIHJlZjxUPihcbiAgYXJnPzogcmVmLkNhbGxiYWNrPFQ+IHwgU3RhdGUsXG4gIGFyZzI/OiAoKGtleTogc3RyaW5nKSA9PiBhbnkpIHwgYm9vbGVhblxuKSB7XG4gIHJldHVybiB1c2U8VD4oKGtleSwgc3ViamVjdCwgc3RhdGUpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB7fTtcbiAgICBjb25zdCBtZXRob2QgPVxuICAgICAgKGtleTogc3RyaW5nLCBmcm9tOiBSZWNvcmQ8c3RyaW5nLCBUPikgPT5cbiAgICAgIChjYWxsYmFjaz86ICh2YWx1ZTogVCkgPT4gdm9pZCkgPT5cbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICA/IGFkZExpc3RlbmVyKHN1YmplY3QsICgpID0+IGNhbGxiYWNrKGZyb21ba2V5XSksIGtleSlcbiAgICAgICAgICA6IGZyb21ba2V5XTtcblxuICAgIGlmIChhcmcgPT09IHN1YmplY3QpXG4gICAgICBhZGRMaXN0ZW5lcihcbiAgICAgICAgc3ViamVjdCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHN1YmplY3QpXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFyZzIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodmFsdWUsIGtleSwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvdXQgPSBhcmcyKGtleSk7XG4gICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7IHZhbHVlOiBvdXQgfSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZ2V0ID0gbWV0aG9kKGtleSwgc3ViamVjdCk7XG4gICAgICAgICAgICAgIGNvbnN0IHNldCA9ICh4OiBhbnkpID0+IChzdWJqZWN0W2tleV0gPSB4KTtcblxuICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0aWVzKHNldCwge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHsgZ2V0LCBzZXQgfSxcbiAgICAgICAgICAgICAgICBnZXQ6IHsgdmFsdWU6IGdldCB9LFxuICAgICAgICAgICAgICAgIGlzOiB7IHZhbHVlOiBzdWJqZWN0IH0sXG4gICAgICAgICAgICAgICAga2V5OiB7IHZhbHVlOiBrZXkgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7IHZhbHVlOiBzZXQgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBlbHNlIGlmICh0eXBlb2YgYXJnID09ICdvYmplY3QnKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInJlZiBpbnN0cnVjdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG9iamVjdCB3aGljaCBpcyBub3QgJ3RoaXMnXCJcbiAgICAgICk7XG4gICAgZWxzZSB7XG4gICAgICBsZXQgdW5zZXQ6ICgobmV4dDogVCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBnZXQgPSBtZXRob2Qoa2V5LCBzdGF0ZSk7XG4gICAgICBjb25zdCBzZXQgPSAodmFsdWU/OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCF1cGRhdGUoc3ViamVjdCwga2V5LCB2YWx1ZSkgfHwgIWFyZykgcmV0dXJuO1xuXG4gICAgICAgIGlmICh1bnNldCkgdW5zZXQgPSB2b2lkIHVuc2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgYXJnMiAhPT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBleGl0ID0gZW50ZXIoKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXJnLmNhbGwoc3ViamVjdCwgdmFsdWUpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGV4aXQoKTtcblxuICAgICAgICB1bnNldCA9IChrZXkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nKSBvdXQoa2V5KTtcblxuICAgICAgICAgIGZsdXNoKCk7XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBzdGF0ZVtrZXldID0gbnVsbDtcbiAgICAgIHZhbHVlID0gZGVmaW5lUHJvcGVydHkoeyBnZXQsIGtleSwgaXM6IHN1YmplY3QgfSwgJ2N1cnJlbnQnLCB7XG4gICAgICAgIGdldCxcbiAgICAgICAgc2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWZpbmVQcm9wZXJ0eShzdWJqZWN0LCBrZXksIHsgdmFsdWUgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyByZWYgfTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsYUFBYSxhQUFhO0FBQ25DLFNBQWdCLGNBQWM7QUFDOUIsU0FBUyxXQUFXO0FBRXBCLE1BQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUF3RjdDLFNBQVMsSUFDUCxLQUNBLE1BQ0E7QUFDQSxTQUFPLElBQU8sQ0FBQyxLQUFLLFNBQVMsVUFBVTtBQUNyQyxRQUFJLFFBQVEsQ0FBQztBQUNiLFVBQU0sU0FDSixDQUFDQSxNQUFhLFNBQ2QsQ0FBQyxhQUNDLFdBQ0ksWUFBWSxTQUFTLE1BQU0sU0FBUyxLQUFLQSxJQUFHLENBQUMsR0FBR0EsSUFBRyxJQUNuRCxLQUFLQSxJQUFHO0FBRWhCLFFBQUksUUFBUTtBQUNWO0FBQUEsUUFDRTtBQUFBLFFBQ0EsTUFBTTtBQUNKLHFCQUFXQSxRQUFPO0FBQ2hCLGdCQUFJLE9BQU8sUUFBUTtBQUNqQiw2QkFBZSxPQUFPQSxNQUFLO0FBQUEsZ0JBQ3pCLGNBQWM7QUFBQSxnQkFDZCxNQUFNO0FBQ0osd0JBQU0sTUFBTSxLQUFLQSxJQUFHO0FBQ3BCLGlDQUFlLE9BQU9BLE1BQUssRUFBRSxPQUFPLElBQUksQ0FBQztBQUN6Qyx5QkFBTztBQUFBLGdCQUNUO0FBQUEsY0FDRixDQUFDO0FBQUEsaUJBQ0U7QUFDSCxvQkFBTSxNQUFNLE9BQU9BLE1BQUssT0FBTztBQUMvQixvQkFBTSxNQUFNLENBQUMsTUFBWSxRQUFRQSxJQUFHLElBQUk7QUFFeEMsK0JBQWlCLEtBQUs7QUFBQSxnQkFDcEIsU0FBUyxFQUFFLEtBQUssSUFBSTtBQUFBLGdCQUNwQixLQUFLLEVBQUUsT0FBTyxJQUFJO0FBQUEsZ0JBQ2xCLElBQUksRUFBRSxPQUFPLFFBQVE7QUFBQSxnQkFDckIsS0FBSyxFQUFFLE9BQU9BLEtBQUk7QUFBQSxjQUNwQixDQUFDO0FBRUQsNkJBQWUsT0FBT0EsTUFBSyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsWUFDM0M7QUFFRixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLGFBQ08sT0FBTyxPQUFPO0FBQ3JCLFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsU0FDRztBQUNILFVBQUk7QUFDSixZQUFNLE1BQU0sT0FBTyxLQUFLLEtBQUs7QUFDN0IsWUFBTSxNQUFNLENBQUNDLFdBQWdCO0FBQzNCLFlBQUksQ0FBQyxPQUFPLFNBQVMsS0FBS0EsTUFBSyxLQUFLLENBQUMsSUFBSztBQUUxQyxZQUFJLE1BQU8sU0FBUSxLQUFLLE1BQU1BLE1BQUs7QUFFbkMsWUFBSUEsV0FBVSxRQUFRLFNBQVMsTUFBTztBQUV0QyxjQUFNLE9BQU8sTUFBTTtBQUNuQixjQUFNLE1BQU0sSUFBSSxLQUFLLFNBQVNBLE1BQUs7QUFDbkMsY0FBTSxRQUFRLEtBQUs7QUFFbkIsZ0JBQVEsQ0FBQ0QsU0FBUTtBQUNmLGNBQUksT0FBTyxPQUFPLFdBQVksS0FBSUEsSUFBRztBQUVyQyxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBRUEsWUFBTSxHQUFHLElBQUk7QUFDYixjQUFRLGVBQWUsRUFBRSxLQUFLLEtBQUssSUFBSSxRQUFRLEdBQUcsV0FBVztBQUFBLFFBQzNEO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxtQkFBZSxTQUFTLEtBQUssRUFBRSxNQUFNLENBQUM7QUFBQSxFQUN4QyxDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbImtleSIsICJ2YWx1ZSJdCn0K
@@ -1,53 +1,109 @@
1
- import { addListener, enter } from "../control";
2
- import { event, update } from "../model";
1
+ import { addListener, enter, watch } from "../control";
2
+ import { access, event, METHOD, State, update } from "../state";
3
3
  import { use } from "./use";
4
+ const STALE = /* @__PURE__ */ new WeakSet();
4
5
  function set(value, argument) {
5
- return use((key, subject) => {
6
+ return use((key, subject, state) => {
7
+ if (typeof value == "symbol")
8
+ throw new Error(
9
+ `Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`
10
+ );
6
11
  const property = {};
7
- if (typeof value == "function" || isThenable(value)) {
12
+ if (value instanceof State || value === true) {
13
+ let connect2 = function(self) {
14
+ reset = watch(
15
+ self,
16
+ (current) => {
17
+ proxy = current;
18
+ if (!(key in state) || STALE.delete(compute2)) compute2(!reset);
19
+ return (didUpdate) => {
20
+ if (didUpdate) {
21
+ STALE.add(compute2);
22
+ event(subject, key, true);
23
+ }
24
+ };
25
+ },
26
+ false
27
+ );
28
+ }, compute2 = function(initial) {
29
+ let next;
30
+ try {
31
+ next = getter.call(proxy, proxy, key);
32
+ } catch (err) {
33
+ console.warn(
34
+ `An exception was thrown while ${initial ? "initializing" : "refreshing"} ${subject}.${key}.`
35
+ );
36
+ if (initial) throw err;
37
+ console.error(err);
38
+ }
39
+ update(subject, key, next, !isAsync);
40
+ };
41
+ var connect = connect2, compute = compute2;
42
+ let from = subject;
43
+ let getter;
44
+ if (value instanceof State) {
45
+ from = value;
46
+ getter = argument;
47
+ } else {
48
+ const fn = METHOD.get(argument) || argument;
49
+ getter = (p, k) => fn.call(p, k, p);
50
+ }
51
+ const source = (resolve) => resolve(from);
52
+ let reset;
53
+ let isAsync;
54
+ let proxy;
55
+ return () => {
56
+ if (!proxy) {
57
+ source(connect2);
58
+ isAsync = true;
59
+ }
60
+ if (STALE.delete(compute2)) compute2();
61
+ return access(subject, key, !proxy);
62
+ };
63
+ }
64
+ if (typeof value == "function" || value instanceof Promise) {
8
65
  let init2 = function() {
9
66
  if (typeof value == "function")
10
67
  try {
11
68
  value = attempt(value.bind(subject, key));
12
69
  } catch (err) {
13
- console.warn(`Generating initial value for ${subject}.${key} failed.`);
70
+ console.warn(
71
+ `Generating initial value for ${subject}.${key} failed.`
72
+ );
14
73
  throw err;
15
74
  }
16
75
  property.get = argument !== false;
17
76
  const set2 = (value2) => subject[key] = value2;
18
- if (isThenable(value))
77
+ if (value instanceof Promise)
19
78
  value.then(set2, (error) => {
20
79
  event(subject, key);
21
80
  property.get = () => {
22
81
  throw error;
23
82
  };
24
83
  });
25
- else
26
- set2(value);
27
- if (argument)
28
- return null;
84
+ else set2(value);
85
+ if (argument) return null;
29
86
  return subject[key];
30
87
  };
31
88
  var init = init2;
32
- if (argument)
89
+ if (argument) {
33
90
  addListener(subject, init2, true);
34
- else
91
+ } else {
35
92
  property.get = init2;
36
- } else if (value !== void 0)
93
+ }
94
+ } else if (value !== void 0) {
37
95
  property.value = value;
96
+ }
38
97
  if (typeof argument == "function") {
39
98
  let unset;
40
99
  property.set = function(value2, previous) {
41
100
  const exit = enter();
42
101
  const returns = argument.call(this, value2, previous);
43
102
  const flush = exit();
44
- if (returns === false)
45
- return false;
46
- if (typeof unset == "function")
47
- unset(value2);
103
+ if (returns === false) return false;
104
+ if (typeof unset == "function") unset(value2);
48
105
  unset = (next) => {
49
- if (typeof returns == "function")
50
- returns(next);
106
+ if (typeof returns == "function") returns(next);
51
107
  flush();
52
108
  };
53
109
  };
@@ -61,10 +117,8 @@ function set(value, argument) {
61
117
  }
62
118
  function attempt(fn) {
63
119
  function retry(err) {
64
- if (err instanceof Promise)
65
- return err.then(compute);
66
- else
67
- throw err;
120
+ if (err instanceof Promise) return err.then(compute);
121
+ else throw err;
68
122
  }
69
123
  function compute() {
70
124
  try {
@@ -76,10 +130,7 @@ function attempt(fn) {
76
130
  }
77
131
  return compute();
78
132
  }
79
- function isThenable(value) {
80
- return value && typeof value == "object" && typeof value.then == "function";
81
- }
82
133
  export {
83
134
  set
84
135
  };
85
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3NldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIGVudGVyIH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBNb2RlbCwgZXZlbnQsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxuZGVjbGFyZSBuYW1lc3BhY2Ugc2V0IHtcbiAgdHlwZSBDYWxsYmFjazxULCBTID0gYW55PiA9ICh0aGlzOiBTLCBuZXh0OiBULCBwcmV2aW91czogVCkgPT5cbiAgICAoKG5leHQ6IFQpID0+IHZvaWQpIHwgUHJvbWlzZTxhbnk+IHwgdm9pZCB8IGJvb2xlYW47XG5cbiAgdHlwZSBGYWN0b3J5PFQsIFMgPSBhbnk+ID0gKHRoaXM6IFMsIGtleTogc3RyaW5nKSA9PiBUaGVuYWJsZTxUPiB8IFQ7XG5cbiAgdHlwZSBUaGVuYWJsZTxUPiA9IHtcbiAgICB0aGVuOiAob25GdWxmaWxsZWQ/OiAodmFsdWU6IFQpID0+IGFueSwgb25SZWplY3RlZD86IChyZWFzb246IGFueSkgPT4gYW55KSA9PiBhbnk7XG4gIH07XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IGFzIGB1bmRlZmluZWRgIGJ1dCByZXF1aXJlZC5cbiAqIFxuICogUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIHVudGlsIGl0IGlzIGRlZmluZWQuIElmIGFjY2Vzc2VkIHdoaWxlIHVuZGVmaW5lZCwgYSBoeWJyaWRcbiAqIGBQcm9taXNlYC9gRXJyb3JgIChha2E6IFtTdXNwZW5zZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbmN1cnJlbnQtbW9kZS1zdXNwZW5zZS5odG1sKSkgd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIHNldCA8VCA9IGFueT4oKTogVDtcblxuLyoqXG4gKiBTZXQgcHJvcGVydHkgd2l0aCBhIGZhY3RvcnkgZnVuY3Rpb24uXG4gKiBcbiAqICoqTm90ZSoqIEZhY3RvcnkgaXMgbGF6eSEgSXQgd2lsbCBvbmx5IHJ1biBpZi93aGVuIHByb3BlcnR5IGlzIGFjY2Vzc2VkLlxuICogVmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgZmFjdG9yeSByZXNvbHZlcywgd2hpY2ggd2lsbCBhbHNvIGRpc3BhdGNoIGFuIHVwZGF0ZSBmb3IgdGhlIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXQgPFQ+IChmYWN0b3J5OiBzZXQuRmFjdG9yeTxUPiB8IHNldC5UaGVuYWJsZTxUPiwgcmVxdWlyZWQ6IGZhbHNlKTogVCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBTZXQgcHJvcGVydHkgd2l0aCBhIGZhY3RvcnkgZnVuY3Rpb24uXG4gKlxuICogSWYgYXN5bmMsIHByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bnRpbCByZXNvbHZlcywgeWVpbGRpbmcgYSByZXN1bHQuXG4gKiBJZiBhY2Nlc3NlZCB3aGlsZSBzdGlsbCBwcm9jZXNzaW5nLCBSZWFjdCBTdXNwZW5zZSB3aWxsIGJlIHRocm93bi5cbiAqXG4gKiBAcGFyYW0gZmFjdG9yeSAtIENhbGxiYWNrIHJ1biB0byBkZXJyaXZlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgdHJ1ZSBydW4gZmFjdG9yeSBpbW1lZGlhdGVseSBvbiBjcmVhdGlvbiwgb3RoZXJ3aXNlIG9uIGFjY2Vzcy5cbiAqL1xuZnVuY3Rpb24gc2V0IDxUPiAoZmFjdG9yeTogc2V0LkZhY3Rvcnk8VD4gfCBzZXQuVGhlbmFibGU8VD4sIHJlcXVpcmVkPzogYm9vbGVhbik6IFQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqIElmIGFzeW5jLCBwcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgcmVzb2x2ZXMsIHllaWxkaW5nIGEgcmVzdWx0LlxuICogSWYgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvY2Vzc2luZywgUmVhY3QgU3VzcGVuc2Ugd2lsbCBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIGZhY3RvcnkgLSBDYWxsYmFjayBydW4gdG8gZGVycml2ZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSBvblVwZGF0ZSAtIENhbGxiYWNrIHJ1biB3aGVuIHByb3BlcnR5IGlzIGZpbmlzaGVkIGNvbXB1dGluZyBvciBpcyBzZXQuIFxuICovXG5mdW5jdGlvbiBzZXQgPFQ+IChmYWN0b3J5OiBzZXQuRmFjdG9yeTxUPiB8IHNldC5UaGVuYWJsZTxUPiwgb25VcGRhdGU/OiBzZXQuQ2FsbGJhY2s8VD4pOiBUO1xuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IHdpdGggZW1wdHkgcGxhY2Vob2xkZXIgYW5kL29yIHVwZGF0ZSBjYWxsYmFjay5cbiAqIFxuICogQHBhcmFtIHZhbHVlIC0gU3RhcnRpbmcgdmFsdWUgZm9yIHByb3BlcnR5LiBJZiB1bmRlZmluZWQsIHN1c3BlbnNlIHdpbGwgYmUgdGhyb3duIG9uIGFjY2VzcywgdW50aWwgdmFsdWUgaXMgc2V0IGFuZCBhY2NlcHRlZCBieSBjYWxsYmFjay5cbiAqIEBwYXJhbSBvblVwZGF0ZSAtIENhbGxiYWNrIHJ1biB3aGVuIHByb3BlcnR5IGlzIHNldC4gSWYgcmV0dXJucyBmYWxzZSwgdXBkYXRlIGlzIG5vdCBhY2NlcHRlZCBhbmQgcHJvcGVydHkgd2lsbCBrZWVwIHByZXZpb3VzIHZhbHVlLlxuICovXG5mdW5jdGlvbiBzZXQgPFQ+ICh2YWx1ZTogVCB8IHVuZGVmaW5lZCwgb25VcGRhdGU/OiBzZXQuQ2FsbGJhY2s8VD4pOiBUO1xuXG5mdW5jdGlvbiBzZXQgPFQ+IChcbiAgdmFsdWU/OiBzZXQuRmFjdG9yeTxUPiB8IHNldC5UaGVuYWJsZTxUPiB8IFQsXG4gIGFyZ3VtZW50Pzogc2V0LkNhbGxiYWNrPGFueT4gfCBib29sZWFuKXtcblxuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eTogTW9kZWwuRGVzY3JpcHRvciA9IHt9O1xuXG4gICAgaWYodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIiB8fCBpc1RoZW5hYmxlKHZhbHVlKSl7XG4gICAgICBmdW5jdGlvbiBpbml0KCl7XG4gICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gYXR0ZW1wdCh2YWx1ZS5iaW5kKHN1YmplY3QsIGtleSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaChlcnIpe1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBHZW5lcmF0aW5nIGluaXRpYWwgdmFsdWUgZm9yICR7c3ViamVjdH0uJHtrZXl9IGZhaWxlZC5gKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydHkuZ2V0ID0gYXJndW1lbnQgIT09IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNldCA9ICh2YWx1ZTogYW55KSA9PiBzdWJqZWN0W2tleV0gPSB2YWx1ZTtcblxuICAgICAgICBpZihpc1RoZW5hYmxlKHZhbHVlKSlcbiAgICAgICAgICB2YWx1ZS50aGVuKHNldCwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgZXZlbnQoc3ViamVjdCwga2V5KTtcbiAgICAgICAgICAgIHByb3BlcnR5LmdldCA9ICgpID0+IHsgdGhyb3cgZXJyb3IgfTtcbiAgICAgICAgICB9KVxuICAgICAgICBlbHNlXG4gICAgICAgICAgc2V0KHZhbHVlKTtcblxuICAgICAgICBpZihhcmd1bWVudClcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzdWJqZWN0W2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmKGFyZ3VtZW50KVxuICAgICAgICBhZGRMaXN0ZW5lcihzdWJqZWN0LCBpbml0LCB0cnVlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcHJvcGVydHkuZ2V0ID0gaW5pdDtcbiAgICB9XG4gICAgZWxzZSBpZih2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgcHJvcGVydHkudmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmKHR5cGVvZiBhcmd1bWVudCA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBwcm9wZXJ0eS5zZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnksIHByZXZpb3VzOiBhbnkpe1xuICAgICAgICBjb25zdCBleGl0ID0gZW50ZXIoKTtcbiAgICAgICAgY29uc3QgcmV0dXJucyA9IGFyZ3VtZW50LmNhbGwodGhpcywgdmFsdWUsIHByZXZpb3VzKTtcbiAgICAgICAgY29uc3QgZmx1c2ggPSBleGl0KCk7XG5cbiAgICAgICAgaWYocmV0dXJucyA9PT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmKHR5cGVvZiB1bnNldCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgdW5zZXQodmFsdWUpO1xuXG4gICAgICAgIHVuc2V0ID0gKG5leHQ6IFQpID0+IHtcbiAgICAgICAgICBpZih0eXBlb2YgcmV0dXJucyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm5zKG5leHQpO1xuXG4gICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAgICBwcm9wZXJ0eS5zZXQgPSB2YWx1ZSA9PiB7XG4gICAgICAgIHByb3BlcnR5LmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0KGZuOiAoKSA9PiBhbnkpOiBhbnkge1xuICBmdW5jdGlvbiByZXRyeShlcnI6IHVua25vd24pe1xuICAgIGlmKGVyciBpbnN0YW5jZW9mIFByb21pc2UpXG4gICAgICByZXR1cm4gZXJyLnRoZW4oY29tcHV0ZSk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZSgpOiBhbnkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBmbigpO1xuXG4gICAgICByZXR1cm4gb3V0cHV0IGluc3RhbmNlb2YgUHJvbWlzZVxuICAgICAgICA/IG91dHB1dC5jYXRjaChyZXRyeSlcbiAgICAgICAgOiBvdXRwdXQ7XG4gICAgfVxuICAgIGNhdGNoKGVycil7XG4gICAgICByZXR1cm4gcmV0cnkoZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZSgpO1xufVxuXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzZXQuVGhlbmFibGU8YW55PiB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PSBcImZ1bmN0aW9uXCI7XG59XG5cbmV4cG9ydCB7IHNldCB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxhQUFhLGFBQWE7QUFDbkMsU0FBZ0IsT0FBTyxjQUFjO0FBQ3JDLFNBQVMsV0FBVztBQTJEcEIsU0FBUyxJQUNQLE9BQ0EsVUFBdUM7QUFFdkMsU0FBTyxJQUFPLENBQUMsS0FBSyxZQUFZO0FBQzlCLFVBQU0sV0FBNkIsQ0FBQztBQUVwQyxRQUFHLE9BQU8sU0FBUyxjQUFjLFdBQVcsS0FBSyxHQUFFO0FBQ2pELFVBQVNBLFFBQVQsV0FBZTtBQUNiLFlBQUcsT0FBTyxTQUFTO0FBQ2pCLGNBQUk7QUFDRixvQkFBUSxRQUFRLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQztBQUFBLFVBQzFDLFNBQ00sS0FBSTtBQUNSLG9CQUFRLEtBQUssZ0NBQWdDLE9BQU8sSUFBSSxHQUFHLFVBQVU7QUFDckUsa0JBQU07QUFBQSxVQUNSO0FBRUYsaUJBQVMsTUFBTSxhQUFhO0FBRTVCLGNBQU1DLE9BQU0sQ0FBQ0MsV0FBZSxRQUFRLEdBQUcsSUFBSUE7QUFFM0MsWUFBRyxXQUFXLEtBQUs7QUFDakIsZ0JBQU0sS0FBS0QsTUFBSyxXQUFTO0FBQ3ZCLGtCQUFNLFNBQVMsR0FBRztBQUNsQixxQkFBUyxNQUFNLE1BQU07QUFBRSxvQkFBTTtBQUFBLFlBQU07QUFBQSxVQUNyQyxDQUFDO0FBQUE7QUFFRCxVQUFBQSxLQUFJLEtBQUs7QUFFWCxZQUFHO0FBQ0QsaUJBQU87QUFFVCxlQUFPLFFBQVEsR0FBRztBQUFBLE1BQ3BCO0FBMUJTLGlCQUFBRDtBQTRCVCxVQUFHO0FBQ0Qsb0JBQVksU0FBU0EsT0FBTSxJQUFJO0FBQUE7QUFFL0IsaUJBQVMsTUFBTUE7QUFBQSxJQUNuQixXQUNRLFVBQVU7QUFDaEIsZUFBUyxRQUFRO0FBRW5CLFFBQUcsT0FBTyxZQUFZLFlBQVc7QUFDL0IsVUFBSTtBQUVKLGVBQVMsTUFBTSxTQUFvQkUsUUFBWSxVQUFjO0FBQzNELGNBQU0sT0FBTyxNQUFNO0FBQ25CLGNBQU0sVUFBVSxTQUFTLEtBQUssTUFBTUEsUUFBTyxRQUFRO0FBQ25ELGNBQU0sUUFBUSxLQUFLO0FBRW5CLFlBQUcsWUFBWTtBQUNiLGlCQUFPO0FBRVQsWUFBRyxPQUFPLFNBQVM7QUFDakIsZ0JBQU1BLE1BQUs7QUFFYixnQkFBUSxDQUFDLFNBQVk7QUFDbkIsY0FBRyxPQUFPLFdBQVc7QUFDbkIsb0JBQVEsSUFBSTtBQUVkLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUUsZUFBUyxNQUFNLENBQUFBLFdBQVM7QUFDdEIsaUJBQVMsTUFBTTtBQUNmLGVBQU8sU0FBUyxLQUFLQSxNQUFLO0FBQUEsTUFDNUI7QUFFRixXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0g7QUFFQSxTQUFTLFFBQVEsSUFBb0I7QUFDbkMsV0FBUyxNQUFNLEtBQWE7QUFDMUIsUUFBRyxlQUFlO0FBQ2hCLGFBQU8sSUFBSSxLQUFLLE9BQU87QUFBQTtBQUV2QixZQUFNO0FBQUEsRUFDVjtBQUVBLFdBQVMsVUFBZTtBQUN0QixRQUFJO0FBQ0YsWUFBTSxTQUFTLEdBQUc7QUFFbEIsYUFBTyxrQkFBa0IsVUFDckIsT0FBTyxNQUFNLEtBQUssSUFDbEI7QUFBQSxJQUNOLFNBQ00sS0FBSTtBQUNSLGFBQU8sTUFBTSxHQUFHO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBRUEsU0FBTyxRQUFRO0FBQ2pCO0FBRUEsU0FBUyxXQUFXLE9BQXdDO0FBQzFELFNBQU8sU0FBUyxPQUFPLFNBQVMsWUFBWSxPQUFPLE1BQU0sUUFBUTtBQUNuRTsiLAogICJuYW1lcyI6IFsiaW5pdCIsICJzZXQiLCAidmFsdWUiXQp9Cg==
136
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3NldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIGVudGVyLCB3YXRjaCB9IGZyb20gJy4uL2NvbnRyb2wnO1xuaW1wb3J0IHsgYWNjZXNzLCBldmVudCwgTUVUSE9ELCBTdGF0ZSwgdXBkYXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb24sIHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgU1RBTEUgPSBuZXcgV2Vha1NldDwoKSA9PiB2b2lkPigpO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSBzZXQge1xuICB0eXBlIENhbGxiYWNrPFQsIFMgPSBhbnk+ID0gKFxuICAgIHRoaXM6IFMsXG4gICAgbmV4dDogVCxcbiAgICBwcmV2aW91czogVFxuICApID0+ICgobmV4dDogVCkgPT4gdm9pZCkgfCBQcm9taXNlPGFueT4gfCB2b2lkIHwgYm9vbGVhbjtcblxuICB0eXBlIENvbXB1dGU8VCwgUyA9IGFueT4gPSAob246IFMsIGtleTogc3RyaW5nKSA9PiBUO1xuXG4gIHR5cGUgRmFjdG9yeTxULCBTID0gYW55PiA9ICh0aGlzOiBTLCBrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxUPiB8IFQ7XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IGFzIGB1bmRlZmluZWRgIGJ1dCByZXF1aXJlZC5cbiAqXG4gKiBQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgaXQgaXMgZGVmaW5lZC4gSWYgYWNjZXNzZWQgd2hpbGUgdW5kZWZpbmVkLCBhIGh5YnJpZFxuICogYFByb21pc2VgL2BFcnJvcmAgKGFrYTogW1N1c3BlbnNlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvY29uY3VycmVudC1tb2RlLXN1c3BlbnNlLmh0bWwpKSB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gc2V0PFQgPSBhbnk+KCk6IFQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZSoqIEZhY3RvcnkgaXMgbGF6eSEgSXQgd2lsbCBvbmx5IHJ1biBpZi93aGVuIHByb3BlcnR5IGlzIGFjY2Vzc2VkLlxuICogVmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgZmFjdG9yeSByZXNvbHZlcywgd2hpY2ggd2lsbCBhbHNvIGRpc3BhdGNoIGFuIHVwZGF0ZSBmb3IgdGhlIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXQ8VD4oZmFjdG9yeTogc2V0LkZhY3Rvcnk8VD4sIHJlcXVpcmVkOiBmYWxzZSk6IFQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqIElmIGFzeW5jLCBwcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgcmVzb2x2ZXMsIHllaWxkaW5nIGEgcmVzdWx0LlxuICogSWYgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvY2Vzc2luZywgUmVhY3QgU3VzcGVuc2Ugd2lsbCBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIGZhY3RvcnkgLSBDYWxsYmFjayBydW4gdG8gZGVycml2ZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSByZXF1aXJlZCAtIElmIHRydWUgcnVuIGZhY3RvcnkgaW1tZWRpYXRlbHkgb24gY3JlYXRpb24sIG90aGVyd2lzZSBvbiBhY2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNldDxUPihmYWN0b3J5OiBzZXQuRmFjdG9yeTxUPiwgcmVxdWlyZWQ/OiBib29sZWFuKTogVDtcblxuLyoqXG4gKiBTZXQgcHJvcGVydHkgd2l0aCBhIGZhY3RvcnkgZnVuY3Rpb24uXG4gKlxuICogSWYgYXN5bmMsIHByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bnRpbCByZXNvbHZlcywgeWVpbGRpbmcgYSByZXN1bHQuXG4gKiBJZiBhY2Nlc3NlZCB3aGlsZSBzdGlsbCBwcm9jZXNzaW5nLCBSZWFjdCBTdXNwZW5zZSB3aWxsIGJlIHRocm93bi5cbiAqXG4gKiBAcGFyYW0gZmFjdG9yeSAtIENhbGxiYWNrIHJ1biB0byBkZXJyaXZlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIG9uVXBkYXRlIC0gQ2FsbGJhY2sgcnVuIHdoZW4gcHJvcGVydHkgaXMgZmluaXNoZWQgY29tcHV0aW5nIG9yIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gc2V0PFQ+KGZhY3Rvcnk6IHNldC5GYWN0b3J5PFQ+LCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgd2l0aCBlbXB0eSBwbGFjZWhvbGRlciBhbmQvb3IgdXBkYXRlIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFN0YXJ0aW5nIHZhbHVlIGZvciBwcm9wZXJ0eS4gSWYgdW5kZWZpbmVkLCBzdXNwZW5zZSB3aWxsIGJlIHRocm93biBvbiBhY2Nlc3MsIHVudGlsIHZhbHVlIGlzIHNldCBhbmQgYWNjZXB0ZWQgYnkgY2FsbGJhY2suXG4gKiBAcGFyYW0gb25VcGRhdGUgLSBDYWxsYmFjayBydW4gd2hlbiBwcm9wZXJ0eSBpcyBzZXQuIElmIHJldHVybnMgZmFsc2UsIHVwZGF0ZSBpcyBub3QgYWNjZXB0ZWQgYW5kIHByb3BlcnR5IHdpbGwga2VlcCBwcmV2aW91cyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2V0PFQ+KHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbi8qKlxuICogSW1wbGVtZW50IGEgcmVhY3RpdmUgY29tcHV0ZWQgdmFsdWUgdXNpbmcgYSBtZXRob2QgcmVmZXJlbmNlLlxuICpcbiAqIFRoZSBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHJlLXJ1biB3aGVuIGFueSBhY2Nlc3NlZCBwcm9wZXJ0aWVzIGNoYW5nZS5cbiAqIFVzZSBgdHJ1ZWAgdG8gaW5kaWNhdGUgcmVhY3RpdmUgbW9kZSB3aXRoIGltcGxpY2l0IGB0aGlzYCBhcyB0aGUgc291cmNlLlxuICpcbiAqIEBwYXJhbSByZWFjdGl2ZVRvVGhpcyAtIFBhc3MgYHRydWVgIHRvIGVuYWJsZSByZWFjdGl2ZSBtb2RlIHdpdGggaW1wbGljaXQgdGhpc1xuICogQHBhcmFtIG1ldGhvZCAtIE1ldGhvZCByZWZlcmVuY2Ugb3IgY29tcHV0ZSBmdW5jdGlvbiB0byB1c2VcbiAqL1xuZnVuY3Rpb24gc2V0PFIsIFQgPSBhbnk+KFxuICByZWFjdGl2ZVRvVGhpczogdHJ1ZSxcbiAgbWV0aG9kOiBzZXQuQ29tcHV0ZTxSLCBUPiB8IEZ1bmN0aW9uXG4pOiBSO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHJlYWN0aXZlVG8gLSBTb3VyY2Ugc3RhdGUgZnJvbSB3aGljaCBjb21wdXRlZCB2YWx1ZSB3aWxsIGJlIGEgc3Vic2NyaWJlci5cbiAqIEBwYXJhbSBjb21wdXRlIC0gQ29tcHV0ZSBmdW5jdGlvbi4gQm91bmQgdG8gYSBzdWJzY3JpYmVyLXByb3h5IG9mIHNvdXJjZSwgcmV0dXJucyBvdXRwdXQgdmFsdWUuIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gc2V0PFIsIFQgZXh0ZW5kcyBTdGF0ZT4ocmVhY3RpdmVUbzogVCwgY29tcHV0ZTogc2V0LkNvbXB1dGU8UiwgVD4pOiBSO1xuXG5mdW5jdGlvbiBzZXQ8VCA9IGFueT4odmFsdWU/OiB1bmtub3duLCBhcmd1bWVudD86IHVua25vd24pOiBhbnkge1xuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QsIHN0YXRlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEF0dGVtcHRlZCB0byB1c2UgYW4gaW5zdHJ1Y3Rpb24gcmVzdWx0IChwcm9iYWJseSB1c2Ugb3IgZ2V0KSBhcyBjb21wdXRlZCBzb3VyY2UgZm9yICR7c3ViamVjdH0uJHtrZXl9LiBUaGlzIGlzIG5vdCBhbGxvd2VkLmBcbiAgICAgICk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eTogSW5zdHJ1Y3Rpb24uRGVzY3JpcHRvciA9IHt9O1xuXG4gICAgLy8gSGFuZGxlIHJlYWN0aXZlIGNvbXB1dGUgbW9kZXNcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdGF0ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IGZyb20gPSBzdWJqZWN0O1xuICAgICAgbGV0IGdldHRlcjogc2V0LkNvbXB1dGU8VCwgYW55PjtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RhdGUpIHtcbiAgICAgICAgZnJvbSA9IHZhbHVlO1xuICAgICAgICBnZXR0ZXIgPSBhcmd1bWVudCBhcyBzZXQuQ29tcHV0ZTxULCBhbnk+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWUgPT09IHRydWUsIGltcGxpY2l0IHRoaXMgd2l0aCBtZXRob2QgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IGZuID0gTUVUSE9ELmdldChhcmd1bWVudCkgfHwgYXJndW1lbnQ7XG4gICAgICAgIGdldHRlciA9ICgocCwgaykgPT4gZm4uY2FsbChwLCBrLCBwKSkgYXMgc2V0LkNvbXB1dGU8VCwgYW55PjtcbiAgICAgIH1cblxuICAgICAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIFN0YXRlID0gU3RhdGU+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgICAgY29uc3Qgc291cmNlOiBTb3VyY2UgPSAocmVzb2x2ZSkgPT4gcmVzb2x2ZShmcm9tKTtcblxuICAgICAgbGV0IHJlc2V0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgaXNBc3luYzogYm9vbGVhbjtcbiAgICAgIGxldCBwcm94eTogYW55O1xuXG4gICAgICBmdW5jdGlvbiBjb25uZWN0KHNlbGY6IFN0YXRlKSB7XG4gICAgICAgIHJlc2V0ID0gd2F0Y2goXG4gICAgICAgICAgc2VsZixcbiAgICAgICAgICAoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgcHJveHkgPSBjdXJyZW50O1xuXG4gICAgICAgICAgICBpZiAoIShrZXkgaW4gc3RhdGUpIHx8IFNUQUxFLmRlbGV0ZShjb21wdXRlKSkgY29tcHV0ZSghcmVzZXQpO1xuXG4gICAgICAgICAgICByZXR1cm4gKGRpZFVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGlkVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgU1RBTEUuYWRkKGNvbXB1dGUpO1xuICAgICAgICAgICAgICAgIGV2ZW50KHN1YmplY3QsIGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjb21wdXRlKGluaXRpYWw/OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBuZXh0OiBUIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dCA9IGdldHRlci5jYWxsKHByb3h5LCBwcm94eSwga2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlICR7XG4gICAgICAgICAgICAgIGluaXRpYWwgPyAnaW5pdGlhbGl6aW5nJyA6ICdyZWZyZXNoaW5nJ1xuICAgICAgICAgICAgfSAke3N1YmplY3R9LiR7a2V5fS5gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpbml0aWFsKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCBuZXh0LCAhaXNBc3luYyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghcHJveHkpIHtcbiAgICAgICAgICBzb3VyY2UoY29ubmVjdCk7XG4gICAgICAgICAgaXNBc3luYyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU1RBTEUuZGVsZXRlKGNvbXB1dGUpKSBjb21wdXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhzdWJqZWN0LCBrZXksICFwcm94eSkgYXMgVDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZhY3RvcnkvdmFsdWUgbW9kZXMgKGV4aXN0aW5nIGxvZ2ljKVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBhdHRlbXB0KHZhbHVlLmJpbmQoc3ViamVjdCwga2V5KSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBHZW5lcmF0aW5nIGluaXRpYWwgdmFsdWUgZm9yICR7c3ViamVjdH0uJHtrZXl9IGZhaWxlZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0eS5nZXQgPSBhcmd1bWVudCAhPT0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlOiBhbnkpID0+IChzdWJqZWN0W2tleV0gPSB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgICB2YWx1ZS50aGVuKHNldCwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBldmVudChzdWJqZWN0LCBrZXkpO1xuICAgICAgICAgICAgcHJvcGVydHkuZ2V0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIGVsc2Ugc2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAoYXJndW1lbnQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0W2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgICBhZGRMaXN0ZW5lcihzdWJqZWN0LCBpbml0LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5LmdldCA9IGluaXQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBwcm9wZXJ0eS5zZXQgPSBmdW5jdGlvbiAodGhpczogYW55LCB2YWx1ZTogYW55LCBwcmV2aW91czogYW55KSB7XG4gICAgICAgIGNvbnN0IGV4aXQgPSBlbnRlcigpO1xuICAgICAgICBjb25zdCByZXR1cm5zID0gYXJndW1lbnQuY2FsbCh0aGlzLCB2YWx1ZSwgcHJldmlvdXMpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGV4aXQoKTtcblxuICAgICAgICBpZiAocmV0dXJucyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodHlwZW9mIHVuc2V0ID09ICdmdW5jdGlvbicpIHVuc2V0KHZhbHVlKTtcblxuICAgICAgICB1bnNldCA9IChuZXh0OiBUKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXR1cm5zID09ICdmdW5jdGlvbicpIHJldHVybnMobmV4dCk7XG5cbiAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9IGVsc2VcbiAgICAgIHByb3BlcnR5LnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBwcm9wZXJ0eS5nZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH07XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0KGZuOiAoKSA9PiBhbnkpOiBhbnkge1xuICAvLyBJZ25vcmUgVFM4MDAwNjogRnVuY3Rpb24gbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgZnVuY3Rpb24gcmV0cnkoZXJyOiB1bmtub3duKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBlcnIudGhlbihjb21wdXRlKTtcbiAgICBlbHNlIHRocm93IGVycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGUoKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZm4oKTtcblxuICAgICAgcmV0dXJuIG91dHB1dCBpbnN0YW5jZW9mIFByb21pc2UgPyBvdXRwdXQuY2F0Y2gocmV0cnkpIDogb3V0cHV0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHJldHJ5KGVycik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXB1dGUoKTtcbn1cblxuZXhwb3J0IHsgc2V0IH07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGFBQWEsT0FBTyxhQUFhO0FBQzFDLFNBQVMsUUFBUSxPQUFPLFFBQVEsT0FBTyxjQUFjO0FBQ3JELFNBQXNCLFdBQVc7QUFFakMsTUFBTSxRQUFRLG9CQUFJLFFBQW9CO0FBa0Z0QyxTQUFTLElBQWEsT0FBaUIsVUFBeUI7QUFDOUQsU0FBTyxJQUFPLENBQUMsS0FBSyxTQUFTLFVBQVU7QUFDckMsUUFBSSxPQUFPLFNBQVM7QUFDbEIsWUFBTSxJQUFJO0FBQUEsUUFDUix1RkFBdUYsT0FBTyxJQUFJLEdBQUc7QUFBQSxNQUN2RztBQUVGLFVBQU0sV0FBbUMsQ0FBQztBQUcxQyxRQUFJLGlCQUFpQixTQUFTLFVBQVUsTUFBTTtBQW9CNUMsVUFBU0EsV0FBVCxTQUFpQixNQUFhO0FBQzVCLGdCQUFRO0FBQUEsVUFDTjtBQUFBLFVBQ0EsQ0FBQyxZQUFZO0FBQ1gsb0JBQVE7QUFFUixnQkFBSSxFQUFFLE9BQU8sVUFBVSxNQUFNLE9BQU9DLFFBQU8sRUFBRyxDQUFBQSxTQUFRLENBQUMsS0FBSztBQUU1RCxtQkFBTyxDQUFDLGNBQWM7QUFDcEIsa0JBQUksV0FBVztBQUNiLHNCQUFNLElBQUlBLFFBQU87QUFDakIsc0JBQU0sU0FBUyxLQUFLLElBQUk7QUFBQSxjQUMxQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGLEdBRVNBLFdBQVQsU0FBaUIsU0FBbUI7QUFDbEMsWUFBSTtBQUVKLFlBQUk7QUFDRixpQkFBTyxPQUFPLEtBQUssT0FBTyxPQUFPLEdBQUc7QUFBQSxRQUN0QyxTQUFTLEtBQUs7QUFDWixrQkFBUTtBQUFBLFlBQ04saUNBQ0UsVUFBVSxpQkFBaUIsWUFDN0IsSUFBSSxPQUFPLElBQUksR0FBRztBQUFBLFVBQ3BCO0FBRUEsY0FBSSxRQUFTLE9BQU07QUFFbkIsa0JBQVEsTUFBTSxHQUFHO0FBQUEsUUFDbkI7QUFFQSxlQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsT0FBTztBQUFBLE1BQ3JDO0FBckNTLG9CQUFBRCxVQW1CQSxVQUFBQztBQXRDVCxVQUFJLE9BQU87QUFDWCxVQUFJO0FBRUosVUFBSSxpQkFBaUIsT0FBTztBQUMxQixlQUFPO0FBQ1AsaUJBQVM7QUFBQSxNQUNYLE9BQU87QUFFTCxjQUFNLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSztBQUNuQyxpQkFBVSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFBQSxNQUNyQztBQUdBLFlBQU0sU0FBaUIsQ0FBQyxZQUFZLFFBQVEsSUFBSTtBQUVoRCxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUF5Q0osYUFBTyxNQUFNO0FBQ1gsWUFBSSxDQUFDLE9BQU87QUFDVixpQkFBT0QsUUFBTztBQUNkLG9CQUFVO0FBQUEsUUFDWjtBQUVBLFlBQUksTUFBTSxPQUFPQyxRQUFPLEVBQUcsQ0FBQUEsU0FBUTtBQUVuQyxlQUFPLE9BQU8sU0FBUyxLQUFLLENBQUMsS0FBSztBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUdBLFFBQUksT0FBTyxTQUFTLGNBQWMsaUJBQWlCLFNBQVM7QUFDMUQsVUFBU0MsUUFBVCxXQUFnQjtBQUNkLFlBQUksT0FBTyxTQUFTO0FBQ2xCLGNBQUk7QUFDRixvQkFBUSxRQUFRLE1BQU0sS0FBSyxTQUFTLEdBQUcsQ0FBQztBQUFBLFVBQzFDLFNBQVMsS0FBSztBQUNaLG9CQUFRO0FBQUEsY0FDTixnQ0FBZ0MsT0FBTyxJQUFJLEdBQUc7QUFBQSxZQUNoRDtBQUNBLGtCQUFNO0FBQUEsVUFDUjtBQUVGLGlCQUFTLE1BQU0sYUFBYTtBQUU1QixjQUFNQyxPQUFNLENBQUNDLFdBQWdCLFFBQVEsR0FBRyxJQUFJQTtBQUU1QyxZQUFJLGlCQUFpQjtBQUNuQixnQkFBTSxLQUFLRCxNQUFLLENBQUMsVUFBVTtBQUN6QixrQkFBTSxTQUFTLEdBQUc7QUFDbEIscUJBQVMsTUFBTSxNQUFNO0FBQ25CLG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFlBQ0UsQ0FBQUEsS0FBSSxLQUFLO0FBRWQsWUFBSSxTQUFVLFFBQU87QUFFckIsZUFBTyxRQUFRLEdBQUc7QUFBQSxNQUNwQjtBQTNCUyxpQkFBQUQ7QUE2QlQsVUFBSSxVQUFVO0FBQ1osb0JBQVksU0FBU0EsT0FBTSxJQUFJO0FBQUEsTUFDakMsT0FBTztBQUNMLGlCQUFTLE1BQU1BO0FBQUEsTUFDakI7QUFBQSxJQUNGLFdBQVcsVUFBVSxRQUFXO0FBQzlCLGVBQVMsUUFBUTtBQUFBLElBQ25CO0FBRUEsUUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxVQUFJO0FBRUosZUFBUyxNQUFNLFNBQXFCRSxRQUFZLFVBQWU7QUFDN0QsY0FBTSxPQUFPLE1BQU07QUFDbkIsY0FBTSxVQUFVLFNBQVMsS0FBSyxNQUFNQSxRQUFPLFFBQVE7QUFDbkQsY0FBTSxRQUFRLEtBQUs7QUFFbkIsWUFBSSxZQUFZLE1BQU8sUUFBTztBQUU5QixZQUFJLE9BQU8sU0FBUyxXQUFZLE9BQU1BLE1BQUs7QUFFM0MsZ0JBQVEsQ0FBQyxTQUFZO0FBQ25CLGNBQUksT0FBTyxXQUFXLFdBQVksU0FBUSxJQUFJO0FBRTlDLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0UsZUFBUyxNQUFNLENBQUNBLFdBQVU7QUFDeEIsaUJBQVMsTUFBTTtBQUNmLGVBQU8sU0FBUyxLQUFLQSxNQUFLO0FBQUEsTUFDNUI7QUFFRixXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0g7QUFFQSxTQUFTLFFBQVEsSUFBb0I7QUFFbkMsV0FBUyxNQUFNLEtBQWM7QUFDM0IsUUFBSSxlQUFlLFFBQVMsUUFBTyxJQUFJLEtBQUssT0FBTztBQUFBLFFBQzlDLE9BQU07QUFBQSxFQUNiO0FBRUEsV0FBUyxVQUFlO0FBQ3RCLFFBQUk7QUFDRixZQUFNLFNBQVMsR0FBRztBQUVsQixhQUFPLGtCQUFrQixVQUFVLE9BQU8sTUFBTSxLQUFLLElBQUk7QUFBQSxJQUMzRCxTQUFTLEtBQUs7QUFDWixhQUFPLE1BQU0sR0FBRztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUVBLFNBQU8sUUFBUTtBQUNqQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdCIsICJjb21wdXRlIiwgImluaXQiLCAic2V0IiwgInZhbHVlIl0KfQo=
@@ -1,8 +1,7 @@
1
- import { fetch, Model, PARENT, STATE, uid, update, watch } from "../model";
1
+ import { access, follow, State, PARENT, STATE, uid, update } from "../state";
2
2
  const INSTRUCTION = /* @__PURE__ */ new Map();
3
3
  function use(arg1, arg2) {
4
- if (Model.is(arg1))
5
- arg1 = childInstruction(arg1, arg2);
4
+ if (State.is(arg1)) arg1 = childInstruction(arg1, arg2);
6
5
  const token = Symbol("instruction-" + uid());
7
6
  INSTRUCTION.set(token, arg1);
8
7
  return token;
@@ -11,10 +10,11 @@ function childInstruction(type, arg2) {
11
10
  return (key, subject) => {
12
11
  function set(next) {
13
12
  if (next ? !(next instanceof type) : arg2 !== false)
14
- throw new Error(`${subject}.${key} expected Model of type ${type} but got ${next && next.constructor}.`);
13
+ throw new Error(
14
+ `${subject}.${key} expected State of type ${type} but got ${next && next.constructor}.`
15
+ );
15
16
  update(subject, key, next);
16
- if (next && typeof arg2 == "function")
17
- arg2(next);
17
+ if (next && typeof arg2 == "function") arg2(next);
18
18
  return false;
19
19
  }
20
20
  const value = new type();
@@ -29,37 +29,35 @@ function init() {
29
29
  for (const key in this) {
30
30
  const { value } = Object.getOwnPropertyDescriptor(this, key);
31
31
  const instruction = INSTRUCTION.get(value);
32
- if (!instruction)
33
- continue;
32
+ if (!instruction) continue;
34
33
  INSTRUCTION.delete(value);
35
34
  delete this[key];
36
35
  const output = instruction.call(this, key, this, state);
37
- if (!output)
38
- continue;
36
+ if (!output) continue;
39
37
  const desc = typeof output == "object" ? output : { get: output };
40
- if ("value" in desc)
41
- state[key] = desc.value;
42
- const model = this;
43
- Object.defineProperty(model, key, {
38
+ if ("value" in desc) state[key] = desc.value;
39
+ const self = this;
40
+ Object.defineProperty(self, key, {
44
41
  enumerable: desc.enumerable !== false,
45
42
  get() {
46
- return watch(
43
+ return follow(
47
44
  this,
48
45
  key,
49
- typeof desc.get == "function" ? desc.get(this) : fetch(model, key, desc.get)
46
+ typeof desc.get == "function" ? desc.get(this) : access(self, key, desc.get)
50
47
  );
51
48
  },
52
49
  set(next) {
53
- if (desc.set === false)
54
- throw new Error(`${model}.${key} is read-only.`);
55
- update(model, key, next, desc.set);
50
+ if (desc.set === false) {
51
+ throw new Error(`${self}.${key} is read-only.`);
52
+ }
53
+ update(self, key, next, desc.set);
56
54
  }
57
55
  });
58
56
  }
59
57
  return null;
60
58
  }
61
- Model.on(init);
59
+ State.on(init);
62
60
  export {
63
61
  use
64
62
  };
65
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZmV0Y2gsIE1vZGVsLCBQQVJFTlQsIFNUQVRFLCB1aWQsIHVwZGF0ZSwgd2F0Y2ggfSBmcm9tICcuLi9tb2RlbCc7XG5cbmNvbnN0IElOU1RSVUNUSU9OID0gbmV3IE1hcDxzeW1ib2wsIE1vZGVsLkluc3RydWN0aW9uPigpO1xuXG5mdW5jdGlvbiB1c2UgPFQ+IChpbnN0cnVjdGlvbjogTW9kZWwuSW5zdHJ1Y3Rpb248VD4pOiBUIGV4dGVuZHMgdm9pZCA/IHVua25vd24gOiBUO1xuXG5mdW5jdGlvbiB1c2UgPFQgZXh0ZW5kcyBNb2RlbD4gKFR5cGU6IE1vZGVsLkluaXQ8VD4sIHJlcXVpcmVkOiBmYWxzZSk6IFQgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIHVzZSA8VCBleHRlbmRzIE1vZGVsPiAoVHlwZTogTW9kZWwuSW5pdDxUPiwgcmVhZHk/OiAoaTogVCkgPT4gdm9pZCk6IFQ7XG5cbmZ1bmN0aW9uIHVzZShcbiAgYXJnMTogTW9kZWwuSW5pdCB8IE1vZGVsLkluc3RydWN0aW9uLFxuICBhcmcyPzogKChpOiBNb2RlbCkgPT4gdm9pZCkgfCBib29sZWFuKXtcblxuICBpZihNb2RlbC5pcyhhcmcxKSlcbiAgICBhcmcxID0gY2hpbGRJbnN0cnVjdGlvbihhcmcxLCBhcmcyKTtcblxuICBjb25zdCB0b2tlbiA9IFN5bWJvbChcImluc3RydWN0aW9uLVwiICsgdWlkKCkpO1xuICBJTlNUUlVDVElPTi5zZXQodG9rZW4sIGFyZzEpO1xuICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIGNoaWxkSW5zdHJ1Y3Rpb24oXG4gIHR5cGU6IE1vZGVsLkluaXQ8TW9kZWw+LFxuICBhcmcyPzogKChpOiBNb2RlbCkgPT4gdm9pZCkgfCBib29sZWFuXG4pOiBNb2RlbC5JbnN0cnVjdGlvbjxhbnksIGFueT4ge1xuICByZXR1cm4gKGtleSwgc3ViamVjdCkgPT4ge1xuICAgIGZ1bmN0aW9uIHNldChuZXh0OiBNb2RlbCB8IHVuZGVmaW5lZCl7XG4gICAgICBpZihuZXh0ID8gIShuZXh0IGluc3RhbmNlb2YgdHlwZSkgOiBhcmcyICE9PSBmYWxzZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N1YmplY3R9LiR7a2V5fSBleHBlY3RlZCBNb2RlbCBvZiB0eXBlICR7dHlwZX0gYnV0IGdvdCAke25leHQgJiYgbmV4dC5jb25zdHJ1Y3Rvcn0uYCk7XG5cbiAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIG5leHQpO1xuXG4gICAgICBpZihuZXh0ICYmIHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgYXJnMihuZXh0KTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IHR5cGUoKTtcblxuICAgIHNldCh2YWx1ZSk7XG4gICAgUEFSRU5ULnNldCh2YWx1ZSwgc3ViamVjdCk7XG4gICAgdmFsdWUuc2V0KCk7XG5cbiAgICByZXR1cm4geyBzZXQgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0KHRoaXM6IE1vZGVsKXtcbiAgY29uc3Qgc3RhdGUgPSBTVEFURS5nZXQodGhpcykhO1xuXG4gIGZvcihjb25zdCBrZXkgaW4gdGhpcyl7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBrZXkpITtcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IElOU1RSVUNUSU9OLmdldCh2YWx1ZSk7XG5cbiAgICBpZighaW5zdHJ1Y3Rpb24pXG4gICAgICBjb250aW51ZTtcblxuICAgIElOU1RSVUNUSU9OLmRlbGV0ZSh2YWx1ZSk7XG4gICAgZGVsZXRlICh0aGlzIGFzIGFueSlba2V5XTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGluc3RydWN0aW9uLmNhbGwodGhpcywga2V5LCB0aGlzLCBzdGF0ZSk7XG5cbiAgICBpZighb3V0cHV0KVxuICAgICAgY29udGludWU7XG5cbiAgICBjb25zdCBkZXNjID0gdHlwZW9mIG91dHB1dCA9PSBcIm9iamVjdFwiID8gb3V0cHV0IDogeyBnZXQ6IG91dHB1dCB9O1xuXG4gICAgaWYoXCJ2YWx1ZVwiIGluIGRlc2MpXG4gICAgICBzdGF0ZVtrZXldID0gZGVzYy52YWx1ZTtcblxuICAgIGNvbnN0IG1vZGVsID0gdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwga2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUgIT09IGZhbHNlLFxuICAgICAgZ2V0KHRoaXM6IE1vZGVsKXtcbiAgICAgICAgcmV0dXJuIHdhdGNoKHRoaXMsIGtleSwgXG4gICAgICAgICAgdHlwZW9mIGRlc2MuZ2V0ID09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBkZXNjLmdldCh0aGlzKVxuICAgICAgICAgICAgOiBmZXRjaChtb2RlbCwga2V5LCBkZXNjLmdldClcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzZXQobmV4dCl7XG4gICAgICAgIGlmKGRlc2Muc2V0ID09PSBmYWxzZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWx9LiR7a2V5fSBpcyByZWFkLW9ubHkuYCk7XG5cbiAgICAgICAgdXBkYXRlKG1vZGVsLCBrZXksIG5leHQsIGRlc2Muc2V0KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbk1vZGVsLm9uKGluaXQpO1xuXG5leHBvcnQgeyB1c2UgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsT0FBTyxPQUFPLFFBQVEsT0FBTyxLQUFLLFFBQVEsYUFBYTtBQUVoRSxNQUFNLGNBQWMsb0JBQUksSUFBK0I7QUFRdkQsU0FBUyxJQUNQLE1BQ0EsTUFBc0M7QUFFdEMsTUFBRyxNQUFNLEdBQUcsSUFBSTtBQUNkLFdBQU8saUJBQWlCLE1BQU0sSUFBSTtBQUVwQyxRQUFNLFFBQVEsT0FBTyxpQkFBaUIsSUFBSSxDQUFDO0FBQzNDLGNBQVksSUFBSSxPQUFPLElBQUk7QUFDM0IsU0FBTztBQUNUO0FBRUEsU0FBUyxpQkFDUCxNQUNBLE1BQzZCO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLFlBQVk7QUFDdkIsYUFBUyxJQUFJLE1BQXdCO0FBQ25DLFVBQUcsT0FBTyxFQUFFLGdCQUFnQixRQUFRLFNBQVM7QUFDM0MsY0FBTSxJQUFJLE1BQU0sR0FBRyxPQUFPLElBQUksR0FBRywyQkFBMkIsSUFBSSxZQUFZLFFBQVEsS0FBSyxXQUFXLEdBQUc7QUFFekcsYUFBTyxTQUFTLEtBQUssSUFBSTtBQUV6QixVQUFHLFFBQVEsT0FBTyxRQUFRO0FBQ3hCLGFBQUssSUFBSTtBQUVYLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxRQUFRLElBQUksS0FBSztBQUV2QixRQUFJLEtBQUs7QUFDVCxXQUFPLElBQUksT0FBTyxPQUFPO0FBQ3pCLFVBQU0sSUFBSTtBQUVWLFdBQU8sRUFBRSxJQUFJO0FBQUEsRUFDZjtBQUNGO0FBRUEsU0FBUyxPQUFpQjtBQUN4QixRQUFNLFFBQVEsTUFBTSxJQUFJLElBQUk7QUFFNUIsYUFBVSxPQUFPLE1BQUs7QUFDcEIsVUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLHlCQUF5QixNQUFNLEdBQUc7QUFDM0QsVUFBTSxjQUFjLFlBQVksSUFBSSxLQUFLO0FBRXpDLFFBQUcsQ0FBQztBQUNGO0FBRUYsZ0JBQVksT0FBTyxLQUFLO0FBQ3hCLFdBQVEsS0FBYSxHQUFHO0FBRXhCLFVBQU0sU0FBUyxZQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSztBQUV0RCxRQUFHLENBQUM7QUFDRjtBQUVGLFVBQU0sT0FBTyxPQUFPLFVBQVUsV0FBVyxTQUFTLEVBQUUsS0FBSyxPQUFPO0FBRWhFLFFBQUcsV0FBVztBQUNaLFlBQU0sR0FBRyxJQUFJLEtBQUs7QUFFcEIsVUFBTSxRQUFRO0FBRWQsV0FBTyxlQUFlLE9BQU8sS0FBSztBQUFBLE1BQ2hDLFlBQVksS0FBSyxlQUFlO0FBQUEsTUFDaEMsTUFBZ0I7QUFDZCxlQUFPO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUNqQixPQUFPLEtBQUssT0FBTyxhQUNmLEtBQUssSUFBSSxJQUFJLElBQ2IsTUFBTSxPQUFPLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxJQUFJLE1BQUs7QUFDUCxZQUFHLEtBQUssUUFBUTtBQUNkLGdCQUFNLElBQUksTUFBTSxHQUFHLEtBQUssSUFBSSxHQUFHLGdCQUFnQjtBQUVqRCxlQUFPLE9BQU8sS0FBSyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQ25DO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU87QUFDVDtBQUVBLE1BQU0sR0FBRyxJQUFJOyIsCiAgIm5hbWVzIjogW10KfQo=
63
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgYWNjZXNzLCBmb2xsb3csIFN0YXRlLCBQQVJFTlQsIFNUQVRFLCB1aWQsIHVwZGF0ZSB9IGZyb20gJy4uL3N0YXRlJztcblxuLyoqXG4gKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAqIE9wdGlvbmFsIHJldHVybmVkIGNhbGxiYWNrIHdpbGwgcnVuIHdoZW4gb25jZSB1cG9uIGZpcnN0IGFjY2Vzcy5cbiAqL1xudHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgU3RhdGUgPSBhbnk+ID1cbiAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWxsb3cgZm9yIG51bWJlcnMvc3ltYm9sIHByb3BlcnRpZXM/XG4gIChcbiAgICB0aGlzOiBNLFxuICAgIGtleTogRXh0cmFjdDxTdGF0ZS5GaWVsZDxNPiwgc3RyaW5nPixcbiAgICB0aGlzQXJnOiBNLFxuICAgIHN0YXRlOiBTdGF0ZS5WYWx1ZXM8TT5cbiAgKSA9PiBJbnN0cnVjdGlvbi5EZXNjcmlwdG9yPFQ+IHwgKChzb3VyY2U6IE0pID0+IFQpIHwgdm9pZDtcblxuZGVjbGFyZSBuYW1lc3BhY2UgSW5zdHJ1Y3Rpb24ge1xuICB0eXBlIEdldHRlcjxUPiA9IChzb3VyY2U6IFN0YXRlKSA9PiBUO1xuXG4gIHR5cGUgRGVzY3JpcHRvcjxUID0gYW55PiA9IHtcbiAgICBnZXQ/OiBHZXR0ZXI8VD4gfCBib29sZWFuO1xuICAgIHNldD86IFN0YXRlLlNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgZW51bWVyYWJsZT86IGJvb2xlYW47XG4gICAgdmFsdWU/OiBUO1xuICB9O1xufVxuXG5jb25zdCBJTlNUUlVDVElPTiA9IG5ldyBNYXA8c3ltYm9sLCBJbnN0cnVjdGlvbj4oKTtcblxuZnVuY3Rpb24gdXNlPFQ+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5cbmZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFxuICBUeXBlOiBTdGF0ZS5OZXc8VD4sXG4gIHJlcXVpcmVkOiBmYWxzZVxuKTogVCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gdXNlPFQgZXh0ZW5kcyBTdGF0ZT4oVHlwZTogU3RhdGUuTmV3PFQ+LCByZWFkeT86IChpOiBUKSA9PiB2b2lkKTogVDtcblxuZnVuY3Rpb24gdXNlKFxuICBhcmcxOiBTdGF0ZS5DbGFzcyB8IEluc3RydWN0aW9uLFxuICBhcmcyPzogKChpOiBTdGF0ZSkgPT4gdm9pZCkgfCBib29sZWFuXG4pIHtcbiAgaWYgKFN0YXRlLmlzKGFyZzEpKSBhcmcxID0gY2hpbGRJbnN0cnVjdGlvbihhcmcxLCBhcmcyKTtcblxuICBjb25zdCB0b2tlbiA9IFN5bWJvbCgnaW5zdHJ1Y3Rpb24tJyArIHVpZCgpKTtcbiAgSU5TVFJVQ1RJT04uc2V0KHRva2VuLCBhcmcxKTtcbiAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBjaGlsZEluc3RydWN0aW9uKFxuICB0eXBlOiBTdGF0ZS5DbGFzczxTdGF0ZT4sXG4gIGFyZzI/OiAoKGk6IFN0YXRlKSA9PiB2b2lkKSB8IGJvb2xlYW5cbik6IEluc3RydWN0aW9uPGFueSwgYW55PiB7XG4gIHJldHVybiAoa2V5LCBzdWJqZWN0KSA9PiB7XG4gICAgZnVuY3Rpb24gc2V0KG5leHQ6IFN0YXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobmV4dCA/ICEobmV4dCBpbnN0YW5jZW9mIHR5cGUpIDogYXJnMiAhPT0gZmFsc2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtzdWJqZWN0fS4ke2tleX0gZXhwZWN0ZWQgU3RhdGUgb2YgdHlwZSAke3R5cGV9IGJ1dCBnb3QgJHtcbiAgICAgICAgICAgIG5leHQgJiYgbmV4dC5jb25zdHJ1Y3RvclxuICAgICAgICAgIH0uYFxuICAgICAgICApO1xuXG4gICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCBuZXh0KTtcblxuICAgICAgaWYgKG5leHQgJiYgdHlwZW9mIGFyZzIgPT0gJ2Z1bmN0aW9uJykgYXJnMihuZXh0KTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IHR5cGUoKTtcblxuICAgIHNldCh2YWx1ZSk7XG4gICAgUEFSRU5ULnNldCh2YWx1ZSwgc3ViamVjdCk7XG4gICAgdmFsdWUuc2V0KCk7XG5cbiAgICByZXR1cm4geyBzZXQgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdCh0aGlzOiBTdGF0ZSkge1xuICBjb25zdCBzdGF0ZSA9IFNUQVRFLmdldCh0aGlzKSE7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcykge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywga2V5KSE7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBJTlNUUlVDVElPTi5nZXQodmFsdWUpO1xuXG4gICAgaWYgKCFpbnN0cnVjdGlvbikgY29udGludWU7XG5cbiAgICBJTlNUUlVDVElPTi5kZWxldGUodmFsdWUpO1xuICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpW2tleV07XG5cbiAgICBjb25zdCBvdXRwdXQgPSBpbnN0cnVjdGlvbi5jYWxsKHRoaXMsIGtleSwgdGhpcywgc3RhdGUpO1xuXG4gICAgaWYgKCFvdXRwdXQpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZGVzYyA9IHR5cGVvZiBvdXRwdXQgPT0gJ29iamVjdCcgPyBvdXRwdXQgOiB7IGdldDogb3V0cHV0IH07XG5cbiAgICBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSBzdGF0ZVtrZXldID0gZGVzYy52YWx1ZTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlICE9PSBmYWxzZSxcbiAgICAgIGdldCh0aGlzOiBTdGF0ZSkge1xuICAgICAgICByZXR1cm4gZm9sbG93KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHR5cGVvZiBkZXNjLmdldCA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGRlc2MuZ2V0KHRoaXMpXG4gICAgICAgICAgICA6IGFjY2VzcyhzZWxmLCBrZXksIGRlc2MuZ2V0KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHNldChuZXh0KSB7XG4gICAgICAgIGlmIChkZXNjLnNldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2VsZn0uJHtrZXl9IGlzIHJlYWQtb25seS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZShzZWxmLCBrZXksIG5leHQsIGRlc2Muc2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5TdGF0ZS5vbihpbml0KTtcblxuZXhwb3J0IHsgdXNlLCBJbnN0cnVjdGlvbiB9O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxRQUFRLFFBQVEsT0FBTyxRQUFRLE9BQU8sS0FBSyxjQUFjO0FBMEJsRSxNQUFNLGNBQWMsb0JBQUksSUFBeUI7QUFXakQsU0FBUyxJQUNQLE1BQ0EsTUFDQTtBQUNBLE1BQUksTUFBTSxHQUFHLElBQUksRUFBRyxRQUFPLGlCQUFpQixNQUFNLElBQUk7QUFFdEQsUUFBTSxRQUFRLE9BQU8saUJBQWlCLElBQUksQ0FBQztBQUMzQyxjQUFZLElBQUksT0FBTyxJQUFJO0FBQzNCLFNBQU87QUFDVDtBQUVBLFNBQVMsaUJBQ1AsTUFDQSxNQUN1QjtBQUN2QixTQUFPLENBQUMsS0FBSyxZQUFZO0FBQ3ZCLGFBQVMsSUFBSSxNQUF5QjtBQUNwQyxVQUFJLE9BQU8sRUFBRSxnQkFBZ0IsUUFBUSxTQUFTO0FBQzVDLGNBQU0sSUFBSTtBQUFBLFVBQ1IsR0FBRyxPQUFPLElBQUksR0FBRywyQkFBMkIsSUFBSSxZQUM5QyxRQUFRLEtBQUssV0FDZjtBQUFBLFFBQ0Y7QUFFRixhQUFPLFNBQVMsS0FBSyxJQUFJO0FBRXpCLFVBQUksUUFBUSxPQUFPLFFBQVEsV0FBWSxNQUFLLElBQUk7QUFFaEQsYUFBTztBQUFBLElBQ1Q7QUFFQSxVQUFNLFFBQVEsSUFBSSxLQUFLO0FBRXZCLFFBQUksS0FBSztBQUNULFdBQU8sSUFBSSxPQUFPLE9BQU87QUFDekIsVUFBTSxJQUFJO0FBRVYsV0FBTyxFQUFFLElBQUk7QUFBQSxFQUNmO0FBQ0Y7QUFFQSxTQUFTLE9BQWtCO0FBQ3pCLFFBQU0sUUFBUSxNQUFNLElBQUksSUFBSTtBQUU1QixhQUFXLE9BQU8sTUFBTTtBQUN0QixVQUFNLEVBQUUsTUFBTSxJQUFJLE9BQU8seUJBQXlCLE1BQU0sR0FBRztBQUMzRCxVQUFNLGNBQWMsWUFBWSxJQUFJLEtBQUs7QUFFekMsUUFBSSxDQUFDLFlBQWE7QUFFbEIsZ0JBQVksT0FBTyxLQUFLO0FBQ3hCLFdBQVEsS0FBYSxHQUFHO0FBRXhCLFVBQU0sU0FBUyxZQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSztBQUV0RCxRQUFJLENBQUMsT0FBUTtBQUViLFVBQU0sT0FBTyxPQUFPLFVBQVUsV0FBVyxTQUFTLEVBQUUsS0FBSyxPQUFPO0FBRWhFLFFBQUksV0FBVyxLQUFNLE9BQU0sR0FBRyxJQUFJLEtBQUs7QUFFdkMsVUFBTSxPQUFPO0FBRWIsV0FBTyxlQUFlLE1BQU0sS0FBSztBQUFBLE1BQy9CLFlBQVksS0FBSyxlQUFlO0FBQUEsTUFDaEMsTUFBaUI7QUFDZixlQUFPO0FBQUEsVUFDTDtBQUFBLFVBQ0E7QUFBQSxVQUNBLE9BQU8sS0FBSyxPQUFPLGFBQ2YsS0FBSyxJQUFJLElBQUksSUFDYixPQUFPLE1BQU0sS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFBQSxNQUNBLElBQUksTUFBTTtBQUNSLFlBQUksS0FBSyxRQUFRLE9BQU87QUFDdEIsZ0JBQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCO0FBQUEsUUFDaEQ7QUFFQSxlQUFPLE1BQU0sS0FBSyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQ2xDO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU87QUFDVDtBQUVBLE1BQU0sR0FBRyxJQUFJOyIsCiAgIm5hbWVzIjogW10KfQo=