@data-client/core 0.4.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data_client_logo_and_text.svg +50 -0
- package/dist/index.js +66 -92
- package/dist/index.umd.min.js +1 -1
- package/dist/next.js +0 -447
- package/legacy/actionTypes.js +11 -13
- package/legacy/actions.js +2 -0
- package/legacy/controller/Controller.js +26 -42
- package/legacy/controller/createSet.js +3 -2
- package/legacy/controller/ensurePojo.js +7 -0
- package/legacy/index.js +2 -2
- package/legacy/internal.js +2 -2
- package/legacy/manager/DevtoolsManager.js +3 -3
- package/legacy/manager/NetworkManager.js +11 -11
- package/legacy/manager/SubscriptionManager.js +6 -6
- package/legacy/manager/applyManager.js +2 -9
- package/legacy/middlewareTypes.js +1 -1
- package/legacy/next/index.js +2 -3
- package/legacy/state/reducer/fetchReducer.js +5 -5
- package/legacy/state/reducer/setReducer.js +2 -2
- package/legacy/types.js +3 -4
- package/lib/actionTypes.d.ts +10 -12
- package/lib/actionTypes.d.ts.map +1 -1
- package/lib/actionTypes.js +11 -13
- package/lib/{newActions.d.ts → actions.d.ts} +1 -3
- package/lib/actions.d.ts.map +1 -0
- package/lib/actions.js +2 -0
- package/lib/controller/Controller.d.ts +20 -33
- package/lib/controller/Controller.d.ts.map +1 -1
- package/lib/controller/Controller.js +26 -42
- package/lib/controller/createSet.d.ts.map +1 -1
- package/lib/controller/createSet.js +3 -2
- package/lib/controller/ensurePojo.d.ts +3 -0
- package/lib/controller/ensurePojo.d.ts.map +1 -0
- package/lib/controller/ensurePojo.js +7 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/internal.d.ts +1 -1
- package/lib/internal.d.ts.map +1 -1
- package/lib/internal.js +2 -2
- package/lib/manager/DevtoolsManager.js +3 -3
- package/lib/manager/NetworkManager.d.ts +6 -6
- package/lib/manager/NetworkManager.d.ts.map +1 -1
- package/lib/manager/NetworkManager.js +11 -11
- package/lib/manager/SubscriptionManager.d.ts +5 -5
- package/lib/manager/SubscriptionManager.js +6 -6
- package/lib/manager/applyManager.d.ts.map +1 -1
- package/lib/manager/applyManager.js +2 -9
- package/lib/middlewareTypes.d.ts +2 -5
- package/lib/middlewareTypes.d.ts.map +1 -1
- package/lib/middlewareTypes.js +1 -1
- package/lib/next/index.d.ts +0 -2
- package/lib/next/index.d.ts.map +1 -1
- package/lib/next/index.js +2 -3
- package/lib/state/reducer/expireReducer.d.ts +1 -1
- package/lib/state/reducer/fetchReducer.js +5 -5
- package/lib/state/reducer/invalidateReducer.d.ts +1 -1
- package/lib/state/reducer/setReducer.d.ts +2 -2
- package/lib/state/reducer/setReducer.d.ts.map +1 -1
- package/lib/state/reducer/setReducer.js +2 -2
- package/lib/types.d.ts +3 -4
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +3 -4
- package/package.json +3 -3
- package/src/actionTypes.ts +10 -12
- package/src/{newActions.ts → actions.ts} +1 -6
- package/src/controller/Controller.ts +27 -55
- package/src/controller/createSet.ts +2 -1
- package/src/controller/ensurePojo.ts +11 -0
- package/src/index.ts +1 -1
- package/src/internal.ts +1 -1
- package/src/manager/DevtoolsManager.ts +2 -2
- package/src/manager/NetworkManager.ts +10 -10
- package/src/manager/SubscriptionManager.ts +5 -5
- package/src/manager/__tests__/__snapshots__/pollingSubscription.ts.snap +2 -2
- package/src/manager/__tests__/logoutManager.ts +2 -2
- package/src/manager/__tests__/manager.ts +1 -1
- package/src/manager/__tests__/networkManager.ts +13 -16
- package/src/manager/applyManager.ts +1 -6
- package/src/middlewareTypes.ts +4 -9
- package/src/next/index.ts +0 -2
- package/src/state/__tests__/__snapshots__/reducer.ts.snap +1 -1
- package/src/state/__tests__/reducer.ts +27 -9
- package/src/state/reducer/fetchReducer.ts +5 -5
- package/src/state/reducer/setReducer.ts +5 -5
- package/src/types.ts +3 -4
- package/ts3.4/actionTypes.d.ts +10 -12
- package/ts3.4/{newActions.d.ts → actions.d.ts} +1 -3
- package/ts3.4/controller/Controller.d.ts +20 -39
- package/ts3.4/controller/ensurePojo.d.ts +3 -0
- package/ts3.4/index.d.ts +1 -1
- package/ts3.4/internal.d.ts +1 -1
- package/ts3.4/manager/NetworkManager.d.ts +6 -6
- package/ts3.4/manager/SubscriptionManager.d.ts +5 -5
- package/ts3.4/middlewareTypes.d.ts +2 -5
- package/ts3.4/next/index.d.ts +0 -2
- package/ts3.4/state/reducer/expireReducer.d.ts +1 -1
- package/ts3.4/state/reducer/invalidateReducer.d.ts +1 -1
- package/ts3.4/state/reducer/setReducer.d.ts +2 -2
- package/ts3.4/types.d.ts +3 -5
- package/legacy/fsa.js +0 -2
- package/legacy/newActions.js +0 -2
- package/lib/fsa.d.ts +0 -41
- package/lib/fsa.d.ts.map +0 -1
- package/lib/fsa.js +0 -2
- package/lib/newActions.d.ts.map +0 -1
- package/lib/newActions.js +0 -2
- package/src/fsa.ts +0 -99
- package/ts3.4/fsa.d.ts +0 -41
|
@@ -10,14 +10,14 @@ interface ConstructorProps<D extends GenericDispatch = DataClientDispatch> {
|
|
|
10
10
|
globalCache?: DenormalizeCache;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Imperative control of
|
|
14
|
-
* @see https://
|
|
13
|
+
* Imperative control of Reactive Data Client store
|
|
14
|
+
* @see https://dataclient.io/docs/api/Controller
|
|
15
15
|
*/
|
|
16
16
|
export default class Controller<D extends GenericDispatch = DataClientDispatch> {
|
|
17
17
|
/**
|
|
18
|
-
* Dispatches an action to
|
|
18
|
+
* Dispatches an action to Reactive Data Client reducer.
|
|
19
19
|
*
|
|
20
|
-
* @see https://
|
|
20
|
+
* @see https://dataclient.io/docs/api/Controller#dispatch
|
|
21
21
|
*/
|
|
22
22
|
readonly dispatch: D;
|
|
23
23
|
/**
|
|
@@ -25,15 +25,15 @@ export default class Controller<D extends GenericDispatch = DataClientDispatch>
|
|
|
25
25
|
*
|
|
26
26
|
* This can be useful for imperative use-cases like event handlers.
|
|
27
27
|
* This should *not* be used to render; instead useSuspense() or useCache()
|
|
28
|
-
* @see https://
|
|
28
|
+
* @see https://dataclient.io/docs/api/Controller#getState
|
|
29
29
|
*/
|
|
30
30
|
readonly getState: () => State<unknown>;
|
|
31
31
|
readonly globalCache: DenormalizeCache;
|
|
32
32
|
constructor({ dispatch, getState, globalCache, }?: ConstructorProps<D>);
|
|
33
33
|
/*************** Action Dispatchers ***************/
|
|
34
34
|
/**
|
|
35
|
-
* Fetches the endpoint with given args, updating the
|
|
36
|
-
* @see https://
|
|
35
|
+
* Fetches the endpoint with given args, updating the Reactive Data Client cache with the response or error upon completion.
|
|
36
|
+
* @see https://dataclient.io/docs/api/Controller#fetch
|
|
37
37
|
*/
|
|
38
38
|
fetch: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined> & {
|
|
39
39
|
update?: EndpointUpdateFunction<E> | undefined;
|
|
@@ -47,12 +47,12 @@ export default class Controller<D extends GenericDispatch = DataClientDispatch>
|
|
|
47
47
|
}>(endpoint: E, ...args_0: Parameters<E>) => E["schema"] extends null | undefined ? ReturnType<E> | ResolveType<E> : Denormalize<E["schema"]> | Promise<Denormalize<E["schema"]>>;
|
|
48
48
|
/**
|
|
49
49
|
* Forces refetching and suspense on useSuspense with the same Endpoint and parameters.
|
|
50
|
-
* @see https://
|
|
50
|
+
* @see https://dataclient.io/docs/api/Controller#invalidate
|
|
51
51
|
*/
|
|
52
52
|
invalidate: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined>>(endpoint: E, ...args: readonly [...Parameters<E>] | readonly [null]) => Promise<void>;
|
|
53
53
|
/**
|
|
54
54
|
* Forces refetching and suspense on useSuspense on all matching endpoint result keys.
|
|
55
|
-
* @see https://
|
|
55
|
+
* @see https://dataclient.io/docs/api/Controller#invalidateAll
|
|
56
56
|
* @returns Promise that resolves when invalidation is commited.
|
|
57
57
|
*/
|
|
58
58
|
invalidateAll: (options: {
|
|
@@ -67,40 +67,27 @@ export default class Controller<D extends GenericDispatch = DataClientDispatch>
|
|
|
67
67
|
testKey: (key: string) => boolean;
|
|
68
68
|
}) => Promise<void>;
|
|
69
69
|
/**
|
|
70
|
-
* Resets the entire
|
|
71
|
-
* @see https://
|
|
70
|
+
* Resets the entire Reactive Data Client cache. All inflight requests will not resolve.
|
|
71
|
+
* @see https://dataclient.io/docs/api/Controller#resetEntireStore
|
|
72
72
|
*/
|
|
73
73
|
resetEntireStore: () => Promise<void>;
|
|
74
74
|
/**
|
|
75
75
|
* Stores response in cache for given Endpoint and args.
|
|
76
|
-
* @see https://
|
|
76
|
+
* @see https://dataclient.io/docs/api/Controller#set
|
|
77
77
|
*/
|
|
78
78
|
setResponse: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined> & {
|
|
79
79
|
update?: EndpointUpdateFunction<E> | undefined;
|
|
80
80
|
}>(endpoint: E, ...rest: readonly [...Parameters<E>, any]) => Promise<void>;
|
|
81
|
-
/**
|
|
82
|
-
* @deprecated use https://resthooks.io/docs/api/Controller#setResponse instead
|
|
83
|
-
*/
|
|
84
|
-
receive: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined> & {
|
|
85
|
-
update?: EndpointUpdateFunction<E> | undefined;
|
|
86
|
-
}>(endpoint: E, ...rest: readonly [...Parameters<E>, any]) => Promise<void>;
|
|
87
81
|
/**
|
|
88
82
|
* Stores the result of Endpoint and args as the error provided.
|
|
89
|
-
* @see https://
|
|
83
|
+
* @see https://dataclient.io/docs/api/Controller#setError
|
|
90
84
|
*/
|
|
91
85
|
setError: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined> & {
|
|
92
86
|
update?: EndpointUpdateFunction<E> | undefined;
|
|
93
87
|
}>(endpoint: E, ...rest: readonly [...Parameters<E>, Error]) => Promise<void>;
|
|
94
|
-
/**
|
|
95
|
-
* Another name for setError
|
|
96
|
-
* @deprecated use https://resthooks.io/docs/api/Controller#setError instead
|
|
97
|
-
*/
|
|
98
|
-
receiveError: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined> & {
|
|
99
|
-
update?: EndpointUpdateFunction<E> | undefined;
|
|
100
|
-
}>(endpoint: E, ...rest: readonly [...Parameters<E>, Error]) => Promise<void>;
|
|
101
88
|
/**
|
|
102
89
|
* Resolves an inflight fetch. `fetchedAt` should `fetch`'s `createdAt`
|
|
103
|
-
* @see https://
|
|
90
|
+
* @see https://dataclient.io/docs/api/Controller#resolve
|
|
104
91
|
*/
|
|
105
92
|
resolve: <E extends EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined> & {
|
|
106
93
|
update?: EndpointUpdateFunction<E> | undefined;
|
|
@@ -117,28 +104,28 @@ export default class Controller<D extends GenericDispatch = DataClientDispatch>
|
|
|
117
104
|
}) => Promise<void>;
|
|
118
105
|
/**
|
|
119
106
|
* Marks a new subscription to a given Endpoint.
|
|
120
|
-
* @see https://
|
|
107
|
+
* @see https://dataclient.io/docs/api/Controller#subscribe
|
|
121
108
|
*/
|
|
122
109
|
subscribe: <E extends EndpointInterface<FetchFunction, Schema | undefined, false | undefined>>(endpoint: E, ...args: readonly [null] | readonly [...Parameters<E>]) => Promise<void>;
|
|
123
110
|
/**
|
|
124
111
|
* Marks completion of subscription to a given Endpoint.
|
|
125
|
-
* @see https://
|
|
112
|
+
* @see https://dataclient.io/docs/api/Controller#unsubscribe
|
|
126
113
|
*/
|
|
127
114
|
unsubscribe: <E extends EndpointInterface<FetchFunction, Schema | undefined, false | undefined>>(endpoint: E, ...args: readonly [null] | readonly [...Parameters<E>]) => Promise<void>;
|
|
128
115
|
/*************** More ***************/
|
|
129
116
|
/**
|
|
130
|
-
* Gets a snapshot (https://
|
|
131
|
-
* @see https://
|
|
117
|
+
* Gets a snapshot (https://dataclient.io/docs/api/Snapshot)
|
|
118
|
+
* @see https://dataclient.io/docs/api/Controller#snapshot
|
|
132
119
|
*/
|
|
133
120
|
snapshot: (state: State<unknown>, fetchedAt?: number) => SnapshotInterface;
|
|
134
121
|
/**
|
|
135
122
|
* Gets the error, if any, for a given endpoint. Returns undefined for no errors.
|
|
136
|
-
* @see https://
|
|
123
|
+
* @see https://dataclient.io/docs/api/Controller#getError
|
|
137
124
|
*/
|
|
138
125
|
getError: <E extends Pick<EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined>, "key">, Args extends readonly [null] | readonly [...Parameters<E["key"]>]>(endpoint: E, ...rest: [...Args, State<unknown>]) => ErrorTypes | undefined;
|
|
139
126
|
/**
|
|
140
127
|
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
|
|
141
|
-
* @see https://
|
|
128
|
+
* @see https://dataclient.io/docs/api/Controller#getResponse
|
|
142
129
|
*/
|
|
143
130
|
getResponse: <E extends Pick<EndpointInterface<FetchFunction, Schema | undefined, boolean | undefined>, "schema" | "key" | "invalidIfStale">, Args extends readonly [null] | readonly [...Parameters<E["key"]>]>(endpoint: E, ...rest: [...Args, State<unknown>]) => {
|
|
144
131
|
data: DenormalizeNullable<E["schema"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controller.d.ts","sourceRoot":"","sources":["../../src/controller/Controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,mBAAmB,EAKpB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Controller.d.ts","sourceRoot":"","sources":["../../src/controller/Controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,EACN,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,mBAAmB,EAKpB,MAAM,wBAAwB,CAAC;AAchC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvE,UAAU,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,kBAAkB;IACvE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAcD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU,CAC7B,CAAC,SAAS,eAAe,GAAG,kBAAkB;IAE9C;;;;OAIG;IACH,SAAiB,QAAQ,EAAE,CAAC,CAAC;IAC7B;;;;;;OAMG;IACH,SAAiB,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,SAAiB,WAAW,EAAE,gBAAgB,CAAC;gBAEnC,EACV,QAA+B,EAC/B,QAAqB,EACrB,WAGC,GACF,GAAE,gBAAgB,CAAC,CAAC,CAAM;IAM3B,oDAAoD;IAEpD;;;OAGG;IACH,KAAK;;0IAmBH;IAEF;;;OAGG;IACH,YAAY;;sLAgBV;IAEF;;;OAGG;IACH,UAAU,gKAGP,QAAQ,IAAI,CAAC,CAOQ;IAExB;;;;OAIG;IACH,aAAa;uBAA8B,MAAM,KAAK,OAAO;wBACe;IAE5E;;;;OAIG;IACH,SAAS;uBAA8B,MAAM,KAAK,OAAO;wBACe;IAExE;;;OAGG;IACH,gBAAgB,QAAO,QAAQ,IAAI,CAAC,CAAiC;IAErE;;;OAGG;IACH,WAAW;;kEAOR,QAAQ,IAAI,CAAC,CAOd;IAEF;;;OAGG;IACH,QAAQ;;oEAOL,QAAQ,IAAI,CAAC,CAQd;IAEF;;;OAGG;IACH,OAAO;;;;kBASW,KAAK;mBACJ,MAAM;eACV,IAAI;;;kBAID,GAAG;mBACF,MAAM;;UAGtB,QAAQ,IAAI,CAAC,CAEd;IAEF;;;OAGG;IACH,SAAS,8JASN,QAAQ,IAAI,CAAC,CAOQ;IAExB;;;OAGG;IACH,WAAW,8JASR,QAAQ,IAAI,CAAC,CAOQ;IAExB,sCAAsC;IAStC;;;OAGG;IACH,QAAQ,UAAW,MAAM,OAAO,CAAC,cAAc,MAAM,KAAG,iBAAiB,CAEvE;IAEF;;;OAGG;IACH,QAAQ,4NAML,UAAU,GAAG,SAAS,CAavB;IAEF;;;OAGG;IACH,WAAW;;sBAQK,YAAY;mBACf,MAAM;MAoFjB;CACH;AA4CD,YAAY,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -7,6 +7,7 @@ import createInvalidateAll from './createInvalidateAll.js';
|
|
|
7
7
|
import createReset from './createReset.js';
|
|
8
8
|
import createSet from './createSet.js';
|
|
9
9
|
import { createUnsubscription, createSubscription } from './createSubscription.js';
|
|
10
|
+
import ensurePojo from './ensurePojo.js';
|
|
10
11
|
import { initialState } from '../state/reducer/createReducer.js';
|
|
11
12
|
import selectMeta from '../state/selectMeta.js';
|
|
12
13
|
const unsetDispatch = action => {
|
|
@@ -19,14 +20,14 @@ const unsetState = () => {
|
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
|
-
* Imperative control of
|
|
23
|
-
* @see https://
|
|
23
|
+
* Imperative control of Reactive Data Client store
|
|
24
|
+
* @see https://dataclient.io/docs/api/Controller
|
|
24
25
|
*/
|
|
25
26
|
export default class Controller {
|
|
26
27
|
/**
|
|
27
|
-
* Dispatches an action to
|
|
28
|
+
* Dispatches an action to Reactive Data Client reducer.
|
|
28
29
|
*
|
|
29
|
-
* @see https://
|
|
30
|
+
* @see https://dataclient.io/docs/api/Controller#dispatch
|
|
30
31
|
*/
|
|
31
32
|
|
|
32
33
|
/**
|
|
@@ -34,7 +35,7 @@ export default class Controller {
|
|
|
34
35
|
*
|
|
35
36
|
* This can be useful for imperative use-cases like event handlers.
|
|
36
37
|
* This should *not* be used to render; instead useSuspense() or useCache()
|
|
37
|
-
* @see https://
|
|
38
|
+
* @see https://dataclient.io/docs/api/Controller#getState
|
|
38
39
|
*/
|
|
39
40
|
|
|
40
41
|
constructor({
|
|
@@ -47,8 +48,8 @@ export default class Controller {
|
|
|
47
48
|
} = {}) {
|
|
48
49
|
/*************** Action Dispatchers ***************/
|
|
49
50
|
/**
|
|
50
|
-
* Fetches the endpoint with given args, updating the
|
|
51
|
-
* @see https://
|
|
51
|
+
* Fetches the endpoint with given args, updating the Reactive Data Client cache with the response or error upon completion.
|
|
52
|
+
* @see https://dataclient.io/docs/api/Controller#fetch
|
|
52
53
|
*/
|
|
53
54
|
this.fetch = (endpoint, ...args) => {
|
|
54
55
|
const action = createFetch(endpoint, {
|
|
@@ -75,14 +76,14 @@ export default class Controller {
|
|
|
75
76
|
};
|
|
76
77
|
/**
|
|
77
78
|
* Forces refetching and suspense on useSuspense with the same Endpoint and parameters.
|
|
78
|
-
* @see https://
|
|
79
|
+
* @see https://dataclient.io/docs/api/Controller#invalidate
|
|
79
80
|
*/
|
|
80
81
|
this.invalidate = (endpoint, ...args) => args[0] !== null ? this.dispatch(createInvalidate(endpoint, {
|
|
81
82
|
args: args
|
|
82
83
|
})) : Promise.resolve();
|
|
83
84
|
/**
|
|
84
85
|
* Forces refetching and suspense on useSuspense on all matching endpoint result keys.
|
|
85
|
-
* @see https://
|
|
86
|
+
* @see https://dataclient.io/docs/api/Controller#invalidateAll
|
|
86
87
|
* @returns Promise that resolves when invalidation is commited.
|
|
87
88
|
*/
|
|
88
89
|
this.invalidateAll = options => this.dispatch(createInvalidateAll(key => options.testKey(key)));
|
|
@@ -93,13 +94,13 @@ export default class Controller {
|
|
|
93
94
|
*/
|
|
94
95
|
this.expireAll = options => this.dispatch(createExpireAll(key => options.testKey(key)));
|
|
95
96
|
/**
|
|
96
|
-
* Resets the entire
|
|
97
|
-
* @see https://
|
|
97
|
+
* Resets the entire Reactive Data Client cache. All inflight requests will not resolve.
|
|
98
|
+
* @see https://dataclient.io/docs/api/Controller#resetEntireStore
|
|
98
99
|
*/
|
|
99
100
|
this.resetEntireStore = () => this.dispatch(createReset());
|
|
100
101
|
/**
|
|
101
102
|
* Stores response in cache for given Endpoint and args.
|
|
102
|
-
* @see https://
|
|
103
|
+
* @see https://dataclient.io/docs/api/Controller#set
|
|
103
104
|
*/
|
|
104
105
|
this.setResponse = (endpoint, ...rest) => {
|
|
105
106
|
const response = rest[rest.length - 1];
|
|
@@ -109,17 +110,9 @@ export default class Controller {
|
|
|
109
110
|
});
|
|
110
111
|
return this.dispatch(action);
|
|
111
112
|
};
|
|
112
|
-
/**
|
|
113
|
-
* @deprecated use https://resthooks.io/docs/api/Controller#setResponse instead
|
|
114
|
-
*/
|
|
115
|
-
/* istanbul ignore next */
|
|
116
|
-
this.receive = (endpoint, ...rest) => {
|
|
117
|
-
/* istanbul ignore next */
|
|
118
|
-
return this.setResponse(endpoint, ...rest);
|
|
119
|
-
};
|
|
120
113
|
/**
|
|
121
114
|
* Stores the result of Endpoint and args as the error provided.
|
|
122
|
-
* @see https://
|
|
115
|
+
* @see https://dataclient.io/docs/api/Controller#setError
|
|
123
116
|
*/
|
|
124
117
|
this.setError = (endpoint, ...rest) => {
|
|
125
118
|
const response = rest[rest.length - 1];
|
|
@@ -130,32 +123,23 @@ export default class Controller {
|
|
|
130
123
|
});
|
|
131
124
|
return this.dispatch(action);
|
|
132
125
|
};
|
|
133
|
-
/**
|
|
134
|
-
* Another name for setError
|
|
135
|
-
* @deprecated use https://resthooks.io/docs/api/Controller#setError instead
|
|
136
|
-
*/
|
|
137
|
-
/* istanbul ignore next */
|
|
138
|
-
this.receiveError = (endpoint, ...rest) => {
|
|
139
|
-
/* istanbul ignore next */
|
|
140
|
-
return this.setError(endpoint, ...rest);
|
|
141
|
-
};
|
|
142
126
|
/**
|
|
143
127
|
* Resolves an inflight fetch. `fetchedAt` should `fetch`'s `createdAt`
|
|
144
|
-
* @see https://
|
|
128
|
+
* @see https://dataclient.io/docs/api/Controller#resolve
|
|
145
129
|
*/
|
|
146
130
|
this.resolve = (endpoint, meta) => {
|
|
147
131
|
return this.dispatch(createSet(endpoint, meta));
|
|
148
132
|
};
|
|
149
133
|
/**
|
|
150
134
|
* Marks a new subscription to a given Endpoint.
|
|
151
|
-
* @see https://
|
|
135
|
+
* @see https://dataclient.io/docs/api/Controller#subscribe
|
|
152
136
|
*/
|
|
153
137
|
this.subscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createSubscription(endpoint, {
|
|
154
138
|
args: args
|
|
155
139
|
})) : Promise.resolve();
|
|
156
140
|
/**
|
|
157
141
|
* Marks completion of subscription to a given Endpoint.
|
|
158
|
-
* @see https://
|
|
142
|
+
* @see https://dataclient.io/docs/api/Controller#unsubscribe
|
|
159
143
|
*/
|
|
160
144
|
this.unsubscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createUnsubscription(endpoint, {
|
|
161
145
|
args: args
|
|
@@ -168,15 +152,15 @@ export default class Controller {
|
|
|
168
152
|
): Promise<void>
|
|
169
153
|
*/
|
|
170
154
|
/**
|
|
171
|
-
* Gets a snapshot (https://
|
|
172
|
-
* @see https://
|
|
155
|
+
* Gets a snapshot (https://dataclient.io/docs/api/Snapshot)
|
|
156
|
+
* @see https://dataclient.io/docs/api/Controller#snapshot
|
|
173
157
|
*/
|
|
174
158
|
this.snapshot = (state, fetchedAt) => {
|
|
175
159
|
return new Snapshot(this, state, fetchedAt);
|
|
176
160
|
};
|
|
177
161
|
/**
|
|
178
162
|
* Gets the error, if any, for a given endpoint. Returns undefined for no errors.
|
|
179
|
-
* @see https://
|
|
163
|
+
* @see https://dataclient.io/docs/api/Controller#getError
|
|
180
164
|
*/
|
|
181
165
|
this.getError = (endpoint, ...rest) => {
|
|
182
166
|
if (rest[0] === null) return;
|
|
@@ -191,12 +175,12 @@ export default class Controller {
|
|
|
191
175
|
};
|
|
192
176
|
/**
|
|
193
177
|
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
|
|
194
|
-
* @see https://
|
|
178
|
+
* @see https://dataclient.io/docs/api/Controller#getResponse
|
|
195
179
|
*/
|
|
196
180
|
this.getResponse = (endpoint, ...rest) => {
|
|
197
181
|
const state = rest[rest.length - 1];
|
|
198
182
|
// this is typescript generics breaking
|
|
199
|
-
const args = rest.slice(0, rest.length - 1);
|
|
183
|
+
const args = rest.slice(0, rest.length - 1).map(ensurePojo);
|
|
200
184
|
const isActive = args.length !== 1 || args[0] !== null;
|
|
201
185
|
const key = isActive ? endpoint.key(...args) : '';
|
|
202
186
|
const cacheResults = isActive ? state.results[key] : undefined;
|
|
@@ -241,7 +225,7 @@ export default class Controller {
|
|
|
241
225
|
expiresAt = entityExpiresAt(paths, state.entityMeta);
|
|
242
226
|
}
|
|
243
227
|
|
|
244
|
-
// https://
|
|
228
|
+
// https://dataclient.io/docs/concepts/expiry-policy#expiry-status
|
|
245
229
|
// we don't track the difference between stale or fresh because that is tied to triggering
|
|
246
230
|
// conditions
|
|
247
231
|
const expiryStatus = meta != null && meta.invalidated || invalidDenormalize && !(meta != null && meta.error) ? ExpiryStatus.Invalid : invalidDenormalize || endpoint.invalidIfStale || invalidResults ? ExpiryStatus.InvalidIfStale : ExpiryStatus.Valid;
|
|
@@ -295,11 +279,11 @@ class Snapshot {
|
|
|
295
279
|
this.controller = void 0;
|
|
296
280
|
this.fetchedAt = void 0;
|
|
297
281
|
/*************** Data Access ***************/
|
|
298
|
-
/** @see https://
|
|
282
|
+
/** @see https://dataclient.io/docs/api/Snapshot#getResponse */
|
|
299
283
|
this.getResponse = (endpoint, ...args) => {
|
|
300
284
|
return this.controller.getResponse(endpoint, ...args, this.state);
|
|
301
285
|
};
|
|
302
|
-
/** @see https://
|
|
286
|
+
/** @see https://dataclient.io/docs/api/Snapshot#getError */
|
|
303
287
|
this.getError = (endpoint, ...args) => {
|
|
304
288
|
return this.controller.getError(endpoint, ...args, this.state);
|
|
305
289
|
};
|
|
@@ -308,4 +292,4 @@ class Snapshot {
|
|
|
308
292
|
this.fetchedAt = fetchedAt;
|
|
309
293
|
}
|
|
310
294
|
}
|
|
311
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXZWFrRW50aXR5TWFwIiwiRXhwaXJ5U3RhdHVzIiwiZGVub3JtYWxpemVDYWNoZWQiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwiaW5mZXJSZXN1bHRzIiwidmFsaWRhdGVJbmZlcmVuY2UiLCJjcmVhdGVFeHBpcmVBbGwiLCJjcmVhdGVGZXRjaCIsImNyZWF0ZUludmFsaWRhdGUiLCJjcmVhdGVJbnZhbGlkYXRlQWxsIiwiY3JlYXRlUmVzZXQiLCJjcmVhdGVTZXQiLCJjcmVhdGVVbnN1YnNjcmlwdGlvbiIsImNyZWF0ZVN1YnNjcmlwdGlvbiIsImluaXRpYWxTdGF0ZSIsInNlbGVjdE1ldGEiLCJ1bnNldERpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJ1bnNldFN0YXRlIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsImdsb2JhbENhY2hlIiwiZW50aXRpZXMiLCJyZXN1bHRzIiwiZmV0Y2giLCJlbmRwb2ludCIsImFyZ3MiLCJzY2hlbWEiLCJtZXRhIiwicHJvbWlzZSIsInRoZW4iLCJpbnB1dCIsImZldGNoSWZTdGFsZSIsImRhdGEiLCJleHBpcmVzQXQiLCJleHBpcnlTdGF0dXMiLCJnZXRSZXNwb25zZSIsIkludmFsaWQiLCJEYXRlIiwibm93IiwiaW52YWxpZGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW52YWxpZGF0ZUFsbCIsIm9wdGlvbnMiLCJrZXkiLCJ0ZXN0S2V5IiwiZXhwaXJlQWxsIiwicmVzZXRFbnRpcmVTdG9yZSIsInNldFJlc3BvbnNlIiwicmVzdCIsInJlc3BvbnNlIiwibGVuZ3RoIiwic2xpY2UiLCJyZWNlaXZlIiwic2V0RXJyb3IiLCJlcnJvciIsInJlY2VpdmVFcnJvciIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwic25hcHNob3QiLCJzdGF0ZSIsImZldGNoZWRBdCIsIlNuYXBzaG90IiwiZ2V0RXJyb3IiLCJ1bmRlZmluZWQiLCJlcnJvclBvbGljeSIsImlzQWN0aXZlIiwiY2FjaGVSZXN1bHRzIiwiaW52YWxpZFJlc3VsdHMiLCJpbmRleGVzIiwiVmFsaWQiLCJJbmZpbml0eSIsInNjaGVtYUhhc0VudGl0eSIsImludmFsaWRhdGVkIiwiaW52YWxpZElmU3RhbGUiLCJJbnZhbGlkSWZTdGFsZSIsInBhdGhzIiwiaW52YWxpZERlbm9ybWFsaXplIiwiZW50aXR5RXhwaXJlc0F0IiwiZW50aXR5TWV0YSIsInBrIiwiX2VudGl0eU1ldGEka2V5IiwiX2VudGl0eU1ldGEka2V5JHBrIiwiZW50aXR5RXhwaXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwibmVzdGVkU2NoZW1hIiwiT2JqZWN0IiwidmFsdWVzIiwic29tZSIsIngiLCJjb250cm9sbGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVycm9yVHlwZXMsXG4gIFNuYXBzaG90SW50ZXJmYWNlLFxuICBEZW5vcm1hbGl6ZUNhY2hlLFxuICBTY2hlbWEsXG4gIERlbm9ybWFsaXplLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmltcG9ydCB7XG4gIFdlYWtFbnRpdHlNYXAsXG4gIEV4cGlyeVN0YXR1cyxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIEZldGNoRnVuY3Rpb24sXG4gIFJlc29sdmVUeXBlLFxuICBEZW5vcm1hbGl6ZU51bGxhYmxlLFxuICBQYXRoLFxuICBkZW5vcm1hbGl6ZUNhY2hlZCxcbiAgaXNFbnRpdHksXG4gIGRlbm9ybWFsaXplLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmltcG9ydCB7IGluZmVyUmVzdWx0cywgdmFsaWRhdGVJbmZlcmVuY2UgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IGNyZWF0ZUV4cGlyZUFsbCBmcm9tICcuL2NyZWF0ZUV4cGlyZUFsbC5qcyc7XG5pbXBvcnQgY3JlYXRlRmV0Y2ggZnJvbSAnLi9jcmVhdGVGZXRjaC5qcyc7XG5pbXBvcnQgY3JlYXRlSW52YWxpZGF0ZSBmcm9tICcuL2NyZWF0ZUludmFsaWRhdGUuanMnO1xuaW1wb3J0IGNyZWF0ZUludmFsaWRhdGVBbGwgZnJvbSAnLi9jcmVhdGVJbnZhbGlkYXRlQWxsLmpzJztcbmltcG9ydCBjcmVhdGVSZXNldCBmcm9tICcuL2NyZWF0ZVJlc2V0LmpzJztcbmltcG9ydCBjcmVhdGVTZXQgZnJvbSAnLi9jcmVhdGVTZXQuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVW5zdWJzY3JpcHRpb24sXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbixcbn0gZnJvbSAnLi9jcmVhdGVTdWJzY3JpcHRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBpbml0aWFsU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9yZWR1Y2VyL2NyZWF0ZVJlZHVjZXIuanMnO1xuaW1wb3J0IHNlbGVjdE1ldGEgZnJvbSAnLi4vc3RhdGUvc2VsZWN0TWV0YS5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblR5cGVzLCBTdGF0ZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgR2VuZXJpY0Rpc3BhdGNoID0gKHZhbHVlOiBhbnkpID0+IFByb21pc2U8dm9pZD47XG5leHBvcnQgdHlwZSBEYXRhQ2xpZW50RGlzcGF0Y2ggPSAodmFsdWU6IEFjdGlvblR5cGVzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5pbnRlcmZhY2UgQ29uc3RydWN0b3JQcm9wczxEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gRGF0YUNsaWVudERpc3BhdGNoPiB7XG4gIGRpc3BhdGNoPzogRDtcbiAgZ2V0U3RhdGU/OiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgZ2xvYmFsQ2FjaGU/OiBEZW5vcm1hbGl6ZUNhY2hlO1xufVxuXG5jb25zdCB1bnNldERpc3BhdGNoID0gKGFjdGlvbjogdW5rbm93bik6IFByb21pc2U8dm9pZD4gPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYERpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuIGAgK1xuICAgICAgYE90aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC5gLFxuICApO1xufTtcbmNvbnN0IHVuc2V0U3RhdGUgPSAoKTogU3RhdGU8dW5rbm93bj4gPT4ge1xuICAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgQ2FjaGVQcm92aWRlclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gaW5pdGlhbFN0YXRlO1xufTtcblxuLyoqXG4gKiBJbXBlcmF0aXZlIGNvbnRyb2wgb2YgUmVzdCBIb29rcyBzdG9yZVxuICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xsZXI8XG4gIEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4+IHtcbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uIHRvIFJlc3QgSG9va3MgcmVkdWNlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI2Rpc3BhdGNoXG4gICAqL1xuICBkZWNsYXJlIHJlYWRvbmx5IGRpc3BhdGNoOiBEO1xuICAvKipcbiAgICogR2V0cyB0aGUgbGF0ZXN0IHN0YXRlIHNuYXBzaG90IHRoYXQgaXMgZnVsbHkgY29tbWl0dGVkLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGltcGVyYXRpdmUgdXNlLWNhc2VzIGxpa2UgZXZlbnQgaGFuZGxlcnMuXG4gICAqIFRoaXMgc2hvdWxkICpub3QqIGJlIHVzZWQgdG8gcmVuZGVyOyBpbnN0ZWFkIHVzZVN1c3BlbnNlKCkgb3IgdXNlQ2FjaGUoKVxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0U3RhdGVcbiAgICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgZ2V0U3RhdGU6ICgpID0+IFN0YXRlPHVua25vd24+O1xuICBkZWNsYXJlIHJlYWRvbmx5IGdsb2JhbENhY2hlOiBEZW5vcm1hbGl6ZUNhY2hlO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkaXNwYXRjaCA9IHVuc2V0RGlzcGF0Y2ggYXMgYW55LFxuICAgIGdldFN0YXRlID0gdW5zZXRTdGF0ZSxcbiAgICBnbG9iYWxDYWNoZSA9IHtcbiAgICAgIGVudGl0aWVzOiB7fSxcbiAgICAgIHJlc3VsdHM6IHt9LFxuICAgIH0sXG4gIH06IENvbnN0cnVjdG9yUHJvcHM8RD4gPSB7fSkge1xuICAgIHRoaXMuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgdGhpcy5nbG9iYWxDYWNoZSA9IGdsb2JhbENhY2hlO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKiBBY3Rpb24gRGlzcGF0Y2hlcnMgKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBlbmRwb2ludCB3aXRoIGdpdmVuIGFyZ3MsIHVwZGF0aW5nIHRoZSBSZXN0IEhvb2tzIGNhY2hlIHdpdGggdGhlIHJlc3BvbnNlIG9yIGVycm9yIHVwb24gY29tcGxldGlvbi5cbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ZldGNoXG4gICAqL1xuICBmZXRjaCA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogRVsnc2NoZW1hJ10gZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsXG4gICAgPyBSZXR1cm5UeXBlPEU+XG4gICAgOiBQcm9taXNlPERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPj4gPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZUZldGNoKGVuZHBvaW50LCB7XG4gICAgICBhcmdzLFxuICAgIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcblxuICAgIGlmIChlbmRwb2ludC5zY2hlbWEpIHtcbiAgICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlLnRoZW4oaW5wdXQgPT5cbiAgICAgICAgZGVub3JtYWxpemUoaW5wdXQsIGVuZHBvaW50LnNjaGVtYSwge30sIGFyZ3MpLFxuICAgICAgKSBhcyBhbnk7XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb24ubWV0YS5wcm9taXNlIGFzIGFueTtcbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyBvbmx5IGlmIGVuZHBvaW50IGlzIGNvbnNpZGVyZWQgJ3N0YWxlJzsgb3RoZXJ3aXNlIHJldHVybnMgdW5kZWZpbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hJZlN0YWxlXG4gICAqL1xuICBmZXRjaElmU3RhbGUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYgeyB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+IH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IEVbJ3NjaGVtYSddIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbFxuICAgID8gUmV0dXJuVHlwZTxFPiB8IFJlc29sdmVUeXBlPEU+XG4gICAgOiBQcm9taXNlPERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPj4gfCBEZW5vcm1hbGl6ZTxFWydzY2hlbWEnXT4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgZXhwaXJlc0F0LCBleHBpcnlTdGF0dXMgfSA9IHRoaXMuZ2V0UmVzcG9uc2UoXG4gICAgICBlbmRwb2ludCxcbiAgICAgIC4uLmFyZ3MsXG4gICAgICB0aGlzLmdldFN0YXRlKCksXG4gICAgKTtcbiAgICBpZiAoZXhwaXJ5U3RhdHVzICE9PSBFeHBpcnlTdGF0dXMuSW52YWxpZCAmJiBEYXRlLm5vdygpIDw9IGV4cGlyZXNBdClcbiAgICAgIHJldHVybiBkYXRhIGFzIGFueTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChlbmRwb2ludCwgLi4uYXJncyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZvcmNlcyByZWZldGNoaW5nIGFuZCBzdXNwZW5zZSBvbiB1c2VTdXNwZW5zZSB3aXRoIHRoZSBzYW1lIEVuZHBvaW50IGFuZCBwYXJhbWV0ZXJzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZVxuICAgKi9cbiAgaW52YWxpZGF0ZSA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbFxuICAgICAgPyB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgIGNyZWF0ZUludmFsaWRhdGUoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugb24gYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbnZhbGlkYXRpb24gaXMgY29tbWl0ZWQuXG4gICAqL1xuICBpbnZhbGlkYXRlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVJbnZhbGlkYXRlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogU2V0cyBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMgdG8gYmUgU1RBTEUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZXhwaXJlQWxsXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV4cGlyeSBpcyBjb21taXRlZC4gKk5PVCogZmV0Y2ggcHJvbWlzZVxuICAgKi9cbiAgZXhwaXJlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVFeHBpcmVBbGwoKGtleTogc3RyaW5nKSA9PiBvcHRpb25zLnRlc3RLZXkoa2V5KSkpO1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVudGlyZSBSZXN0IEhvb2tzIGNhY2hlLiBBbGwgaW5mbGlnaHQgcmVxdWVzdHMgd2lsbCBub3QgcmVzb2x2ZS5cbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc2V0RW50aXJlU3RvcmVcbiAgICovXG4gIHJlc2V0RW50aXJlU3RvcmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlc2V0KCkpO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgcmVzcG9uc2UgaW4gY2FjaGUgZm9yIGdpdmVuIEVuZHBvaW50IGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0XG4gICAqL1xuICBzZXRSZXNwb25zZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIGFueV1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc29sdmVUeXBlPEU+ID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFjdGlvbiA9IGNyZWF0ZVNldChlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzZXRSZXNwb25zZSBpbnN0ZWFkXG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyByZWNlaXZlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgYW55XVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLnNldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5yZXN0KTtcbiAgfTtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSByZXN1bHQgb2YgRW5kcG9pbnQgYW5kIGFyZ3MgYXMgdGhlIGVycm9yIHByb3ZpZGVkLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0RXJyb3JcbiAgICovXG4gIHNldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgRXJyb3JdXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBFcnJvciA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXQoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbm90aGVyIG5hbWUgZm9yIHNldEVycm9yXG4gICAqIEBkZXByZWNhdGVkIHVzZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldEVycm9yIGluc3RlYWRcbiAgICovXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHJlY2VpdmVFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIEVycm9yXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLnNldEVycm9yKGVuZHBvaW50LCAuLi5yZXN0KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW4gaW5mbGlnaHQgZmV0Y2guIGBmZXRjaGVkQXRgIHNob3VsZCBgZmV0Y2hgJ3MgYGNyZWF0ZWRBdGBcbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc29sdmVcbiAgICovXG4gIHJlc29sdmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIG1ldGE6XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IEVycm9yO1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yOiB0cnVlO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IGFueTtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcj86IGZhbHNlO1xuICAgICAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChjcmVhdGVTZXQoZW5kcG9pbnQsIG1ldGEgYXMgYW55KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcmtzIGEgbmV3IHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGxcbiAgICAgID8gdGhpcy5kaXNwYXRjaChcbiAgICAgICAgICBjcmVhdGVTdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjdW5zdWJzY3JpYmVcbiAgICovXG4gIHVuc3Vic2NyaWJlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxcbiAgICAgIEZldGNoRnVuY3Rpb24sXG4gICAgICBTY2hlbWEgfCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQgfCBmYWxzZVxuICAgID4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsXG4gICAgICA/IHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgY3JlYXRlVW5zdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKioqKioqKioqKioqKiogTW9yZSAqKioqKioqKioqKioqKiovXG5cbiAgLyogVE9ETzpcbiAgYWJvcnQgPSA8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogUHJvbWlzZTx2b2lkPlxuICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgc25hcHNob3QgKGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL1NuYXBzaG90KVxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc25hcHNob3RcbiAgICovXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3RJbnRlcmZhY2UgPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVycm9yLCBpZiBhbnksIGZvciBhIGdpdmVuIGVuZHBvaW50LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gZXJyb3JzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0RXJyb3JcbiAgICovXG4gIGdldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogWy4uLkFyZ3MsIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAocmVzdFswXSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBrZXkgPSBlbmRwb2ludC5rZXkoLi4uYXJncyk7XG5cbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBjb25zdCByZXN1bHRzID0gc3RhdGUucmVzdWx0c1trZXldO1xuXG4gICAgaWYgKHJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UmVzcG9uc2VcbiAgICovXG4gIGdldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogWy4uLkFyZ3MsIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH0gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0gIT09IG51bGw7XG4gICAgY29uc3Qga2V5ID0gaXNBY3RpdmUgPyBlbmRwb2ludC5rZXkoLi4uYXJncykgOiAnJztcbiAgICBjb25zdCBjYWNoZVJlc3VsdHMgPSBpc0FjdGl2ZSA/IHN0YXRlLnJlc3VsdHNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzY2hlbWEgPSBlbmRwb2ludC5zY2hlbWE7XG4gICAgY29uc3QgbWV0YSA9IHNlbGVjdE1ldGEoc3RhdGUsIGtleSk7XG4gICAgbGV0IGV4cGlyZXNBdCA9IG1ldGE/LmV4cGlyZXNBdDtcblxuICAgIGxldCBpbnZhbGlkUmVzdWx0cyA9IGZhbHNlO1xuICAgIGxldCByZXN1bHRzO1xuICAgIGlmIChjYWNoZVJlc3VsdHMgPT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5zY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0cyA9IGluZmVyUmVzdWx0cyhcbiAgICAgICAgZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgICk7XG4gICAgICBpbnZhbGlkUmVzdWx0cyA9ICF2YWxpZGF0ZUluZmVyZW5jZShyZXN1bHRzKTtcbiAgICAgIGlmICghZXhwaXJlc0F0ICYmIGludmFsaWRSZXN1bHRzKSBleHBpcmVzQXQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gY2FjaGVSZXN1bHRzO1xuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3VsdHMgYXMgYW55LFxuICAgICAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cy5WYWxpZCxcbiAgICAgICAgZXhwaXJlc0F0OiBJbmZpbml0eSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFlbmRwb2ludC5zY2hlbWEgfHwgIXNjaGVtYUhhc0VudGl0eShlbmRwb2ludC5zY2hlbWEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiByZXN1bHRzLFxuICAgICAgICBleHBpcnlTdGF0dXM6IG1ldGE/LmludmFsaWRhdGVkXG4gICAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgICAgIDogY2FjaGVSZXN1bHRzICYmICFlbmRwb2ludC5pbnZhbGlkSWZTdGFsZVxuICAgICAgICAgID8gRXhwaXJ5U3RhdHVzLlZhbGlkXG4gICAgICAgICAgOiBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGUsXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0IHx8IDAsXG4gICAgICB9IGFzIHtcbiAgICAgICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdsb2JhbENhY2hlLnJlc3VsdHNba2V5XSlcbiAgICAgIHRoaXMuZ2xvYmFsQ2FjaGUucmVzdWx0c1trZXldID0gbmV3IFdlYWtFbnRpdHlNYXAoKTtcblxuICAgIC8vIHNlY29uZCBhcmd1bWVudCBpcyBmYWxzZSBpZiBhbnkgZW50aXRpZXMgYXJlIG1pc3NpbmdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gZGVub3JtYWxpemVDYWNoZWQoXG4gICAgICByZXN1bHRzLFxuICAgICAgc2NoZW1hLFxuICAgICAgc3RhdGUuZW50aXRpZXMsXG4gICAgICB0aGlzLmdsb2JhbENhY2hlLmVudGl0aWVzLFxuICAgICAgdGhpcy5nbG9iYWxDYWNoZS5yZXN1bHRzW2tleV0sXG4gICAgICBhcmdzLFxuICAgICkgYXMgeyBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjsgcGF0aHM6IFBhdGhbXSB9O1xuICAgIGNvbnN0IGludmFsaWREZW5vcm1hbGl6ZSA9IHR5cGVvZiBkYXRhID09PSAnc3ltYm9sJztcblxuICAgIC8vIGZhbGxiYWNrIHRvIGVudGl0eSBleHBpcnkgdGltZVxuICAgIGlmICghZXhwaXJlc0F0KSB7XG4gICAgICBleHBpcmVzQXQgPSBlbnRpdHlFeHBpcmVzQXQocGF0aHMsIHN0YXRlLmVudGl0eU1ldGEpO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvY29uY2VwdHMvZXhwaXJ5LXBvbGljeSNleHBpcnktc3RhdHVzXG4gICAgLy8gd2UgZG9uJ3QgdHJhY2sgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFsZSBvciBmcmVzaCBiZWNhdXNlIHRoYXQgaXMgdGllZCB0byB0cmlnZ2VyaW5nXG4gICAgLy8gY29uZGl0aW9uc1xuICAgIGNvbnN0IGV4cGlyeVN0YXR1cyA9XG4gICAgICBtZXRhPy5pbnZhbGlkYXRlZCB8fCAoaW52YWxpZERlbm9ybWFsaXplICYmICFtZXRhPy5lcnJvcilcbiAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgICA6IGludmFsaWREZW5vcm1hbGl6ZSB8fCBlbmRwb2ludC5pbnZhbGlkSWZTdGFsZSB8fCBpbnZhbGlkUmVzdWx0c1xuICAgICAgICA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZVxuICAgICAgICA6IEV4cGlyeVN0YXR1cy5WYWxpZDtcblxuICAgIHJldHVybiB7IGRhdGEsIGV4cGlyeVN0YXR1cywgZXhwaXJlc0F0IH07XG4gIH07XG59XG5cbi8vIGJlbmNobWFyazogaHR0cHM6Ly93d3cubWVhc3VyZXRoYXQubmV0L0JlbmNobWFya3MvU2hvdy8yNDY5MS8wL21pbi1yZWR1Y2VyLXZzLWltcGVyYXRpdmUtd2l0aC1wYXRoc1xuLy8gZWFybGllc3QgZXhwaXJ5IGRpY3RhdGVzIGFnZVxuZnVuY3Rpb24gZW50aXR5RXhwaXJlc0F0KFxuICBwYXRoczogUGF0aFtdLFxuICBlbnRpdHlNZXRhOiB7XG4gICAgcmVhZG9ubHkgW2VudGl0eUtleTogc3RyaW5nXToge1xuICAgICAgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyOyAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgQ2FjaGVQcm92aWRlclxuICAgICAgfTtcbiAgICB9O1xuICB9LFxuKSB7XG4gIGxldCBleHBpcmVzQXQgPSBJbmZpbml0eTtcbiAgZm9yIChjb25zdCB7IHBrLCBrZXkgfSBvZiBwYXRocykge1xuICAgIGNvbnN0IGVudGl0eUV4cGlyeSA9IGVudGl0eU1ldGFba2V5XT8uW3BrXT8uZXhwaXJlc0F0O1xuICAgIC8vIGV4cGlyZXNBdCB3aWxsIGFsd2F5cyByZXNvbHZlIHRvIGZhbHNlIHdpdGggYW55IGNvbXBhcmlzb25cbiAgICBpZiAoZW50aXR5RXhwaXJ5IDwgZXhwaXJlc0F0KSBleHBpcmVzQXQgPSBlbnRpdHlFeHBpcnk7XG4gIH1cbiAgcmV0dXJuIGV4cGlyZXNBdDtcbn1cblxuLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlbWEgaGFzIGFueSBlbnRpdGllcy5cbiAqXG4gKiBXaXRob3V0IGVudGl0aWVzLCBkZW5vcm1hbGl6YXRpb24gaXMgbm90IG5lZWRlZCwgYW5kIHJlc3VsdHMgc2hvdWxkIG5vdCBiZSBpbmZlcnJlZC5cbiAqL1xuZnVuY3Rpb24gc2NoZW1hSGFzRW50aXR5KHNjaGVtYTogU2NoZW1hKTogYm9vbGVhbiB7XG4gIGlmIChpc0VudGl0eShzY2hlbWEpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSlcbiAgICByZXR1cm4gc2NoZW1hLmxlbmd0aCAhPT0gMCAmJiBzY2hlbWFIYXNFbnRpdHkoc2NoZW1hWzBdKTtcbiAgaWYgKHNjaGVtYSAmJiAodHlwZW9mIHNjaGVtYSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjb25zdCBuZXN0ZWRTY2hlbWEgPVxuICAgICAgJ3NjaGVtYScgaW4gc2NoZW1hID8gKHNjaGVtYS5zY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgU2NoZW1hPikgOiBzY2hlbWE7XG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRTY2hlbWEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzY2hlbWFIYXNFbnRpdHkobmVzdGVkU2NoZW1hKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMobmVzdGVkU2NoZW1hKS5zb21lKHggPT4gc2NoZW1hSGFzRW50aXR5KHgpKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCB0eXBlIHsgRXJyb3JUeXBlcyB9O1xuXG5jbGFzcyBTbmFwc2hvdDxUID0gdW5rbm93bj4gaW1wbGVtZW50cyBTbmFwc2hvdEludGVyZmFjZSB7XG4gIHByaXZhdGUgc3RhdGU6IFN0YXRlPFQ+O1xuICBwcml2YXRlIGNvbnRyb2xsZXI6IENvbnRyb2xsZXI7XG4gIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsIHN0YXRlOiBTdGF0ZTxUPiwgZmV0Y2hlZEF0ID0gMCkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIHRoaXMuZmV0Y2hlZEF0ID0gZmV0Y2hlZEF0O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKiBEYXRhIEFjY2VzcyAqKioqKioqKioqKioqKiovXG4gIC8qKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFJlc3BvbnNlICovXG4gIGdldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogQXJnc1xuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH0gPT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0UmVzcG9uc2UoZW5kcG9pbnQsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9O1xuXG4gIC8qKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldEVycm9yICovXG4gIGdldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogQXJnc1xuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEVycm9yKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBT0EsU0FDRUEsYUFBYSxFQUNiQyxZQUFZLEVBTVpDLGlCQUFpQixFQUNqQkMsUUFBUSxFQUNSQyxXQUFXLFFBQ04sd0JBQXdCO0FBQy9CLFNBQVNDLFlBQVksRUFBRUMsaUJBQWlCLFFBQVEsd0JBQXdCO0FBRXhFLE9BQU9DLGVBQWUsTUFBTSxzQkFBc0I7QUFDbEQsT0FBT0MsV0FBVyxNQUFNLGtCQUFrQjtBQUMxQyxPQUFPQyxnQkFBZ0IsTUFBTSx1QkFBdUI7QUFDcEQsT0FBT0MsbUJBQW1CLE1BQU0sMEJBQTBCO0FBQzFELE9BQU9DLFdBQVcsTUFBTSxrQkFBa0I7QUFDMUMsT0FBT0MsU0FBUyxNQUFNLGdCQUFnQjtBQUN0QyxTQUNFQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixRQUNiLHlCQUF5QjtBQUVoQyxTQUFTQyxZQUFZLFFBQVEsbUNBQW1DO0FBQ2hFLE9BQU9DLFVBQVUsTUFBTSx3QkFBd0I7QUFZL0MsTUFBTUMsYUFBYSxHQUFJQyxNQUFlLElBQW9CO0VBQ3hELE1BQU0sSUFBSUMsS0FBSyxDQUNaLGlFQUFnRSxHQUM5RCx5REFDTCxDQUFDO0FBQ0gsQ0FBQztBQUNELE1BQU1DLFVBQVUsR0FBR0EsQ0FBQSxLQUFzQjtFQUN2QztFQUNBO0VBQ0EsT0FBT0wsWUFBWTtBQUNyQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFN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
|
|
295
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXZWFrRW50aXR5TWFwIiwiRXhwaXJ5U3RhdHVzIiwiZGVub3JtYWxpemVDYWNoZWQiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwiaW5mZXJSZXN1bHRzIiwidmFsaWRhdGVJbmZlcmVuY2UiLCJjcmVhdGVFeHBpcmVBbGwiLCJjcmVhdGVGZXRjaCIsImNyZWF0ZUludmFsaWRhdGUiLCJjcmVhdGVJbnZhbGlkYXRlQWxsIiwiY3JlYXRlUmVzZXQiLCJjcmVhdGVTZXQiLCJjcmVhdGVVbnN1YnNjcmlwdGlvbiIsImNyZWF0ZVN1YnNjcmlwdGlvbiIsImVuc3VyZVBvam8iLCJpbml0aWFsU3RhdGUiLCJzZWxlY3RNZXRhIiwidW5zZXREaXNwYXRjaCIsImFjdGlvbiIsIkVycm9yIiwidW5zZXRTdGF0ZSIsIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJnbG9iYWxDYWNoZSIsImVudGl0aWVzIiwicmVzdWx0cyIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2UiLCJJbnZhbGlkIiwiRGF0ZSIsIm5vdyIsImludmFsaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImludmFsaWRhdGVBbGwiLCJvcHRpb25zIiwia2V5IiwidGVzdEtleSIsImV4cGlyZUFsbCIsInJlc2V0RW50aXJlU3RvcmUiLCJzZXRSZXNwb25zZSIsInJlc3QiLCJyZXNwb25zZSIsImxlbmd0aCIsInNsaWNlIiwic2V0RXJyb3IiLCJlcnJvciIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwic25hcHNob3QiLCJzdGF0ZSIsImZldGNoZWRBdCIsIlNuYXBzaG90IiwiZ2V0RXJyb3IiLCJ1bmRlZmluZWQiLCJlcnJvclBvbGljeSIsIm1hcCIsImlzQWN0aXZlIiwiY2FjaGVSZXN1bHRzIiwiaW52YWxpZFJlc3VsdHMiLCJpbmRleGVzIiwiVmFsaWQiLCJJbmZpbml0eSIsInNjaGVtYUhhc0VudGl0eSIsImludmFsaWRhdGVkIiwiaW52YWxpZElmU3RhbGUiLCJJbnZhbGlkSWZTdGFsZSIsInBhdGhzIiwiaW52YWxpZERlbm9ybWFsaXplIiwiZW50aXR5RXhwaXJlc0F0IiwiZW50aXR5TWV0YSIsInBrIiwiX2VudGl0eU1ldGEka2V5IiwiX2VudGl0eU1ldGEka2V5JHBrIiwiZW50aXR5RXhwaXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwibmVzdGVkU2NoZW1hIiwiT2JqZWN0IiwidmFsdWVzIiwic29tZSIsIngiLCJjb250cm9sbGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVycm9yVHlwZXMsXG4gIFNuYXBzaG90SW50ZXJmYWNlLFxuICBEZW5vcm1hbGl6ZUNhY2hlLFxuICBTY2hlbWEsXG4gIERlbm9ybWFsaXplLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmltcG9ydCB7XG4gIFdlYWtFbnRpdHlNYXAsXG4gIEV4cGlyeVN0YXR1cyxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIEZldGNoRnVuY3Rpb24sXG4gIFJlc29sdmVUeXBlLFxuICBEZW5vcm1hbGl6ZU51bGxhYmxlLFxuICBQYXRoLFxuICBkZW5vcm1hbGl6ZUNhY2hlZCxcbiAgaXNFbnRpdHksXG4gIGRlbm9ybWFsaXplLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmltcG9ydCB7IGluZmVyUmVzdWx0cywgdmFsaWRhdGVJbmZlcmVuY2UgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IGNyZWF0ZUV4cGlyZUFsbCBmcm9tICcuL2NyZWF0ZUV4cGlyZUFsbC5qcyc7XG5pbXBvcnQgY3JlYXRlRmV0Y2ggZnJvbSAnLi9jcmVhdGVGZXRjaC5qcyc7XG5pbXBvcnQgY3JlYXRlSW52YWxpZGF0ZSBmcm9tICcuL2NyZWF0ZUludmFsaWRhdGUuanMnO1xuaW1wb3J0IGNyZWF0ZUludmFsaWRhdGVBbGwgZnJvbSAnLi9jcmVhdGVJbnZhbGlkYXRlQWxsLmpzJztcbmltcG9ydCBjcmVhdGVSZXNldCBmcm9tICcuL2NyZWF0ZVJlc2V0LmpzJztcbmltcG9ydCBjcmVhdGVTZXQgZnJvbSAnLi9jcmVhdGVTZXQuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVW5zdWJzY3JpcHRpb24sXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbixcbn0gZnJvbSAnLi9jcmVhdGVTdWJzY3JpcHRpb24uanMnO1xuaW1wb3J0IGVuc3VyZVBvam8gZnJvbSAnLi9lbnN1cmVQb2pvLmpzJztcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvcmVkdWNlci9jcmVhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCBzZWxlY3RNZXRhIGZyb20gJy4uL3N0YXRlL3NlbGVjdE1ldGEuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25UeXBlcywgU3RhdGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIEdlbmVyaWNEaXNwYXRjaCA9ICh2YWx1ZTogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IHR5cGUgRGF0YUNsaWVudERpc3BhdGNoID0gKHZhbHVlOiBBY3Rpb25UeXBlcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuaW50ZXJmYWNlIENvbnN0cnVjdG9yUHJvcHM8RCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaD4ge1xuICBkaXNwYXRjaD86IEQ7XG4gIGdldFN0YXRlPzogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIGdsb2JhbENhY2hlPzogRGVub3JtYWxpemVDYWNoZTtcbn1cblxuY29uc3QgdW5zZXREaXNwYXRjaCA9IChhY3Rpb246IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiBgICtcbiAgICAgIGBPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guYCxcbiAgKTtcbn07XG5jb25zdCB1bnNldFN0YXRlID0gKCk6IFN0YXRlPHVua25vd24+ID0+IHtcbiAgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIENhY2hlUHJvdmlkZXJcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5cbi8qKlxuICogSW1wZXJhdGl2ZSBjb250cm9sIG9mIFJlYWN0aXZlIERhdGEgQ2xpZW50IHN0b3JlXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xsZXI8XG4gIEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4+IHtcbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uIHRvIFJlYWN0aXZlIERhdGEgQ2xpZW50IHJlZHVjZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZGlzcGF0Y2hcbiAgICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgZGlzcGF0Y2g6IEQ7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXRlc3Qgc3RhdGUgc25hcHNob3QgdGhhdCBpcyBmdWxseSBjb21taXR0ZWQuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgaW1wZXJhdGl2ZSB1c2UtY2FzZXMgbGlrZSBldmVudCBoYW5kbGVycy5cbiAgICogVGhpcyBzaG91bGQgKm5vdCogYmUgdXNlZCB0byByZW5kZXI7IGluc3RlYWQgdXNlU3VzcGVuc2UoKSBvciB1c2VDYWNoZSgpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0U3RhdGVcbiAgICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgZ2V0U3RhdGU6ICgpID0+IFN0YXRlPHVua25vd24+O1xuICBkZWNsYXJlIHJlYWRvbmx5IGdsb2JhbENhY2hlOiBEZW5vcm1hbGl6ZUNhY2hlO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkaXNwYXRjaCA9IHVuc2V0RGlzcGF0Y2ggYXMgYW55LFxuICAgIGdldFN0YXRlID0gdW5zZXRTdGF0ZSxcbiAgICBnbG9iYWxDYWNoZSA9IHtcbiAgICAgIGVudGl0aWVzOiB7fSxcbiAgICAgIHJlc3VsdHM6IHt9LFxuICAgIH0sXG4gIH06IENvbnN0cnVjdG9yUHJvcHM8RD4gPSB7fSkge1xuICAgIHRoaXMuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgdGhpcy5nbG9iYWxDYWNoZSA9IGdsb2JhbENhY2hlO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKiBBY3Rpb24gRGlzcGF0Y2hlcnMgKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBlbmRwb2ludCB3aXRoIGdpdmVuIGFyZ3MsIHVwZGF0aW5nIHRoZSBSZWFjdGl2ZSBEYXRhIENsaWVudCBjYWNoZSB3aXRoIHRoZSByZXNwb25zZSBvciBlcnJvciB1cG9uIGNvbXBsZXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hcbiAgICovXG4gIGZldGNoID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPiB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiBFWydzY2hlbWEnXSBleHRlbmRzIHVuZGVmaW5lZCB8IG51bGxcbiAgICA/IFJldHVyblR5cGU8RT5cbiAgICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlRmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3MsXG4gICAgfSk7XG4gICAgdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuXG4gICAgaWYgKGVuZHBvaW50LnNjaGVtYSkge1xuICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLnByb21pc2UudGhlbihpbnB1dCA9PlxuICAgICAgICBkZW5vcm1hbGl6ZShpbnB1dCwgZW5kcG9pbnQuc2NoZW1hLCB7fSwgYXJncyksXG4gICAgICApIGFzIGFueTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5tZXRhLnByb21pc2UgYXMgYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9ubHkgaWYgZW5kcG9pbnQgaXMgY29uc2lkZXJlZCAnc3RhbGUnOyBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaElmU3RhbGVcbiAgICovXG4gIGZldGNoSWZTdGFsZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogRVsnc2NoZW1hJ10gZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsXG4gICAgPyBSZXR1cm5UeXBlPEU+IHwgUmVzb2x2ZVR5cGU8RT5cbiAgICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiB8IERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPiA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBleHBpcmVzQXQsIGV4cGlyeVN0YXR1cyB9ID0gdGhpcy5nZXRSZXNwb25zZShcbiAgICAgIGVuZHBvaW50LFxuICAgICAgLi4uYXJncyxcbiAgICAgIHRoaXMuZ2V0U3RhdGUoKSxcbiAgICApO1xuICAgIGlmIChleHBpcnlTdGF0dXMgIT09IEV4cGlyeVN0YXR1cy5JbnZhbGlkICYmIERhdGUubm93KCkgPD0gZXhwaXJlc0F0KVxuICAgICAgcmV0dXJuIGRhdGEgYXMgYW55O1xuICAgIHJldHVybiB0aGlzLmZldGNoKGVuZHBvaW50LCAuLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIHJlZmV0Y2hpbmcgYW5kIHN1c3BlbnNlIG9uIHVzZVN1c3BlbnNlIHdpdGggdGhlIHNhbWUgRW5kcG9pbnQgYW5kIHBhcmFtZXRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZVxuICAgKi9cbiAgaW52YWxpZGF0ZSA9IDxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbFxuICAgICAgPyB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgIGNyZWF0ZUludmFsaWRhdGUoZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugb24gYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ludmFsaWRhdGVBbGxcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW52YWxpZGF0aW9uIGlzIGNvbW1pdGVkLlxuICAgKi9cbiAgaW52YWxpZGF0ZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlSW52YWxpZGF0ZUFsbCgoa2V5OiBzdHJpbmcpID0+IG9wdGlvbnMudGVzdEtleShrZXkpKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgYWxsIG1hdGNoaW5nIGVuZHBvaW50IHJlc3VsdCBrZXlzIHRvIGJlIFNUQUxFLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2V4cGlyZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBleHBpcnkgaXMgY29tbWl0ZWQuICpOT1QqIGZldGNoIHByb21pc2VcbiAgICovXG4gIGV4cGlyZUFsbCA9IChvcHRpb25zOiB7IHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB9KSA9PlxuICAgIHRoaXMuZGlzcGF0Y2goY3JlYXRlRXhwaXJlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBlbnRpcmUgUmVhY3RpdmUgRGF0YSBDbGllbnQgY2FjaGUuIEFsbCBpbmZsaWdodCByZXF1ZXN0cyB3aWxsIG5vdCByZXNvbHZlLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc2V0RW50aXJlU3RvcmVcbiAgICovXG4gIHJlc2V0RW50aXJlU3RvcmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlc2V0KCkpO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgcmVzcG9uc2UgaW4gY2FjaGUgZm9yIGdpdmVuIEVuZHBvaW50IGFuZCBhcmdzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldFxuICAgKi9cbiAgc2V0UmVzcG9uc2UgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNvbHZlVHlwZTxFPiA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXQoZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3M6IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSByZXN1bHQgb2YgRW5kcG9pbnQgYW5kIGFyZ3MgYXMgdGhlIGVycm9yIHByb3ZpZGVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldEVycm9yXG4gICAqL1xuICBzZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIEVycm9yXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogRXJyb3IgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0KGVuZHBvaW50LCB7XG4gICAgICBhcmdzOiByZXN0LnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSkgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZXJyb3I6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW4gaW5mbGlnaHQgZmV0Y2guIGBmZXRjaGVkQXRgIHNob3VsZCBgZmV0Y2hgJ3MgYGNyZWF0ZWRBdGBcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNyZXNvbHZlXG4gICAqL1xuICByZXNvbHZlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICBtZXRhOlxuICAgICAgfCB7XG4gICAgICAgICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgICAgICAgIHJlc3BvbnNlOiBFcnJvcjtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgICAgICAgIHJlc3BvbnNlOiBhbnk7XG4gICAgICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I/OiBmYWxzZTtcbiAgICAgICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goY3JlYXRlU2V0KGVuZHBvaW50LCBtZXRhIGFzIGFueSkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBNYXJrcyBhIG5ldyBzdWJzY3JpcHRpb24gdG8gYSBnaXZlbiBFbmRwb2ludC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzdWJzY3JpYmVcbiAgICovXG4gIHN1YnNjcmliZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U8XG4gICAgICBGZXRjaEZ1bmN0aW9uLFxuICAgICAgU2NoZW1hIHwgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkIHwgZmFsc2VcbiAgICA+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbFxuICAgICAgPyB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgIGNyZWF0ZVN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgICAgYXJnczogYXJncyBhcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIE1hcmtzIGNvbXBsZXRpb24gb2Ygc3Vic2NyaXB0aW9uIHRvIGEgZ2l2ZW4gRW5kcG9pbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjdW5zdWJzY3JpYmVcbiAgICovXG4gIHVuc3Vic2NyaWJlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxcbiAgICAgIEZldGNoRnVuY3Rpb24sXG4gICAgICBTY2hlbWEgfCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQgfCBmYWxzZVxuICAgID4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsXG4gICAgICA/IHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgY3JlYXRlVW5zdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKioqKioqKioqKioqKiogTW9yZSAqKioqKioqKioqKioqKiovXG5cbiAgLyogVE9ETzpcbiAgYWJvcnQgPSA8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogUHJvbWlzZTx2b2lkPlxuICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgc25hcHNob3QgKGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzbmFwc2hvdFxuICAgKi9cbiAgc25hcHNob3QgPSAoc3RhdGU6IFN0YXRlPHVua25vd24+LCBmZXRjaGVkQXQ/OiBudW1iZXIpOiBTbmFwc2hvdEludGVyZmFjZSA9PiB7XG4gICAgcmV0dXJuIG5ldyBTbmFwc2hvdCh0aGlzLCBzdGF0ZSwgZmV0Y2hlZEF0KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgZXJyb3IsIGlmIGFueSwgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQuIFJldHVybnMgdW5kZWZpbmVkIGZvciBubyBlcnJvcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0RXJyb3JcbiAgICovXG4gIGdldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogWy4uLkFyZ3MsIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAocmVzdFswXSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBrZXkgPSBlbmRwb2ludC5rZXkoLi4uYXJncyk7XG5cbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBjb25zdCByZXN1bHRzID0gc3RhdGUucmVzdWx0c1trZXldO1xuXG4gICAgaWYgKHJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFJlc3BvbnNlXG4gICAqL1xuICBnZXRSZXNwb25zZSA9IDxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICAgIEFyZ3MgZXh0ZW5kcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdLFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IFsuLi5BcmdzLCBTdGF0ZTx1bmtub3duPl1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9ID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTx1bmtub3duPjtcbiAgICAvLyB0aGlzIGlzIHR5cGVzY3JpcHQgZ2VuZXJpY3MgYnJlYWtpbmdcbiAgICBjb25zdCBhcmdzOiBhbnkgPSByZXN0XG4gICAgICAuc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKVxuICAgICAgLm1hcChlbnN1cmVQb2pvKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0gIT09IG51bGw7XG4gICAgY29uc3Qga2V5ID0gaXNBY3RpdmUgPyBlbmRwb2ludC5rZXkoLi4uYXJncykgOiAnJztcbiAgICBjb25zdCBjYWNoZVJlc3VsdHMgPSBpc0FjdGl2ZSA/IHN0YXRlLnJlc3VsdHNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzY2hlbWEgPSBlbmRwb2ludC5zY2hlbWE7XG4gICAgY29uc3QgbWV0YSA9IHNlbGVjdE1ldGEoc3RhdGUsIGtleSk7XG4gICAgbGV0IGV4cGlyZXNBdCA9IG1ldGE/LmV4cGlyZXNBdDtcblxuICAgIGxldCBpbnZhbGlkUmVzdWx0cyA9IGZhbHNlO1xuICAgIGxldCByZXN1bHRzO1xuICAgIGlmIChjYWNoZVJlc3VsdHMgPT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5zY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0cyA9IGluZmVyUmVzdWx0cyhcbiAgICAgICAgZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgICk7XG4gICAgICBpbnZhbGlkUmVzdWx0cyA9ICF2YWxpZGF0ZUluZmVyZW5jZShyZXN1bHRzKTtcbiAgICAgIGlmICghZXhwaXJlc0F0ICYmIGludmFsaWRSZXN1bHRzKSBleHBpcmVzQXQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gY2FjaGVSZXN1bHRzO1xuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3VsdHMgYXMgYW55LFxuICAgICAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cy5WYWxpZCxcbiAgICAgICAgZXhwaXJlc0F0OiBJbmZpbml0eSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFlbmRwb2ludC5zY2hlbWEgfHwgIXNjaGVtYUhhc0VudGl0eShlbmRwb2ludC5zY2hlbWEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiByZXN1bHRzLFxuICAgICAgICBleHBpcnlTdGF0dXM6IG1ldGE/LmludmFsaWRhdGVkXG4gICAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgICAgIDogY2FjaGVSZXN1bHRzICYmICFlbmRwb2ludC5pbnZhbGlkSWZTdGFsZVxuICAgICAgICAgID8gRXhwaXJ5U3RhdHVzLlZhbGlkXG4gICAgICAgICAgOiBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGUsXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0IHx8IDAsXG4gICAgICB9IGFzIHtcbiAgICAgICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdsb2JhbENhY2hlLnJlc3VsdHNba2V5XSlcbiAgICAgIHRoaXMuZ2xvYmFsQ2FjaGUucmVzdWx0c1trZXldID0gbmV3IFdlYWtFbnRpdHlNYXAoKTtcblxuICAgIC8vIHNlY29uZCBhcmd1bWVudCBpcyBmYWxzZSBpZiBhbnkgZW50aXRpZXMgYXJlIG1pc3NpbmdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gZGVub3JtYWxpemVDYWNoZWQoXG4gICAgICByZXN1bHRzLFxuICAgICAgc2NoZW1hLFxuICAgICAgc3RhdGUuZW50aXRpZXMsXG4gICAgICB0aGlzLmdsb2JhbENhY2hlLmVudGl0aWVzLFxuICAgICAgdGhpcy5nbG9iYWxDYWNoZS5yZXN1bHRzW2tleV0sXG4gICAgICBhcmdzLFxuICAgICkgYXMgeyBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjsgcGF0aHM6IFBhdGhbXSB9O1xuICAgIGNvbnN0IGludmFsaWREZW5vcm1hbGl6ZSA9IHR5cGVvZiBkYXRhID09PSAnc3ltYm9sJztcblxuICAgIC8vIGZhbGxiYWNrIHRvIGVudGl0eSBleHBpcnkgdGltZVxuICAgIGlmICghZXhwaXJlc0F0KSB7XG4gICAgICBleHBpcmVzQXQgPSBlbnRpdHlFeHBpcmVzQXQocGF0aHMsIHN0YXRlLmVudGl0eU1ldGEpO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2NvbmNlcHRzL2V4cGlyeS1wb2xpY3kjZXhwaXJ5LXN0YXR1c1xuICAgIC8vIHdlIGRvbid0IHRyYWNrIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3RhbGUgb3IgZnJlc2ggYmVjYXVzZSB0aGF0IGlzIHRpZWQgdG8gdHJpZ2dlcmluZ1xuICAgIC8vIGNvbmRpdGlvbnNcbiAgICBjb25zdCBleHBpcnlTdGF0dXMgPVxuICAgICAgbWV0YT8uaW52YWxpZGF0ZWQgfHwgKGludmFsaWREZW5vcm1hbGl6ZSAmJiAhbWV0YT8uZXJyb3IpXG4gICAgICAgID8gRXhwaXJ5U3RhdHVzLkludmFsaWRcbiAgICAgICAgOiBpbnZhbGlkRGVub3JtYWxpemUgfHwgZW5kcG9pbnQuaW52YWxpZElmU3RhbGUgfHwgaW52YWxpZFJlc3VsdHNcbiAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGVcbiAgICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4geyBkYXRhLCBleHBpcnlTdGF0dXMsIGV4cGlyZXNBdCB9O1xuICB9O1xufVxuXG4vLyBiZW5jaG1hcms6IGh0dHBzOi8vd3d3Lm1lYXN1cmV0aGF0Lm5ldC9CZW5jaG1hcmtzL1Nob3cvMjQ2OTEvMC9taW4tcmVkdWNlci12cy1pbXBlcmF0aXZlLXdpdGgtcGF0aHNcbi8vIGVhcmxpZXN0IGV4cGlyeSBkaWN0YXRlcyBhZ2VcbmZ1bmN0aW9uIGVudGl0eUV4cGlyZXNBdChcbiAgcGF0aHM6IFBhdGhbXSxcbiAgZW50aXR5TWV0YToge1xuICAgIHJlYWRvbmx5IFtlbnRpdHlLZXk6IHN0cmluZ106IHtcbiAgICAgIHJlYWRvbmx5IFtwazogc3RyaW5nXToge1xuICAgICAgICByZWFkb25seSBkYXRlOiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBmZXRjaGVkQXQ6IG51bWJlcjsgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIENhY2hlUHJvdmlkZXJcbiAgICAgIH07XG4gICAgfTtcbiAgfSxcbikge1xuICBsZXQgZXhwaXJlc0F0ID0gSW5maW5pdHk7XG4gIGZvciAoY29uc3QgeyBwaywga2V5IH0gb2YgcGF0aHMpIHtcbiAgICBjb25zdCBlbnRpdHlFeHBpcnkgPSBlbnRpdHlNZXRhW2tleV0/Lltwa10/LmV4cGlyZXNBdDtcbiAgICAvLyBleHBpcmVzQXQgd2lsbCBhbHdheXMgcmVzb2x2ZSB0byBmYWxzZSB3aXRoIGFueSBjb21wYXJpc29uXG4gICAgaWYgKGVudGl0eUV4cGlyeSA8IGV4cGlyZXNBdCkgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJ5O1xuICB9XG4gIHJldHVybiBleHBpcmVzQXQ7XG59XG5cbi8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2NoZW1hIGhhcyBhbnkgZW50aXRpZXMuXG4gKlxuICogV2l0aG91dCBlbnRpdGllcywgZGVub3JtYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQsIGFuZCByZXN1bHRzIHNob3VsZCBub3QgYmUgaW5mZXJyZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBwcml2YXRlIHN0YXRlOiBTdGF0ZTxUPjtcbiAgcHJpdmF0ZSBjb250cm9sbGVyOiBDb250cm9sbGVyO1xuICByZWFkb25seSBmZXRjaGVkQXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyOiBDb250cm9sbGVyLCBzdGF0ZTogU3RhdGU8VD4sIGZldGNoZWRBdCA9IDApIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB0aGlzLmZldGNoZWRBdCA9IGZldGNoZWRBdDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogRGF0YSBBY2Nlc3MgKioqKioqKioqKioqKioqL1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0UmVzcG9uc2UgKi9cbiAgZ2V0UmVzcG9uc2UgPSA8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgICBBcmdzIGV4dGVuZHMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiBBcmdzXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRSZXNwb25zZShlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH07XG5cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldEVycm9yICovXG4gIGdldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogQXJnc1xuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEVycm9yKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBT0EsU0FDRUEsYUFBYSxFQUNiQyxZQUFZLEVBTVpDLGlCQUFpQixFQUNqQkMsUUFBUSxFQUNSQyxXQUFXLFFBQ04sd0JBQXdCO0FBQy9CLFNBQVNDLFlBQVksRUFBRUMsaUJBQWlCLFFBQVEsd0JBQXdCO0FBRXhFLE9BQU9DLGVBQWUsTUFBTSxzQkFBc0I7QUFDbEQsT0FBT0MsV0FBVyxNQUFNLGtCQUFrQjtBQUMxQyxPQUFPQyxnQkFBZ0IsTUFBTSx1QkFBdUI7QUFDcEQsT0FBT0MsbUJBQW1CLE1BQU0sMEJBQTBCO0FBQzFELE9BQU9DLFdBQVcsTUFBTSxrQkFBa0I7QUFDMUMsT0FBT0MsU0FBUyxNQUFNLGdCQUFnQjtBQUN0QyxTQUNFQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixRQUNiLHlCQUF5QjtBQUNoQyxPQUFPQyxVQUFVLE1BQU0saUJBQWlCO0FBRXhDLFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsT0FBT0MsVUFBVSxNQUFNLHdCQUF3QjtB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSet.d.ts","sourceRoot":"","sources":["../../src/controller/createSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"createSet.d.ts","sourceRoot":"","sources":["../../src/controller/createSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,aAAa,CAAC;AAEtD,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,CAAC,SAAS,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CACpC,EAED,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE;IACP,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,CAAC;CACb,GACA,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhB,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,CAAC,SAAS,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CACpC,EAED,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE;IACP,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,GACA,SAAS,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import ensurePojo from './ensurePojo.js';
|
|
1
2
|
import { SET_TYPE } from '../actionTypes.js';
|
|
2
3
|
export default function createSet(endpoint, {
|
|
3
4
|
args,
|
|
@@ -13,7 +14,7 @@ export default function createSet(endpoint, {
|
|
|
13
14
|
}
|
|
14
15
|
const now = Date.now();
|
|
15
16
|
const meta = {
|
|
16
|
-
args,
|
|
17
|
+
args: args.map(ensurePojo),
|
|
17
18
|
fetchedAt: fetchedAt != null ? fetchedAt : now,
|
|
18
19
|
date: now,
|
|
19
20
|
expiresAt: now + expiryLength,
|
|
@@ -28,4 +29,4 @@ export default function createSet(endpoint, {
|
|
|
28
29
|
if (error) action.error = true;
|
|
29
30
|
return action;
|
|
30
31
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVQb2pvIiwiU0VUX1RZUEUiLCJjcmVhdGVTZXQiLCJlbmRwb2ludCIsImFyZ3MiLCJmZXRjaGVkQXQiLCJyZXNwb25zZSIsImVycm9yIiwiX2VuZHBvaW50JGVycm9yRXhwaXJ5IiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMIiwiZXhwaXJ5TGVuZ3RoIiwiZXJyb3JFeHBpcnlMZW5ndGgiLCJkYXRhRXhwaXJ5TGVuZ3RoIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiRXJyb3IiLCJub3ciLCJEYXRlIiwibWV0YSIsIm1hcCIsImRhdGUiLCJleHBpcmVzQXQiLCJrZXkiLCJhY3Rpb24iLCJ0eXBlIiwicGF5bG9hZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL2NyZWF0ZVNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlLCBSZXNvbHZlVHlwZSB9IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuL2Vuc3VyZVBvam8uanMnO1xuaW1wb3J0IHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgU0VUX1RZUEUgfSBmcm9tICcuLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNldEFjdGlvbiwgU2V0TWV0YSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU2V0PFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICBvcHRpb25zOiB7XG4gICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgIHJlc3BvbnNlOiBFcnJvcjtcbiAgICBmZXRjaGVkQXQ/OiBudW1iZXI7XG4gICAgZXJyb3I6IHRydWU7XG4gIH0sXG4pOiBTZXRBY3Rpb248RT47XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNldDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgb3B0aW9uczoge1xuICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICByZXNwb25zZTogUmVzb2x2ZVR5cGU8RT47XG4gICAgZmV0Y2hlZEF0PzogbnVtYmVyO1xuICAgIGVycm9yPzogZmFsc2U7XG4gIH0sXG4pOiBTZXRBY3Rpb248RT47XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNldDxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAge1xuICAgIGFyZ3MsXG4gICAgZmV0Y2hlZEF0LFxuICAgIHJlc3BvbnNlLFxuICAgIGVycm9yID0gZmFsc2UsXG4gIH06IHtcbiAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICBmZXRjaGVkQXQ/OiBudW1iZXI7XG4gICAgZXJyb3I/OiBib29sZWFuO1xuICB9LFxuKTogU2V0QWN0aW9uPEU+IHtcbiAgY29uc3QgZXhwaXJ5TGVuZ3RoOiBudW1iZXIgPSBlcnJvclxuICAgID8gZW5kcG9pbnQuZXJyb3JFeHBpcnlMZW5ndGggPz8gMTAwMFxuICAgIDogZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyA2MDAwMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGV4cGlyeUxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IG1ldGE6IFNldE1ldGEgPSB7XG4gICAgYXJnczogYXJncy5tYXAoZW5zdXJlUG9qbyksXG4gICAgZmV0Y2hlZEF0OiBmZXRjaGVkQXQgPz8gbm93LFxuICAgIGRhdGU6IG5vdyxcbiAgICBleHBpcmVzQXQ6IG5vdyArIGV4cGlyeUxlbmd0aCxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgfTtcblxuICBjb25zdCBhY3Rpb246IFNldEFjdGlvbjxFPiA9IHtcbiAgICB0eXBlOiBTRVRfVFlQRSxcbiAgICBwYXlsb2FkOiByZXNwb25zZSxcbiAgICBlbmRwb2ludDogZW5kcG9pbnQsXG4gICAgbWV0YSxcbiAgfTtcbiAgaWYgKGVycm9yKSAoYWN0aW9uIGFzIGFueSkuZXJyb3IgPSB0cnVlO1xuICByZXR1cm4gYWN0aW9uO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPQSxVQUFVLE1BQU0saUJBQWlCO0FBRXhDLFNBQVNDLFFBQVEsUUFBUSxtQkFBbUI7QUErQjVDLGVBQWUsU0FBU0MsU0FBU0EsQ0FLL0JDLFFBQVcsRUFDWDtFQUNFQyxJQUFJO0VBQ0pDLFNBQVM7RUFDVEMsUUFBUTtFQUNSQyxLQUFLLEdBQUc7QUFNVixDQUFDLEVBQ2E7RUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxxQkFBQTtFQUNkLE1BQU1DLFlBQW9CLEdBQUdILEtBQUssSUFBQUMscUJBQUEsR0FDOUJMLFFBQVEsQ0FBQ1EsaUJBQWlCLFlBQUFILHFCQUFBLEdBQUksSUFBSSxJQUFBQyxxQkFBQSxHQUNsQ04sUUFBUSxDQUFDUyxnQkFBZ0IsWUFBQUgscUJBQUEsR0FBSSxLQUFLO0VBQ3RDO0VBQ0EsSUFBSUksT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxhQUFhLElBQUlMLFlBQVksR0FBRyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxJQUFJTSxLQUFLLENBQUMseUNBQXlDLENBQUM7RUFDNUQ7RUFDQSxNQUFNQyxHQUFHLEdBQUdDLElBQUksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7RUFDdEIsTUFBTUUsSUFBYSxHQUFHO0lBQ3BCZixJQUFJLEVBQUVBLElBQUksQ0FBQ2dCLEdBQUcsQ0FBQ3BCLFVBQVUsQ0FBQztJQUMxQkssU0FBUyxFQUFFQSxTQUFTLFdBQVRBLFNBQVMsR0FBSVksR0FBRztJQUMzQkksSUFBSSxFQUFFSixHQUFHO0lBQ1RLLFNBQVMsRUFBRUwsR0FBRyxHQUFHUCxZQUFZO0lBQzdCYSxHQUFHLEVBQUVwQixRQUFRLENBQUNvQixHQUFHLENBQUMsR0FBR25CLElBQUk7RUFDM0IsQ0FBQztFQUVELE1BQU1vQixNQUFvQixHQUFHO0lBQzNCQyxJQUFJLEVBQUV4QixRQUFRO0lBQ2R5QixPQUFPLEVBQUVwQixRQUFRO0lBQ2pCSCxRQUFRLEVBQUVBLFFBQVE7SUFDbEJnQjtFQUNGLENBQUM7RUFDRCxJQUFJWixLQUFLLEVBQUdpQixNQUFNLENBQVNqQixLQUFLLEdBQUcsSUFBSTtFQUN2QyxPQUFPaUIsTUFBTTtBQUNmIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensurePojo.d.ts","sourceRoot":"","sources":["../../src/controller/ensurePojo.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,SAIV,GAAG,QAKS,CAAC;AAC1B,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const ensurePojo =
|
|
2
|
+
// FormData doesn't exist in node
|
|
3
|
+
/* istanbul ignore else we don't run coverage when we test node*/
|
|
4
|
+
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */
|
|
5
|
+
body => body;
|
|
6
|
+
export default ensurePojo;
|
|
7
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVQb2pvIiwiRm9ybURhdGEiLCJib2R5IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvZW5zdXJlUG9qby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZW5zdXJlUG9qbyA9XG4gIC8vIEZvcm1EYXRhIGRvZXNuJ3QgZXhpc3QgaW4gbm9kZVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSB3ZSBkb24ndCBydW4gY292ZXJhZ2Ugd2hlbiB3ZSB0ZXN0IG5vZGUqL1xuICB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnXG4gICAgPyAoYm9keTogYW55KSA9PlxuICAgICAgICBib2R5IGluc3RhbmNlb2YgRm9ybURhdGFcbiAgICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcygoYm9keSBhcyBhbnkpLmVudHJpZXMoKSlcbiAgICAgICAgICA6IGJvZHlcbiAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAoYm9keTogYW55KSA9PiBib2R5O1xuZXhwb3J0IGRlZmF1bHQgZW5zdXJlUG9qbztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxVQUFVO0FBQ3JCO0FBQ0E7QUFDQSxPQUFPQyxRQUFRLEtBQUssV0FBVyxHQUMxQkMsSUFBUyxJQUNSQSxJQUFJLFlBQVlELFFBQVEsR0FDcEJFLE1BQU0sQ0FBQ0MsV0FBVyxDQUFFRixJQUFJLENBQVNHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FDM0NILElBQUksR0FDVjtBQUNDQSxJQUFTLElBQUtBLElBQUk7QUFDekIsZUFBZUYsVUFBVSJ9
|
package/lib/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { default as applyManager } from './manager/applyManager.js';
|
|
|
7
7
|
export { default as Controller } from './controller/Controller.js';
|
|
8
8
|
export type { DataClientDispatch, GenericDispatch, } from './controller/Controller.js';
|
|
9
9
|
export { default as createFetch } from './controller/createFetch.js';
|
|
10
|
-
export { default as
|
|
10
|
+
export { default as createSet } from './controller/createSet.js';
|
|
11
11
|
export * from './controller/types.js';
|
|
12
12
|
export * as actionTypes from './actionTypes.js';
|
|
13
13
|
export * from './types.js';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,UAAU,GACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,IAAI,aAAa,EACxB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EACV,kBAAkB,EAClB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,UAAU,GACX,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,IAAI,aAAa,EACxB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EACV,kBAAkB,EAClB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEjE,cAAc,uBAAuB,CAAC;AACtC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -9,11 +9,11 @@ export { default as createReducer, initialState } from './state/reducer/createRe
|
|
|
9
9
|
export { default as applyManager } from './manager/applyManager.js';
|
|
10
10
|
export { default as Controller } from './controller/Controller.js';
|
|
11
11
|
export { default as createFetch } from './controller/createFetch.js';
|
|
12
|
-
export { default as
|
|
12
|
+
export { default as createSet } from './controller/createSet.js';
|
|
13
13
|
export * from './controller/types.js';
|
|
14
14
|
import * as _actionTypes from './actionTypes.js';
|
|
15
15
|
export { _actionTypes as actionTypes };
|
|
16
16
|
/* istanbul ignore next */
|
|
17
17
|
export * from './types.js';
|
|
18
18
|
export * from './manager/index.js';
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJoYXNPd24iLCJpdCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9JTlRFUk5BTF9fIiwiX19JTlRFUk5BTF9fIiwiRXhwaXJ5U3RhdHVzIiwiZGVmYXVsdCIsIk5ldHdvcmtNYW5hZ2VyIiwiUmVzZXRFcnJvciIsImNyZWF0ZVJlZHVjZXIiLCJpbml0aWFsU3RhdGUiLCJhcHBseU1hbmFnZXIiLCJDb250cm9sbGVyIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVTZXQiLCJfYWN0aW9uVHlwZXMiLCJhY3Rpb25UeXBlcyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJPYmplY3QuaGFzT3duID1cbiAgT2JqZWN0Lmhhc093biB8fFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG4gIH07XG5cbmV4cG9ydCAqIGFzIF9fSU5URVJOQUxfXyBmcm9tICcuL2ludGVybmFsLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgTmV0d29ya0Vycm9yLFxuICBVbmtub3duRXJyb3IsXG4gIEVycm9yVHlwZXMsXG4gIFNjaGVtYSxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIEVudGl0eUludGVyZmFjZSxcbiAgUmVzb2x2ZVR5cGUsXG4gIERlbm9ybWFsaXplQ2FjaGUsXG4gIERlbm9ybWFsaXplTnVsbGFibGUsXG4gIERlbm9ybWFsaXplLFxuICBOb3JtYWxpemUsXG4gIE5vcm1hbGl6ZU51bGxhYmxlLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBFbmRwb2ludEV4dHJhT3B0aW9ucyxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5leHBvcnQgeyBFeHBpcnlTdGF0dXMgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgTmV0d29ya01hbmFnZXIsXG4gIFJlc2V0RXJyb3IsXG59IGZyb20gJy4vbWFuYWdlci9OZXR3b3JrTWFuYWdlci5qcyc7XG5leHBvcnQge1xuICBkZWZhdWx0IGFzIGNyZWF0ZVJlZHVjZXIsXG4gIGluaXRpYWxTdGF0ZSxcbn0gZnJvbSAnLi9zdGF0ZS9yZWR1Y2VyL2NyZWF0ZVJlZHVjZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBseU1hbmFnZXIgfSBmcm9tICcuL21hbmFnZXIvYXBwbHlNYW5hZ2VyLmpzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuZXhwb3J0IHR5cGUge1xuICBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4gIEdlbmVyaWNEaXNwYXRjaCxcbn0gZnJvbSAnLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVGZXRjaCB9IGZyb20gJy4vY29udHJvbGxlci9jcmVhdGVGZXRjaC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVNldCB9IGZyb20gJy4vY29udHJvbGxlci9jcmVhdGVTZXQuanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyb2xsZXIvdHlwZXMuanMnO1xuZXhwb3J0ICogYXMgYWN0aW9uVHlwZXMgZnJvbSAnLi9hY3Rpb25UeXBlcy5qcyc7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21hbmFnZXIvaW5kZXguanMnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxNQUFNLEdBQ1hELE1BQU0sQ0FBQ0MsTUFBTSxJQUNiLDBCQUEyQixTQUFTQSxNQUFNQSxDQUFDQyxFQUFFLEVBQUVDLEdBQUcsRUFBRTtFQUNsRCxPQUFPSCxNQUFNLENBQUNJLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNKLEVBQUUsRUFBRUMsR0FBRyxDQUFDO0FBQ3RELENBQUM7QUFBQyxZQUFBSSxXQUFBLE1BRTBCLGVBQWU7QUFBQSxTQUFBQSxXQUFBLElBQWpDQyxZQUFZO0FBaUJ4QixTQUFTQyxZQUFZLFFBQVEsd0JBQXdCO0FBQ3JELFNBQ0VDLE9BQU8sSUFBSUMsY0FBYyxFQUN6QkMsVUFBVSxRQUNMLDZCQUE2QjtBQUNwQyxTQUNFRixPQUFPLElBQUlHLGFBQWEsRUFDeEJDLFlBQVksUUFDUCxrQ0FBa0M7QUFDekMsU0FBU0osT0FBTyxJQUFJSyxZQUFZLFFBQVEsMkJBQTJCO0FBRW5FLFNBQVNMLE9BQU8sSUFBSU0sVUFBVSxRQUFRLDRCQUE0QjtBQUtsRSxTQUFTTixPQUFPLElBQUlPLFdBQVcsUUFBUSw2QkFBNkI7QUFDcEUsU0FBU1AsT0FBTyxJQUFJUSxTQUFTLFFBQVEsMkJBQTJCO0FBRWhFLGNBQWMsdUJBQXVCO0FBQUMsWUFBQUMsWUFBQSxNQUNULGtCQUFrQjtBQUFBLFNBQUFBLFlBQUEsSUFBbkNDLFdBQVc7QUFDdkI7QUFDQSxjQUFjLFlBQVk7QUFDMUIsY0FBYyxvQkFBb0IifQ==
|