@archont561/qgis-sdk 0.3.0 → 0.4.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/README.md +5 -6
- package/dist/bridge.d.ts +2 -205
- package/dist/bridge.js +3 -4
- package/dist/host.d.ts +2 -157
- package/dist/host.js +48 -430
- package/dist/index.d.ts +54 -93
- package/dist/index.js +727 -26
- package/dist/react.d.ts +28 -108
- package/dist/react.js +34 -16
- package/dist/shared/chunk-2hwva3a3.js +14 -0
- package/dist/shared/chunk-8gawbn19.js +433 -0
- package/dist/shared/chunk-jjx14tgd.d.ts +55 -0
- package/dist/shared/chunk-khemhx86.d.ts +158 -0
- package/dist/shared/chunk-pdj2fxjb.d.ts +17 -0
- package/dist/shared/chunk-tmca1ynt.d.ts +87 -0
- package/dist/shared/chunk-vqyymknv.js +414 -0
- package/dist/shared/chunk-wtv4vt4q.d.ts +280 -0
- package/dist/testing.d.ts +52 -30
- package/dist/testing.js +48 -5
- package/package.json +2 -2
- package/dist/shared/chunk-0fknax6w.js +0 -207
- package/dist/shared/chunk-a7bjgeve.js +0 -422
package/dist/react.d.ts
CHANGED
|
@@ -1,116 +1,26 @@
|
|
|
1
|
+
import { WireTransport2, BridgeClientOptions2, BridgeClient2 } from "./shared/chunk-wtv4vt4q.js";
|
|
2
|
+
import "./shared/chunk-khemhx86.js";
|
|
3
|
+
import { OperationMap2, StreamMap2 } from "./shared/chunk-jjx14tgd.js";
|
|
4
|
+
import { QgisSdkCore2, QgisSdk2 } from "./shared/chunk-tmca1ynt.js";
|
|
5
|
+
import { QgisSdkError2 } from "./shared/chunk-pdj2fxjb.js";
|
|
1
6
|
import { ReactElement, ReactNode } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Base class for expected SDK errors across the bridge boundary.
|
|
4
|
-
*/
|
|
5
|
-
declare class QgisSdkError extends Error {
|
|
6
|
-
readonly code: string;
|
|
7
|
-
constructor(message: string, code?: string);
|
|
8
|
-
}
|
|
9
|
-
/** The kinds of event a stream may carry; only `progress` may be coalesced. */
|
|
10
|
-
type StreamEventKind2 = "data" | "progress" | "state";
|
|
11
|
-
/** Why a subscription stopped. */
|
|
12
|
-
type StreamTerminalKind = "complete" | "error" | "cancelled" | "gap" | "disposed";
|
|
13
|
-
/** One event on a subscription. */
|
|
14
|
-
interface BridgeStreamEvent {
|
|
15
|
-
readonly kind: StreamEventKind2;
|
|
16
|
-
readonly payload: unknown;
|
|
17
|
-
}
|
|
18
|
-
/** The end of a subscription, as the host described it. */
|
|
19
|
-
interface BridgeStreamTerminal {
|
|
20
|
-
readonly kind: StreamTerminalKind;
|
|
21
|
-
readonly message?: string;
|
|
22
|
-
readonly dropped?: number;
|
|
23
|
-
}
|
|
24
|
-
/** The transport a client speaks through; a QWebChannel adapter or a script. */
|
|
25
|
-
interface WireTransport {
|
|
26
|
-
send(message: unknown): void;
|
|
27
|
-
subscribe(listener: (message: unknown) => void): () => void;
|
|
28
|
-
}
|
|
29
|
-
/** Options for {@link BridgeClient}. */
|
|
30
|
-
interface BridgeClientOptions {
|
|
31
|
-
readonly timeoutMs?: number;
|
|
32
|
-
}
|
|
33
|
-
/** Options for one invocation. */
|
|
34
|
-
interface InvokeOptions {
|
|
35
|
-
readonly signal?: AbortSignal;
|
|
36
|
-
}
|
|
37
|
-
/** Callbacks a subscription reports through. */
|
|
38
|
-
interface SubscriptionHandlers {
|
|
39
|
-
readonly onEvent?: (event: BridgeStreamEvent) => void;
|
|
40
|
-
readonly onTerminal?: (terminal: BridgeStreamTerminal) => void;
|
|
41
|
-
}
|
|
42
|
-
/** A live subscription, as the caller holds it. */
|
|
43
|
-
interface BridgeSubscription {
|
|
44
|
-
readonly id: string;
|
|
45
|
-
readonly closed: boolean;
|
|
46
|
-
close(): void;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Correlate invocations with replies over an injected transport.
|
|
50
|
-
*
|
|
51
|
-
* The client never retries: a timeout, an abort and a closed client are three
|
|
52
|
-
* different answers, and each is reported as itself.
|
|
53
|
-
*/
|
|
54
|
-
declare class BridgeClient {
|
|
55
|
-
private readonly transport;
|
|
56
|
-
private readonly timeoutMs;
|
|
57
|
-
private readonly pending;
|
|
58
|
-
private readonly subscriptions;
|
|
59
|
-
private readonly disposals;
|
|
60
|
-
private readonly unsubscribe;
|
|
61
|
-
private counter;
|
|
62
|
-
private closed;
|
|
63
|
-
private unmatched;
|
|
64
|
-
private breaks;
|
|
65
|
-
private lastProtocolError;
|
|
66
|
-
constructor(transport: WireTransport, options?: BridgeClientOptions);
|
|
67
|
-
/** Whether {@link close} has run; a closed client answers nothing. */
|
|
68
|
-
get isClosed(): boolean;
|
|
69
|
-
/** Replies that named no pending call: a late duplicate, or a stray message. */
|
|
70
|
-
get unmatchedReplies(): number;
|
|
71
|
-
/** Number of calls still waiting for a reply. */
|
|
72
|
-
get pendingCalls(): number;
|
|
73
|
-
/**
|
|
74
|
-
* Invoke one operation and settle with its value or with a typed failure.
|
|
75
|
-
*/
|
|
76
|
-
invoke(operation: string, payload?: Readonly<Record<string, unknown>>, options?: InvokeOptions): Promise<unknown>;
|
|
77
|
-
/**
|
|
78
|
-
* Open a subscription and resolve once the host has acknowledged it.
|
|
79
|
-
*
|
|
80
|
-
* Frames are matched to the subscription by id and by sequence; a frame that
|
|
81
|
-
* does not continue the sequence ends the subscription instead of being
|
|
82
|
-
* delivered out of order.
|
|
83
|
-
*/
|
|
84
|
-
subscribe(operation: string, payload?: Readonly<Record<string, unknown>>, handlers?: SubscriptionHandlers, options?: InvokeOptions): Promise<BridgeSubscription>;
|
|
85
|
-
/** Subscriptions still open; a leak check for callers and tests. */
|
|
86
|
-
get activeSubscriptions(): readonly string[];
|
|
87
|
-
/** Frames that did not continue their subscription's sequence. */
|
|
88
|
-
get sequenceBreaks(): number;
|
|
89
|
-
private send;
|
|
90
|
-
/**
|
|
91
|
-
* Refuse further calls, reject what is still pending, and stop listening.
|
|
92
|
-
*/
|
|
93
|
-
close(): void;
|
|
94
|
-
private settle;
|
|
95
|
-
private handle;
|
|
96
|
-
private handleFrame;
|
|
97
|
-
private endSubscription;
|
|
98
|
-
private disposeSubscription;
|
|
99
|
-
/** The last malformed message this client refused, if any. */
|
|
100
|
-
get protocolError(): Error | null;
|
|
101
|
-
}
|
|
102
7
|
/** A hook or provider was used outside the shape it needs. */
|
|
103
|
-
declare class QgisSdkBridgeReactError extends
|
|
8
|
+
declare class QgisSdkBridgeReactError extends QgisSdkError2 {
|
|
104
9
|
constructor(message: string);
|
|
105
10
|
}
|
|
106
|
-
/** Props for {@link BridgeProvider}: exactly one of `client` or `transport`. */
|
|
11
|
+
/** Props for {@link BridgeProvider}: exactly one of `qgis`, `client` or `transport`. */
|
|
107
12
|
interface BridgeProviderProps {
|
|
13
|
+
/**
|
|
14
|
+
* A `QgisSdk` the page built, whatever its schema; the provider shares it
|
|
15
|
+
* and never closes it. `useQgisSdk` hands it back under the page's types.
|
|
16
|
+
*/
|
|
17
|
+
readonly qgis?: QgisSdkCore2<unknown, unknown>;
|
|
108
18
|
/** A client the caller owns; the provider never closes it. */
|
|
109
|
-
readonly client?:
|
|
19
|
+
readonly client?: BridgeClient2;
|
|
110
20
|
/** A transport the provider builds and owns a client for. */
|
|
111
|
-
readonly transport?:
|
|
21
|
+
readonly transport?: WireTransport2;
|
|
112
22
|
/** Options for the owned client; ignored when `client` is given. */
|
|
113
|
-
readonly options?:
|
|
23
|
+
readonly options?: BridgeClientOptions2;
|
|
114
24
|
readonly children?: ReactNode;
|
|
115
25
|
}
|
|
116
26
|
/**
|
|
@@ -126,11 +36,21 @@ interface BridgeProviderProps {
|
|
|
126
36
|
*/
|
|
127
37
|
declare function BridgeProvider(props: BridgeProviderProps): ReactElement;
|
|
128
38
|
/** The client of the nearest {@link BridgeProvider}. */
|
|
129
|
-
declare function useBridgeClient():
|
|
39
|
+
declare function useBridgeClient(): BridgeClient2;
|
|
40
|
+
/**
|
|
41
|
+
* The `QgisSdk` of the nearest {@link BridgeProvider}.
|
|
42
|
+
*
|
|
43
|
+
* The type parameters name the generated `Operations` and `Streams`; they are
|
|
44
|
+
* the caller's claim, the same way the provider's `qgis` prop was the page's.
|
|
45
|
+
*/
|
|
46
|
+
declare function useQgisSdk<
|
|
47
|
+
O = OperationMap2,
|
|
48
|
+
S = StreamMap2
|
|
49
|
+
>(): QgisSdk2<O, S>;
|
|
130
50
|
/**
|
|
131
51
|
* Build a generated operation map once per client: `useOperations(createOperations)`.
|
|
132
52
|
*/
|
|
133
|
-
declare function useOperations<T>(create: (client:
|
|
53
|
+
declare function useOperations<T>(create: (client: BridgeClient2) => T): T;
|
|
134
54
|
/** Where one invocation stands. */
|
|
135
55
|
type OperationState<R> = {
|
|
136
56
|
readonly status: "idle";
|
|
@@ -214,4 +134,4 @@ declare function useStream<
|
|
|
214
134
|
I,
|
|
215
135
|
E
|
|
216
136
|
>(open: Stream<I, E>, input: I | null, handlers?: StreamHandlersLike<E>): StreamState<E>;
|
|
217
|
-
export { BridgeProvider, BridgeProviderProps, Operation, OperationControls, OperationState, QgisSdkBridgeReactError, Stream, StreamHandleLike, StreamHandlersLike, StreamState, StreamTerminalLike, useBridgeClient, useOperation, useOperations, useStream };
|
|
137
|
+
export { BridgeProvider, BridgeProviderProps, Operation, OperationControls, OperationState, QgisSdkBridgeReactError, Stream, StreamHandleLike, StreamHandlersLike, StreamState, StreamTerminalLike, useBridgeClient, useOperation, useOperations, useQgisSdk, useStream };
|
package/dist/react.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
isPlainRecord2
|
|
4
|
-
} from "./shared/chunk-0fknax6w.js";
|
|
5
|
-
import {
|
|
2
|
+
isPlainRecord,
|
|
6
3
|
QgisSdkBridgeAbortedError2,
|
|
7
4
|
BridgeClient2
|
|
8
|
-
} from "./shared/chunk-
|
|
5
|
+
} from "./shared/chunk-8gawbn19.js";
|
|
6
|
+
import {
|
|
7
|
+
QgisSdkError2
|
|
8
|
+
} from "./shared/chunk-2hwva3a3.js";
|
|
9
9
|
|
|
10
10
|
// src/react.ts
|
|
11
11
|
import {
|
|
@@ -25,9 +25,10 @@ class QgisSdkBridgeReactError extends QgisSdkError2 {
|
|
|
25
25
|
}
|
|
26
26
|
var ClientContext = createContext(null);
|
|
27
27
|
function BridgeProvider(props) {
|
|
28
|
-
const { client, transport, options, children } = props;
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
const { qgis, client, transport, options, children } = props;
|
|
29
|
+
const given = [qgis, client, transport].filter((source) => source !== undefined).length;
|
|
30
|
+
if (given !== 1) {
|
|
31
|
+
throw new QgisSdkBridgeReactError("BridgeProvider needs exactly one of qgis, client or transport");
|
|
31
32
|
}
|
|
32
33
|
const timeoutMs = options?.timeoutMs;
|
|
33
34
|
const [owned, setOwned] = useState(null);
|
|
@@ -42,15 +43,31 @@ function BridgeProvider(props) {
|
|
|
42
43
|
setOwned((current) => current === live ? null : current);
|
|
43
44
|
};
|
|
44
45
|
}, [transport, timeoutMs]);
|
|
45
|
-
const value =
|
|
46
|
+
const value = useMemo(() => {
|
|
47
|
+
if (qgis !== undefined) {
|
|
48
|
+
return { client: qgis.client, qgis };
|
|
49
|
+
}
|
|
50
|
+
const live = client ?? owned;
|
|
51
|
+
return live === null ? null : { client: live, qgis: null };
|
|
52
|
+
}, [qgis, client, owned]);
|
|
46
53
|
return createElement(ClientContext.Provider, { value }, value === null ? null : children);
|
|
47
54
|
}
|
|
55
|
+
function useShared(hook) {
|
|
56
|
+
const shared = useContext(ClientContext);
|
|
57
|
+
if (shared === null) {
|
|
58
|
+
throw new QgisSdkBridgeReactError(`${hook} needs a BridgeProvider above it`);
|
|
59
|
+
}
|
|
60
|
+
return shared;
|
|
61
|
+
}
|
|
48
62
|
function useBridgeClient() {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
63
|
+
return useShared("useBridgeClient").client;
|
|
64
|
+
}
|
|
65
|
+
function useQgisSdk() {
|
|
66
|
+
const shared = useShared("useQgisSdk");
|
|
67
|
+
if (shared.qgis === null) {
|
|
68
|
+
throw new QgisSdkBridgeReactError("useQgisSdk needs a BridgeProvider given a qgis instance");
|
|
52
69
|
}
|
|
53
|
-
return
|
|
70
|
+
return shared.qgis;
|
|
54
71
|
}
|
|
55
72
|
function useOperations(create) {
|
|
56
73
|
const client = useBridgeClient();
|
|
@@ -120,7 +137,7 @@ var IDLE_STREAM = Object.freeze({
|
|
|
120
137
|
error: null
|
|
121
138
|
});
|
|
122
139
|
function stableKey(value) {
|
|
123
|
-
return JSON.stringify(value, (_key, item) =>
|
|
140
|
+
return JSON.stringify(value, (_key, item) => isPlainRecord(item) ? Object.fromEntries(Object.entries(item).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) : item);
|
|
124
141
|
}
|
|
125
142
|
function useStream(open, input, handlers = {}) {
|
|
126
143
|
const [state, setState] = useState(IDLE_STREAM);
|
|
@@ -189,8 +206,9 @@ export {
|
|
|
189
206
|
useBridgeClient,
|
|
190
207
|
useOperation,
|
|
191
208
|
useOperations,
|
|
209
|
+
useQgisSdk,
|
|
192
210
|
useStream
|
|
193
211
|
};
|
|
194
212
|
|
|
195
|
-
//# debugId=
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3JlYWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogVGhpbiBSZWFjdCBiaW5kaW5ncyBvdmVyIHRoZSBicmlkZ2UgY2xpZW50IChUQVNLLTE4LCBkZWNpc2lvbi0xOCkuXG4gKlxuICogVGhpcyBlbnRyeSBwb2ludCBpcyBvcHRpb25hbCBhbmQgaXMgdGhlIG9ubHkgb25lIHRoYXQgaW1wb3J0cyBSZWFjdC4gSXQgYWRkc1xuICogbm8gc2Vjb25kIGNsaWVudDogYSBjb21wb25lbnQgcmVhY2hlcyB0aGUgc2FtZSBgQnJpZGdlQ2xpZW50YCBhIHZhbmlsbGEgcGFnZVxuICogd291bGQgYnVpbGQsIHRocm91Z2ggYSBwcm92aWRlciB0aGF0IGVpdGhlciBvd25zIG9uZSAoYW5kIGNsb3NlcyBpdCBvblxuICogdW5tb3VudCkgb3IgaXMgaGFuZGVkIG9uZSAoYW5kIGxlYXZlcyBpdCBhbG9uZSkuIFRoZSBob29rcyB0YWtlIHRoZVxuICogZnVuY3Rpb25zIGEgZ2VuZXJhdGVkIG1vZHVsZSBhbHJlYWR5IGV4cG9ydHMgLSBgb3BlcmF0aW9ucy5zaXRlcy5zdW1tYXJ5YCxcbiAqIGBvcGVyYXRpb25zLnNpdGVzLndhdGNoYCAtIHNvIHRoZSB0eXBlZCBjb250cmFjdCBpcyB0aGUgZ2VuZXJhdGVkIG9uZSwgbm90IGFcbiAqIFJlYWN0IGNvcHkgb2YgaXQuXG4gKlxuICogV2hhdCB0aGUgaG9va3MgYWRkIGlzIGxpZmV0aW1lOiBhIGNhbGwgYWJvcnRlZCB3aGVuIGl0cyBjb21wb25lbnQgdW5tb3VudHMsXG4gKiBhIHN0YWxlIHJlcGx5IGlnbm9yZWQsIGEgc3RyZWFtIGNsb3NlZCBvbiB1bm1vdW50IG9yIHdoZW4gaXRzIGlucHV0IGNoYW5nZXMsXG4gKiBhbmQgYSBzaW11bGF0ZWQgU3RyaWN0TW9kZSByZW1vdW50IHRoYXQgbGVhdmVzIGV4YWN0bHkgb25lIG9mIGVhY2guXG4gKi9cblxuaW1wb3J0IHtcblx0Y3JlYXRlQ29udGV4dCxcblx0Y3JlYXRlRWxlbWVudCxcblx0dHlwZSBSZWFjdEVsZW1lbnQsXG5cdHR5cGUgUmVhY3ROb2RlLFxuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRWZmZWN0LFxuXHR1c2VNZW1vLFxuXHR1c2VSZWYsXG5cdHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG5cdEJyaWRnZUNsaWVudCxcblx0dHlwZSBCcmlkZ2VDbGllbnRPcHRpb25zLFxuXHRRZ2lzU2RrQnJpZGdlQWJvcnRlZEVycm9yLFxuXHR0eXBlIFdpcmVUcmFuc3BvcnQsXG59IGZyb20gXCIuL2JyaWRnZVwiO1xuaW1wb3J0IHsgaXNQbGFpblJlY29yZCwgUWdpc1Nka0Vycm9yIH0gZnJvbSBcIi4vaW5kZXhcIjtcblxuLyoqIEEgaG9vayBvciBwcm92aWRlciB3YXMgdXNlZCBvdXRzaWRlIHRoZSBzaGFwZSBpdCBuZWVkcy4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrQnJpZGdlUmVhY3RFcnJvciBleHRlbmRzIFFnaXNTZGtFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlLCBcInJlYWN0X2JpbmRpbmdcIik7XG5cdH1cbn1cblxuY29uc3QgQ2xpZW50Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QnJpZGdlQ2xpZW50IHwgbnVsbD4obnVsbCk7XG5cbi8qKiBQcm9wcyBmb3Ige0BsaW5rIEJyaWRnZVByb3ZpZGVyfTogZXhhY3RseSBvbmUgb2YgYGNsaWVudGAgb3IgYHRyYW5zcG9ydGAuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyaWRnZVByb3ZpZGVyUHJvcHMge1xuXHQvKiogQSBjbGllbnQgdGhlIGNhbGxlciBvd25zOyB0aGUgcHJvdmlkZXIgbmV2ZXIgY2xvc2VzIGl0LiAqL1xuXHRyZWFkb25seSBjbGllbnQ/OiBCcmlkZ2VDbGllbnQ7XG5cdC8qKiBBIHRyYW5zcG9ydCB0aGUgcHJvdmlkZXIgYnVpbGRzIGFuZCBvd25zIGEgY2xpZW50IGZvci4gKi9cblx0cmVhZG9ubHkgdHJhbnNwb3J0PzogV2lyZVRyYW5zcG9ydDtcblx0LyoqIE9wdGlvbnMgZm9yIHRoZSBvd25lZCBjbGllbnQ7IGlnbm9yZWQgd2hlbiBgY2xpZW50YCBpcyBnaXZlbi4gKi9cblx0cmVhZG9ubHkgb3B0aW9ucz86IEJyaWRnZUNsaWVudE9wdGlvbnM7XG5cdHJlYWRvbmx5IGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufVxuXG4vKipcbiAqIFNoYXJlIG9uZSBjbGllbnQgd2l0aCBhIHN1YnRyZWUuXG4gKlxuICogQW4gb3duZWQgY2xpZW50IGlzIGNyZWF0ZWQgaW4gYW4gZWZmZWN0LCBuZXZlciBkdXJpbmcgcmVuZGVyLCBiZWNhdXNlXG4gKiBTdHJpY3RNb2RlIHJlbmRlcnMgdHdpY2UgYW5kIGEgY2xpZW50IG1hZGUgaW4gcmVuZGVyIHdvdWxkIGxlYXZlIGEgc2Vjb25kXG4gKiBsaXN0ZW5lciBvbiB0aGUgdHJhbnNwb3J0LiBVbnRpbCB0aGF0IGVmZmVjdCBoYXMgcnVuIHRoZSBzdWJ0cmVlIGlzIG5vdFxuICogcmVuZGVyZWQsIHdoaWNoIGlzIG9uZSB0aWNrLiBTdHJpY3RNb2RlJ3Mgc2ltdWxhdGVkIHVubW91bnQgY2xvc2VzIHRoZVxuICogb3duZWQgY2xpZW50IGFuZCB0aGUgZWZmZWN0IHRoYXQgZm9sbG93cyBtYWtlcyBhIG5ldyBvbmUsIHNvIHRoZSBzdWJ0cmVlXG4gKiBuZXZlciBob2xkcyBhIGRlYWQgY2xpZW50LiBUaGUgdHJhbnNwb3J0IG11c3QgYmUgc3RhYmxlIGFjcm9zcyByZW5kZXJzOyB0b1xuICogc3dhcCBpdCwgY2hhbmdlIHRoZSBwcm92aWRlcidzIGBrZXlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQnJpZGdlUHJvdmlkZXIocHJvcHM6IEJyaWRnZVByb3ZpZGVyUHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuXHRjb25zdCB7IGNsaWVudCwgdHJhbnNwb3J0LCBvcHRpb25zLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG5cdGlmICgoY2xpZW50ID09PSB1bmRlZmluZWQpID09PSAodHJhbnNwb3J0ID09PSB1bmRlZmluZWQpKSB7XG5cdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VSZWFjdEVycm9yKFxuXHRcdFx0XCJCcmlkZ2VQcm92aWRlciBuZWVkcyBleGFjdGx5IG9uZSBvZiBjbGllbnQgb3IgdHJhbnNwb3J0XCIsXG5cdFx0KTtcblx0fVxuXHRjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zPy50aW1lb3V0TXM7XG5cdGNvbnN0IFtvd25lZCwgc2V0T3duZWRdID0gdXNlU3RhdGU8QnJpZGdlQ2xpZW50IHwgbnVsbD4obnVsbCk7XG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBsaXZlID0gbmV3IEJyaWRnZUNsaWVudChcblx0XHRcdHRyYW5zcG9ydCxcblx0XHRcdHRpbWVvdXRNcyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRpbWVvdXRNcyB9LFxuXHRcdCk7XG5cdFx0c2V0T3duZWQobGl2ZSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGxpdmUuY2xvc2UoKTtcblx0XHRcdHNldE93bmVkKChjdXJyZW50KSA9PiAoY3VycmVudCA9PT0gbGl2ZSA/IG51bGwgOiBjdXJyZW50KSk7XG5cdFx0fTtcblx0fSwgW3RyYW5zcG9ydCwgdGltZW91dE1zXSk7XG5cdGNvbnN0IHZhbHVlID0gY2xpZW50ID8/IG93bmVkO1xuXHRyZXR1cm4gY3JlYXRlRWxlbWVudChcblx0XHRDbGllbnRDb250ZXh0LlByb3ZpZGVyLFxuXHRcdHsgdmFsdWUgfSxcblx0XHR2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiBjaGlsZHJlbixcblx0KTtcbn1cblxuLyoqIFRoZSBjbGllbnQgb2YgdGhlIG5lYXJlc3Qge0BsaW5rIEJyaWRnZVByb3ZpZGVyfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCcmlkZ2VDbGllbnQoKTogQnJpZGdlQ2xpZW50IHtcblx0Y29uc3QgY2xpZW50ID0gdXNlQ29udGV4dChDbGllbnRDb250ZXh0KTtcblx0aWYgKGNsaWVudCA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlUmVhY3RFcnJvcihcblx0XHRcdFwidXNlQnJpZGdlQ2xpZW50IG5lZWRzIGEgQnJpZGdlUHJvdmlkZXIgYWJvdmUgaXRcIixcblx0XHQpO1xuXHR9XG5cdHJldHVybiBjbGllbnQ7XG59XG5cbi8qKlxuICogQnVpbGQgYSBnZW5lcmF0ZWQgb3BlcmF0aW9uIG1hcCBvbmNlIHBlciBjbGllbnQ6IGB1c2VPcGVyYXRpb25zKGNyZWF0ZU9wZXJhdGlvbnMpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9wZXJhdGlvbnM8VD4oY3JlYXRlOiAoY2xpZW50OiBCcmlkZ2VDbGllbnQpID0+IFQpOiBUIHtcblx0Y29uc3QgY2xpZW50ID0gdXNlQnJpZGdlQ2xpZW50KCk7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+IGNyZWF0ZShjbGllbnQpLCBbY3JlYXRlLCBjbGllbnRdKTtcbn1cblxuLyoqIFdoZXJlIG9uZSBpbnZvY2F0aW9uIHN0YW5kcy4gKi9cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblN0YXRlPFI+ID1cblx0fCB7IHJlYWRvbmx5IHN0YXR1czogXCJpZGxlXCIgfVxuXHR8IHsgcmVhZG9ubHkgc3RhdHVzOiBcInBlbmRpbmdcIiB9XG5cdHwgeyByZWFkb25seSBzdGF0dXM6IFwib2tcIjsgcmVhZG9ubHkgdmFsdWU6IFIgfVxuXHR8IHsgcmVhZG9ubHkgc3RhdHVzOiBcImVycm9yXCI7IHJlYWRvbmx5IGVycm9yOiBFcnJvciB9O1xuXG4vKiogQ29udHJvbHMgYmV5b25kIHJ1bm5pbmc6IGFib3J0IHdoYXQgaXMgaW4gZmxpZ2h0LCBvciBmb3JnZXQgdGhlIG91dGNvbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbkNvbnRyb2xzIHtcblx0LyoqIEFib3J0IHRoZSBpbi1mbGlnaHQgY2FsbCBsb2NhbGx5OyB0aGUgaG9zdCBtYXkgc3RpbGwgcnVuIGl0LiAqL1xuXHRhYm9ydCgpOiB2b2lkO1xuXHQvKiogQmFjayB0byBgaWRsZWAsIGFib3J0aW5nIGFueXRoaW5nIGluIGZsaWdodC4gKi9cblx0cmVzZXQoKTogdm9pZDtcbn1cblxuLyoqIEFuIG9wZXJhdGlvbiBtZW1iZXIgb2YgYSBnZW5lcmF0ZWQgbWFwOiBpbnB1dCwgb3B0aW9uYWwgc2lnbmFsLCBwcm9taXNlLiAqL1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uPEksIFI+ID0gKFxuXHRpbnB1dDogSSxcblx0b3B0aW9ucz86IHsgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWwgfSxcbikgPT4gUHJvbWlzZTxSPjtcblxuY29uc3QgSURMRTogT3BlcmF0aW9uU3RhdGU8bmV2ZXI+ID0gT2JqZWN0LmZyZWV6ZSh7IHN0YXR1czogXCJpZGxlXCIgfSk7XG5jb25zdCBQRU5ESU5HOiBPcGVyYXRpb25TdGF0ZTxuZXZlcj4gPSBPYmplY3QuZnJlZXplKHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblxuLyoqXG4gKiBSdW4gYSBnZW5lcmF0ZWQgb3BlcmF0aW9uIGZyb20gYSBjb21wb25lbnQuXG4gKlxuICogYHJ1bmAgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUsIG9yIHdpdGggYHVuZGVmaW5lZGAgd2hlbiB0aGUgY2FsbCBmYWlsZWQsIHdhc1xuICogYWJvcnRlZCBvciB3YXMgc3VwZXJzZWRlZCBieSBhIGxhdGVyIHJ1biAtIHRoZSBzdGF0ZSBjYXJyaWVzIHRoZSBlcnJvciwgc29cbiAqIHRoZSBwcm9taXNlIG5ldmVyIHJlamVjdHMgaW50byBhbiBldmVudCBoYW5kbGVyLiBPbmx5IHRoZSBsYXRlc3QgcnVuIGNhblxuICogY2hhbmdlIHRoZSBzdGF0ZTsgdW5tb3VudGluZyBhYm9ydHMgd2hhdGV2ZXIgaXMgaW4gZmxpZ2h0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3BlcmF0aW9uPEksIFI+KFxuXHRvcGVyYXRpb246IE9wZXJhdGlvbjxJLCBSPixcbik6IHJlYWRvbmx5IFtcblx0T3BlcmF0aW9uU3RhdGU8Uj4sXG5cdChpbnB1dDogSSkgPT4gUHJvbWlzZTxSIHwgdW5kZWZpbmVkPixcblx0T3BlcmF0aW9uQ29udHJvbHMsXG5dIHtcblx0Y29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxPcGVyYXRpb25TdGF0ZTxSPj4oSURMRSk7XG5cdGNvbnN0IGdlbmVyYXRpb24gPSB1c2VSZWYoMCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyIHwgbnVsbD4obnVsbCk7XG5cdGNvbnN0IG1vdW50ZWQgPSB1c2VSZWYodHJ1ZSk7XG5cblx0Y29uc3QgYWJvcnQgPSB1c2VDYWxsYmFjaygoKTogdm9pZCA9PiB7XG5cdFx0Z2VuZXJhdGlvbi5jdXJyZW50ICs9IDE7XG5cdFx0Y29udHJvbGxlci5jdXJyZW50Py5hYm9ydCgpO1xuXHRcdGNvbnRyb2xsZXIuY3VycmVudCA9IG51bGw7XG5cdH0sIFtdKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdG1vdW50ZWQuY3VycmVudCA9IHRydWU7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdG1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuXHRcdFx0YWJvcnQoKTtcblx0XHR9O1xuXHR9LCBbYWJvcnRdKTtcblxuXHRjb25zdCBydW4gPSB1c2VDYWxsYmFjayhcblx0XHRhc3luYyAoaW5wdXQ6IEkpOiBQcm9taXNlPFIgfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRjb25zdCBtaW5lID0gZ2VuZXJhdGlvbi5jdXJyZW50O1xuXHRcdFx0Y29uc3Qgc2lnbmFsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXHRcdFx0Y29udHJvbGxlci5jdXJyZW50ID0gc2lnbmFsO1xuXHRcdFx0c2V0U3RhdGUoUEVORElORyk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGF3YWl0IG9wZXJhdGlvbihpbnB1dCwgeyBzaWduYWw6IHNpZ25hbC5zaWduYWwgfSk7XG5cdFx0XHRcdGlmIChnZW5lcmF0aW9uLmN1cnJlbnQgIT09IG1pbmUgfHwgIW1vdW50ZWQuY3VycmVudCkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0U3RhdGUoeyBzdGF0dXM6IFwib2tcIiwgdmFsdWUgfSk7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGlmIChnZW5lcmF0aW9uLmN1cnJlbnQgIT09IG1pbmUgfHwgIW1vdW50ZWQuY3VycmVudCkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgUWdpc1Nka0JyaWRnZUFib3J0ZWRFcnJvcikge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0U3RhdGUoe1xuXHRcdFx0XHRcdHN0YXR1czogXCJlcnJvclwiLFxuXHRcdFx0XHRcdGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXIuY3VycmVudCA9PT0gc2lnbmFsKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5jdXJyZW50ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29wZXJhdGlvbiwgYWJvcnRdLFxuXHQpO1xuXG5cdGNvbnN0IHJlc2V0ID0gdXNlQ2FsbGJhY2soKCk6IHZvaWQgPT4ge1xuXHRcdGFib3J0KCk7XG5cdFx0c2V0U3RhdGUoSURMRSk7XG5cdH0sIFthYm9ydF0pO1xuXG5cdGNvbnN0IGNvbnRyb2xzID0gdXNlTWVtbygoKSA9PiAoeyBhYm9ydCwgcmVzZXQgfSksIFthYm9ydCwgcmVzZXRdKTtcblx0cmV0dXJuIFtzdGF0ZSwgcnVuLCBjb250cm9sc107XG59XG5cbi8qKiBIb3cgYSBzdHJlYW0gZW5kZWQsIGFzIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIHJlcG9ydHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbVRlcm1pbmFsTGlrZSB7XG5cdHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblx0cmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblx0cmVhZG9ubHkgZHJvcHBlZD86IG51bWJlcjtcbn1cblxuLyoqIFRoZSBoYW5kbGUgYSBnZW5lcmF0ZWQgc3RyZWFtIG1lbWJlciByZXNvbHZlcyB3aXRoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVMaWtlIHtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgY2xvc2VkOiBib29sZWFuO1xuXHRjbG9zZSgpOiB2b2lkO1xufVxuXG4vKiogSGFuZGxlcnMgZm9yIGEgc3RyZWFtLCBhcyBhIGdlbmVyYXRlZCBtb2R1bGUgdHlwZXMgdGhlbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnNMaWtlPEU+IHtcblx0cmVhZG9ubHkgb25FdmVudD86IChldmVudDogRSkgPT4gdm9pZDtcblx0cmVhZG9ubHkgb25UZXJtaW5hbD86ICh0ZXJtaW5hbDogU3RyZWFtVGVybWluYWxMaWtlKSA9PiB2b2lkO1xufVxuXG4vKiogQSBzdHJlYW0gbWVtYmVyIG9mIGEgZ2VuZXJhdGVkIG1hcC4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbTxJLCBFPiA9IChcblx0aW5wdXQ6IEksXG5cdGhhbmRsZXJzOiBTdHJlYW1IYW5kbGVyc0xpa2U8RT4sXG5cdG9wdGlvbnM/OiB7IHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsIH0sXG4pID0+IFByb21pc2U8U3RyZWFtSGFuZGxlTGlrZT47XG5cbi8qKiBXaGVyZSBvbmUgc3Vic2NyaXB0aW9uIHN0YW5kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtU3RhdGU8RT4ge1xuXHQvKiogYGlkbGVgIHdpdGggYSBudWxsIGlucHV0LCBgZmFpbGVkYCB3aGVuIHRoZSBob3N0IHJlZnVzZWQgdG8gb3BlbiBpdC4gKi9cblx0cmVhZG9ubHkgc3RhdHVzOiBcImlkbGVcIiB8IFwib3BlbmluZ1wiIHwgXCJvcGVuXCIgfCBcImVuZGVkXCIgfCBcImZhaWxlZFwiO1xuXHRyZWFkb25seSBsYXN0RXZlbnQ6IEUgfCBudWxsO1xuXHRyZWFkb25seSB0ZXJtaW5hbDogU3RyZWFtVGVybWluYWxMaWtlIHwgbnVsbDtcblx0cmVhZG9ubHkgZXJyb3I6IEVycm9yIHwgbnVsbDtcbn1cblxuY29uc3QgSURMRV9TVFJFQU06IFN0cmVhbVN0YXRlPG5ldmVyPiA9IE9iamVjdC5mcmVlemUoe1xuXHRzdGF0dXM6IFwiaWRsZVwiLFxuXHRsYXN0RXZlbnQ6IG51bGwsXG5cdHRlcm1pbmFsOiBudWxsLFxuXHRlcnJvcjogbnVsbCxcbn0pO1xuXG5mdW5jdGlvbiBzdGFibGVLZXkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIChfa2V5LCBpdGVtOiB1bmtub3duKSA9PlxuXHRcdGlzUGxhaW5SZWNvcmQoaXRlbSlcblx0XHRcdD8gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0XHRcdE9iamVjdC5lbnRyaWVzKGl0ZW0pLnNvcnQoKFthXSwgW2JdKSA9PiAoYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApKSxcblx0XHRcdFx0KVxuXHRcdFx0OiBpdGVtLFxuXHQpO1xufVxuXG4vKipcbiAqIEhvbGQgYSBnZW5lcmF0ZWQgc3RyZWFtIG9wZW4gd2hpbGUgYSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAqXG4gKiBUaGUgc3Vic2NyaXB0aW9uIGZvbGxvd3MgYG9wZW5gIGFuZCB0aGUgKmNvbnRlbnQqIG9mIGBpbnB1dGA6IGEgbmV3IG9iamVjdFxuICogd2l0aCB0aGUgc2FtZSBmaWVsZHMgZG9lcyBub3QgcmVvcGVuIGl0LCBhIGRpZmZlcmVudCBvbmUgY2xvc2VzIHRoZSBvbGRcbiAqIHN0cmVhbSBhbmQgb3BlbnMgYSBuZXcgb25lLCBhbmQgYG51bGxgIGNsb3NlcyBpdC4gSGFuZGxlcnMgYXJlIHJlYWQgZnJlc2hcbiAqIG9uIGV2ZXJ5IGZyYW1lLCBzbyBhIG5ldyBjbG9zdXJlIGRvZXMgbm90IHJlb3BlbiBhbnl0aGluZyBlaXRoZXIuIFVubW91bnRcbiAqIGNsb3NlcyB0aGUgc3RyZWFtLCBldmVuIGlmIHRoZSBob3N0IGhhcyBub3QgeWV0IGFja25vd2xlZGdlZCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0cmVhbTxJLCBFPihcblx0b3BlbjogU3RyZWFtPEksIEU+LFxuXHRpbnB1dDogSSB8IG51bGwsXG5cdGhhbmRsZXJzOiBTdHJlYW1IYW5kbGVyc0xpa2U8RT4gPSB7fSxcbik6IFN0cmVhbVN0YXRlPEU+IHtcblx0Y29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxTdHJlYW1TdGF0ZTxFPj4oSURMRV9TVFJFQU0pO1xuXHRjb25zdCBsYXRlc3QgPSB1c2VSZWYoaGFuZGxlcnMpO1xuXHRsYXRlc3QuY3VycmVudCA9IGhhbmRsZXJzO1xuXHRjb25zdCBrZXkgPSBpbnB1dCA9PT0gbnVsbCA/IG51bGwgOiBzdGFibGVLZXkoaW5wdXQpO1xuXHQvLyBgaW5wdXRgIGlzIGRlbGliZXJhdGVseSByZWFkIHRocm91Z2ggYGtleWA6IHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWVcblx0Ly8gZmllbGRzIGFyZSB0aGUgc2FtZSBzdWJzY3JpcHRpb24uXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlucHV0KTtcblx0aW5wdXRSZWYuY3VycmVudCA9IGlucHV0O1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGtleSA9PT0gbnVsbCkge1xuXHRcdFx0c2V0U3RhdGUoSURMRV9TVFJFQU0pO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudCA9IGlucHV0UmVmLmN1cnJlbnQgYXMgSTtcblx0XHRsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cdFx0bGV0IGhhbmRsZTogU3RyZWFtSGFuZGxlTGlrZSB8IG51bGwgPSBudWxsO1xuXHRcdHNldFN0YXRlKHtcblx0XHRcdHN0YXR1czogXCJvcGVuaW5nXCIsXG5cdFx0XHRsYXN0RXZlbnQ6IG51bGwsXG5cdFx0XHR0ZXJtaW5hbDogbnVsbCxcblx0XHRcdGVycm9yOiBudWxsLFxuXHRcdH0pO1xuXHRcdG9wZW4oY3VycmVudCwge1xuXHRcdFx0b25FdmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChjYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bGF0ZXN0LmN1cnJlbnQub25FdmVudD8uKGV2ZW50KTtcblx0XHRcdFx0c2V0U3RhdGUoKHByZXZpb3VzKSA9PiAoeyAuLi5wcmV2aW91cywgbGFzdEV2ZW50OiBldmVudCB9KSk7XG5cdFx0XHR9LFxuXHRcdFx0b25UZXJtaW5hbDogKHRlcm1pbmFsKSA9PiB7XG5cdFx0XHRcdGlmIChjYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bGF0ZXN0LmN1cnJlbnQub25UZXJtaW5hbD8uKHRlcm1pbmFsKTtcblx0XHRcdFx0c2V0U3RhdGUoKHByZXZpb3VzKSA9PiAoeyAuLi5wcmV2aW91cywgc3RhdHVzOiBcImVuZGVkXCIsIHRlcm1pbmFsIH0pKTtcblx0XHRcdH0sXG5cdFx0fSkudGhlbihcblx0XHRcdChvcGVuZWQpID0+IHtcblx0XHRcdFx0aWYgKGNhbmNlbGxlZCkge1xuXHRcdFx0XHRcdG9wZW5lZC5jbG9zZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRoYW5kbGUgPSBvcGVuZWQ7XG5cdFx0XHRcdHNldFN0YXRlKChwcmV2aW91cykgPT5cblx0XHRcdFx0XHRwcmV2aW91cy5zdGF0dXMgPT09IFwiZW5kZWRcIlxuXHRcdFx0XHRcdFx0PyBwcmV2aW91c1xuXHRcdFx0XHRcdFx0OiB7IC4uLnByZXZpb3VzLCBzdGF0dXM6IFwib3BlblwiIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdGlmIChjYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0U3RhdGUoe1xuXHRcdFx0XHRcdHN0YXR1czogXCJmYWlsZWRcIixcblx0XHRcdFx0XHRsYXN0RXZlbnQ6IG51bGwsXG5cdFx0XHRcdFx0dGVybWluYWw6IG51bGwsXG5cdFx0XHRcdFx0ZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNhbmNlbGxlZCA9IHRydWU7XG5cdFx0XHRoYW5kbGU/LmNsb3NlKCk7XG5cdFx0fTtcblx0fSwgW29wZW4sIGtleV0pO1xuXG5cdHJldHVybiBzdGF0ZTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFnQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQk8sTUFBTSxnQ0FBZ0MsY0FBYTtBQUFBLEVBQ2xELFdBQVcsQ0FBQyxTQUFpQjtBQUFBLElBQ25DLE1BQU0sU0FBUyxlQUFlO0FBQUE7QUFFaEM7QUFFQSxJQUFNLGdCQUFnQixjQUFtQyxJQUFJO0FBd0J0RCxTQUFTLGNBQWMsQ0FBQyxPQUEwQztBQUFBLEVBQ3hFLFFBQVEsUUFBUSxXQUFXLFNBQVMsYUFBYTtBQUFBLEVBQ2pELElBQUssV0FBVyxlQUFnQixjQUFjLFlBQVk7QUFBQSxJQUN6RCxNQUFNLElBQUks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O0FBQUEsTUFDakIsU0FBUyxXQUFXO0FBQUEsTUFDcEI7QUFBQSxJQUNEO0FBQUEsSUFDQSxNQUFNLFVBQVUsU0FBUztBQUFBLElBQ3pCLElBQUksWUFBWTtBQUFBLElBQ2hCLElBQUksU0FBa0M7QUFBQSxJQUN0QyxTQUFTO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsSUFDUixDQUFDO0FBQUEsSUFDRCxLQUFLLFNBQVM7QUFBQSxNQUNiLFNBQVMsQ0FBQyxVQUFVO0FBQUEsUUFDbkIsSUFBSSxXQUFXO0FBQUEsVUFDZDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLE9BQU8sUUFBUSxVQUFVLEtBQUs7QUFBQSxRQUM5QixTQUFTLENBQUMsY0FBYyxLQUFLLFVBQVUsV0FBVyxNQUFNLEVBQUU7QUFBQTtBQUFBLE1BRTNELFlBQVksQ0FBQyxhQUFhO0FBQUEsUUFDekIsSUFBSSxXQUFXO0FBQUEsVUFDZDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLE9BQU8sUUFBUSxhQUFhLFFBQVE7QUFBQSxRQUNwQyxTQUFTLENBQUMsY0FBYyxLQUFLLFVBQVUsUUFBUSxTQUFTLFNBQVMsRUFBRTtBQUFBO0FBQUEsSUFFckUsQ0FBQyxFQUFFLEtBQ0YsQ0FBQyxXQUFXO0FBQUEsTUFDWCxJQUFJLFdBQVc7QUFBQSxRQUNkLE9BQU8sTUFBTTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxTQUFTLENBQUMsYUFDVCxTQUFTLFdBQVcsVUFDakIsV0FDQSxLQUFLLFVBQVUsUUFBUSxPQUFPLENBQ2xDO0FBQUEsT0FFRCxDQUFDLFVBQW1CO0FBQUEsTUFDbkIsSUFBSSxXQUFXO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUNWLE9BQU8saUJBQWlCLFFBQVEsUUFBUSxJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFBQSxNQUNoRSxDQUFDO0FBQUEsS0FFSDtBQUFBLElBQ0EsT0FBTyxNQUFNO0FBQUEsTUFDWixZQUFZO0FBQUEsTUFDWixRQUFRLE1BQU07QUFBQTtBQUFBLEtBRWIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUFBLEVBRWQsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiQjkxNzMxMTZEMEE4QUQ0MzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
213
|
+
//# debugId=0FA8371D474034FF64756E2164756E21
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3JlYWN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogVGhpbiBSZWFjdCBiaW5kaW5ncyBvdmVyIHRoZSBicmlkZ2UgY2xpZW50IChUQVNLLTE4LCBkZWNpc2lvbi0xOCkuXG4gKlxuICogVGhpcyBlbnRyeSBwb2ludCBpcyBvcHRpb25hbCBhbmQgaXMgdGhlIG9ubHkgb25lIHRoYXQgaW1wb3J0cyBSZWFjdC4gSXQgYWRkc1xuICogbm8gc2Vjb25kIGNsaWVudDogYSBjb21wb25lbnQgcmVhY2hlcyB0aGUgc2FtZSBgUWdpc1Nka2Agb3IgYEJyaWRnZUNsaWVudGAgYVxuICogdmFuaWxsYSBwYWdlIHdvdWxkIGJ1aWxkLCB0aHJvdWdoIGEgcHJvdmlkZXIgdGhhdCBpcyBoYW5kZWQgYSBgUWdpc1Nka2BcbiAqIChhbmQgbGVhdmVzIGl0IGFsb25lKSwgaXMgaGFuZGVkIGEgY2xpZW50IChzYW1lKSwgb3Igb3ducyBhIGNsaWVudCBidWlsdCBvblxuICogYSB0cmFuc3BvcnQgKGFuZCBjbG9zZXMgaXQgb24gdW5tb3VudCkuIFRoZSBob29rcyB0YWtlIHRoZSBtZXRob2RzIGFcbiAqIGBRZ2lzU2RrYCBhbHJlYWR5IGhhcyAtIGBxZ2lzLnNpdGVzLnN1bW1hcnlgLCBgcWdpcy5zaXRlcy53YXRjaGAgLSBzb1xuICogdGhlIHR5cGVkIGNvbnRyYWN0IGlzIHRoZSBnZW5lcmF0ZWQgb25lLCBub3QgYSBSZWFjdCBjb3B5IG9mIGl0LlxuICpcbiAqIFdoYXQgdGhlIGhvb2tzIGFkZCBpcyBsaWZldGltZTogYSBjYWxsIGFib3J0ZWQgd2hlbiBpdHMgY29tcG9uZW50IHVubW91bnRzLFxuICogYSBzdGFsZSByZXBseSBpZ25vcmVkLCBhIHN0cmVhbSBjbG9zZWQgb24gdW5tb3VudCBvciB3aGVuIGl0cyBpbnB1dCBjaGFuZ2VzLFxuICogYW5kIGEgc2ltdWxhdGVkIFN0cmljdE1vZGUgcmVtb3VudCB0aGF0IGxlYXZlcyBleGFjdGx5IG9uZSBvZiBlYWNoLlxuICovXG5cbmltcG9ydCB7XG5cdGNyZWF0ZUNvbnRleHQsXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdHR5cGUgUmVhY3RFbGVtZW50LFxuXHR0eXBlIFJlYWN0Tm9kZSxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZUVmZmVjdCxcblx0dXNlTWVtbyxcblx0dXNlUmVmLFxuXHR1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuXHRCcmlkZ2VDbGllbnQsXG5cdHR5cGUgQnJpZGdlQ2xpZW50T3B0aW9ucyxcblx0UWdpc1Nka0JyaWRnZUFib3J0ZWRFcnJvcixcblx0dHlwZSBXaXJlVHJhbnNwb3J0LFxufSBmcm9tIFwiLi9icmlkZ2VcIjtcbmltcG9ydCB7IFFnaXNTZGtFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNQbGFpblJlY29yZCB9IGZyb20gXCIuL2ludGVybmFsXCI7XG5pbXBvcnQgdHlwZSB7IFFnaXNTZGssIFFnaXNTZGtDb3JlIH0gZnJvbSBcIi4vcWdpcy1zZGtcIjtcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uTWFwLCBTdHJlYW1NYXAgfSBmcm9tIFwiLi9zY2hlbWFcIjtcblxuLyoqIEEgaG9vayBvciBwcm92aWRlciB3YXMgdXNlZCBvdXRzaWRlIHRoZSBzaGFwZSBpdCBuZWVkcy4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrQnJpZGdlUmVhY3RFcnJvciBleHRlbmRzIFFnaXNTZGtFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlLCBcInJlYWN0X2JpbmRpbmdcIik7XG5cdH1cbn1cblxuaW50ZXJmYWNlIFNoYXJlZCB7XG5cdHJlYWRvbmx5IGNsaWVudDogQnJpZGdlQ2xpZW50O1xuXHRyZWFkb25seSBxZ2lzOiBRZ2lzU2RrQ29yZTx1bmtub3duLCB1bmtub3duPiB8IG51bGw7XG59XG5cbmNvbnN0IENsaWVudENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNoYXJlZCB8IG51bGw+KG51bGwpO1xuXG4vKiogUHJvcHMgZm9yIHtAbGluayBCcmlkZ2VQcm92aWRlcn06IGV4YWN0bHkgb25lIG9mIGBxZ2lzYCwgYGNsaWVudGAgb3IgYHRyYW5zcG9ydGAuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyaWRnZVByb3ZpZGVyUHJvcHMge1xuXHQvKipcblx0ICogQSBgUWdpc1Nka2AgdGhlIHBhZ2UgYnVpbHQsIHdoYXRldmVyIGl0cyBzY2hlbWE7IHRoZSBwcm92aWRlciBzaGFyZXMgaXRcblx0ICogYW5kIG5ldmVyIGNsb3NlcyBpdC4gYHVzZVFnaXNTZGtgIGhhbmRzIGl0IGJhY2sgdW5kZXIgdGhlIHBhZ2UncyB0eXBlcy5cblx0ICovXG5cdHJlYWRvbmx5IHFnaXM/OiBRZ2lzU2RrQ29yZTx1bmtub3duLCB1bmtub3duPjtcblx0LyoqIEEgY2xpZW50IHRoZSBjYWxsZXIgb3duczsgdGhlIHByb3ZpZGVyIG5ldmVyIGNsb3NlcyBpdC4gKi9cblx0cmVhZG9ubHkgY2xpZW50PzogQnJpZGdlQ2xpZW50O1xuXHQvKiogQSB0cmFuc3BvcnQgdGhlIHByb3ZpZGVyIGJ1aWxkcyBhbmQgb3ducyBhIGNsaWVudCBmb3IuICovXG5cdHJlYWRvbmx5IHRyYW5zcG9ydD86IFdpcmVUcmFuc3BvcnQ7XG5cdC8qKiBPcHRpb25zIGZvciB0aGUgb3duZWQgY2xpZW50OyBpZ25vcmVkIHdoZW4gYGNsaWVudGAgaXMgZ2l2ZW4uICovXG5cdHJlYWRvbmx5IG9wdGlvbnM/OiBCcmlkZ2VDbGllbnRPcHRpb25zO1xuXHRyZWFkb25seSBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBTaGFyZSBvbmUgY2xpZW50IHdpdGggYSBzdWJ0cmVlLlxuICpcbiAqIEFuIG93bmVkIGNsaWVudCBpcyBjcmVhdGVkIGluIGFuIGVmZmVjdCwgbmV2ZXIgZHVyaW5nIHJlbmRlciwgYmVjYXVzZVxuICogU3RyaWN0TW9kZSByZW5kZXJzIHR3aWNlIGFuZCBhIGNsaWVudCBtYWRlIGluIHJlbmRlciB3b3VsZCBsZWF2ZSBhIHNlY29uZFxuICogbGlzdGVuZXIgb24gdGhlIHRyYW5zcG9ydC4gVW50aWwgdGhhdCBlZmZlY3QgaGFzIHJ1biB0aGUgc3VidHJlZSBpcyBub3RcbiAqIHJlbmRlcmVkLCB3aGljaCBpcyBvbmUgdGljay4gU3RyaWN0TW9kZSdzIHNpbXVsYXRlZCB1bm1vdW50IGNsb3NlcyB0aGVcbiAqIG93bmVkIGNsaWVudCBhbmQgdGhlIGVmZmVjdCB0aGF0IGZvbGxvd3MgbWFrZXMgYSBuZXcgb25lLCBzbyB0aGUgc3VidHJlZVxuICogbmV2ZXIgaG9sZHMgYSBkZWFkIGNsaWVudC4gVGhlIHRyYW5zcG9ydCBtdXN0IGJlIHN0YWJsZSBhY3Jvc3MgcmVuZGVyczsgdG9cbiAqIHN3YXAgaXQsIGNoYW5nZSB0aGUgcHJvdmlkZXIncyBga2V5YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJyaWRnZVByb3ZpZGVyKHByb3BzOiBCcmlkZ2VQcm92aWRlclByb3BzKTogUmVhY3RFbGVtZW50IHtcblx0Y29uc3QgeyBxZ2lzLCBjbGllbnQsIHRyYW5zcG9ydCwgb3B0aW9ucywgY2hpbGRyZW4gfSA9IHByb3BzO1xuXHRjb25zdCBnaXZlbiA9IFtxZ2lzLCBjbGllbnQsIHRyYW5zcG9ydF0uZmlsdGVyKFxuXHRcdChzb3VyY2UpID0+IHNvdXJjZSAhPT0gdW5kZWZpbmVkLFxuXHQpLmxlbmd0aDtcblx0aWYgKGdpdmVuICE9PSAxKSB7XG5cdFx0dGhyb3cgbmV3IFFnaXNTZGtCcmlkZ2VSZWFjdEVycm9yKFxuXHRcdFx0XCJCcmlkZ2VQcm92aWRlciBuZWVkcyBleGFjdGx5IG9uZSBvZiBxZ2lzLCBjbGllbnQgb3IgdHJhbnNwb3J0XCIsXG5cdFx0KTtcblx0fVxuXHRjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zPy50aW1lb3V0TXM7XG5cdGNvbnN0IFtvd25lZCwgc2V0T3duZWRdID0gdXNlU3RhdGU8QnJpZGdlQ2xpZW50IHwgbnVsbD4obnVsbCk7XG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKHRyYW5zcG9ydCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBsaXZlID0gbmV3IEJyaWRnZUNsaWVudChcblx0XHRcdHRyYW5zcG9ydCxcblx0XHRcdHRpbWVvdXRNcyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRpbWVvdXRNcyB9LFxuXHRcdCk7XG5cdFx0c2V0T3duZWQobGl2ZSk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGxpdmUuY2xvc2UoKTtcblx0XHRcdHNldE93bmVkKChjdXJyZW50KSA9PiAoY3VycmVudCA9PT0gbGl2ZSA/IG51bGwgOiBjdXJyZW50KSk7XG5cdFx0fTtcblx0fSwgW3RyYW5zcG9ydCwgdGltZW91dE1zXSk7XG5cdGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKTogU2hhcmVkIHwgbnVsbCA9PiB7XG5cdFx0aWYgKHFnaXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHsgY2xpZW50OiBxZ2lzLmNsaWVudCwgcWdpcyB9O1xuXHRcdH1cblx0XHRjb25zdCBsaXZlID0gY2xpZW50ID8/IG93bmVkO1xuXHRcdHJldHVybiBsaXZlID09PSBudWxsID8gbnVsbCA6IHsgY2xpZW50OiBsaXZlLCBxZ2lzOiBudWxsIH07XG5cdH0sIFtxZ2lzLCBjbGllbnQsIG93bmVkXSk7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50KFxuXHRcdENsaWVudENvbnRleHQuUHJvdmlkZXIsXG5cdFx0eyB2YWx1ZSB9LFxuXHRcdHZhbHVlID09PSBudWxsID8gbnVsbCA6IGNoaWxkcmVuLFxuXHQpO1xufVxuXG5mdW5jdGlvbiB1c2VTaGFyZWQoaG9vazogc3RyaW5nKTogU2hhcmVkIHtcblx0Y29uc3Qgc2hhcmVkID0gdXNlQ29udGV4dChDbGllbnRDb250ZXh0KTtcblx0aWYgKHNoYXJlZCA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBRZ2lzU2RrQnJpZGdlUmVhY3RFcnJvcihcblx0XHRcdGAke2hvb2t9IG5lZWRzIGEgQnJpZGdlUHJvdmlkZXIgYWJvdmUgaXRgLFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHNoYXJlZDtcbn1cblxuLyoqIFRoZSBjbGllbnQgb2YgdGhlIG5lYXJlc3Qge0BsaW5rIEJyaWRnZVByb3ZpZGVyfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCcmlkZ2VDbGllbnQoKTogQnJpZGdlQ2xpZW50IHtcblx0cmV0dXJuIHVzZVNoYXJlZChcInVzZUJyaWRnZUNsaWVudFwiKS5jbGllbnQ7XG59XG5cbi8qKlxuICogVGhlIGBRZ2lzU2RrYCBvZiB0aGUgbmVhcmVzdCB7QGxpbmsgQnJpZGdlUHJvdmlkZXJ9LlxuICpcbiAqIFRoZSB0eXBlIHBhcmFtZXRlcnMgbmFtZSB0aGUgZ2VuZXJhdGVkIGBPcGVyYXRpb25zYCBhbmQgYFN0cmVhbXNgOyB0aGV5IGFyZVxuICogdGhlIGNhbGxlcidzIGNsYWltLCB0aGUgc2FtZSB3YXkgdGhlIHByb3ZpZGVyJ3MgYHFnaXNgIHByb3Agd2FzIHRoZSBwYWdlJ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VRZ2lzU2RrPE8gPSBPcGVyYXRpb25NYXAsIFMgPSBTdHJlYW1NYXA+KCk6IFFnaXNTZGs8TywgUz4ge1xuXHRjb25zdCBzaGFyZWQgPSB1c2VTaGFyZWQoXCJ1c2VRZ2lzU2RrXCIpO1xuXHRpZiAoc2hhcmVkLnFnaXMgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgUWdpc1Nka0JyaWRnZVJlYWN0RXJyb3IoXG5cdFx0XHRcInVzZVFnaXNTZGsgbmVlZHMgYSBCcmlkZ2VQcm92aWRlciBnaXZlbiBhIHFnaXMgaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cdHJldHVybiBzaGFyZWQucWdpcyBhcyB1bmtub3duIGFzIFFnaXNTZGs8TywgUz47XG59XG5cbi8qKlxuICogQnVpbGQgYSBnZW5lcmF0ZWQgb3BlcmF0aW9uIG1hcCBvbmNlIHBlciBjbGllbnQ6IGB1c2VPcGVyYXRpb25zKGNyZWF0ZU9wZXJhdGlvbnMpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9wZXJhdGlvbnM8VD4oY3JlYXRlOiAoY2xpZW50OiBCcmlkZ2VDbGllbnQpID0+IFQpOiBUIHtcblx0Y29uc3QgY2xpZW50ID0gdXNlQnJpZGdlQ2xpZW50KCk7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+IGNyZWF0ZShjbGllbnQpLCBbY3JlYXRlLCBjbGllbnRdKTtcbn1cblxuLyoqIFdoZXJlIG9uZSBpbnZvY2F0aW9uIHN0YW5kcy4gKi9cbmV4cG9ydCB0eXBlIE9wZXJhdGlvblN0YXRlPFI+ID1cblx0fCB7IHJlYWRvbmx5IHN0YXR1czogXCJpZGxlXCIgfVxuXHR8IHsgcmVhZG9ubHkgc3RhdHVzOiBcInBlbmRpbmdcIiB9XG5cdHwgeyByZWFkb25seSBzdGF0dXM6IFwib2tcIjsgcmVhZG9ubHkgdmFsdWU6IFIgfVxuXHR8IHsgcmVhZG9ubHkgc3RhdHVzOiBcImVycm9yXCI7IHJlYWRvbmx5IGVycm9yOiBFcnJvciB9O1xuXG4vKiogQ29udHJvbHMgYmV5b25kIHJ1bm5pbmc6IGFib3J0IHdoYXQgaXMgaW4gZmxpZ2h0LCBvciBmb3JnZXQgdGhlIG91dGNvbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZXJhdGlvbkNvbnRyb2xzIHtcblx0LyoqIEFib3J0IHRoZSBpbi1mbGlnaHQgY2FsbCBsb2NhbGx5OyB0aGUgaG9zdCBtYXkgc3RpbGwgcnVuIGl0LiAqL1xuXHRhYm9ydCgpOiB2b2lkO1xuXHQvKiogQmFjayB0byBgaWRsZWAsIGFib3J0aW5nIGFueXRoaW5nIGluIGZsaWdodC4gKi9cblx0cmVzZXQoKTogdm9pZDtcbn1cblxuLyoqIEFuIG9wZXJhdGlvbiBtZW1iZXIgb2YgYSBnZW5lcmF0ZWQgbWFwOiBpbnB1dCwgb3B0aW9uYWwgc2lnbmFsLCBwcm9taXNlLiAqL1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uPEksIFI+ID0gKFxuXHRpbnB1dDogSSxcblx0b3B0aW9ucz86IHsgcmVhZG9ubHkgc2lnbmFsPzogQWJvcnRTaWduYWwgfSxcbikgPT4gUHJvbWlzZTxSPjtcblxuY29uc3QgSURMRTogT3BlcmF0aW9uU3RhdGU8bmV2ZXI+ID0gT2JqZWN0LmZyZWV6ZSh7IHN0YXR1czogXCJpZGxlXCIgfSk7XG5jb25zdCBQRU5ESU5HOiBPcGVyYXRpb25TdGF0ZTxuZXZlcj4gPSBPYmplY3QuZnJlZXplKHsgc3RhdHVzOiBcInBlbmRpbmdcIiB9KTtcblxuLyoqXG4gKiBSdW4gYSBnZW5lcmF0ZWQgb3BlcmF0aW9uIGZyb20gYSBjb21wb25lbnQuXG4gKlxuICogYHJ1bmAgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUsIG9yIHdpdGggYHVuZGVmaW5lZGAgd2hlbiB0aGUgY2FsbCBmYWlsZWQsIHdhc1xuICogYWJvcnRlZCBvciB3YXMgc3VwZXJzZWRlZCBieSBhIGxhdGVyIHJ1biAtIHRoZSBzdGF0ZSBjYXJyaWVzIHRoZSBlcnJvciwgc29cbiAqIHRoZSBwcm9taXNlIG5ldmVyIHJlamVjdHMgaW50byBhbiBldmVudCBoYW5kbGVyLiBPbmx5IHRoZSBsYXRlc3QgcnVuIGNhblxuICogY2hhbmdlIHRoZSBzdGF0ZTsgdW5tb3VudGluZyBhYm9ydHMgd2hhdGV2ZXIgaXMgaW4gZmxpZ2h0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3BlcmF0aW9uPEksIFI+KFxuXHRvcGVyYXRpb246IE9wZXJhdGlvbjxJLCBSPixcbik6IHJlYWRvbmx5IFtcblx0T3BlcmF0aW9uU3RhdGU8Uj4sXG5cdChpbnB1dDogSSkgPT4gUHJvbWlzZTxSIHwgdW5kZWZpbmVkPixcblx0T3BlcmF0aW9uQ29udHJvbHMsXG5dIHtcblx0Y29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxPcGVyYXRpb25TdGF0ZTxSPj4oSURMRSk7XG5cdGNvbnN0IGdlbmVyYXRpb24gPSB1c2VSZWYoMCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyIHwgbnVsbD4obnVsbCk7XG5cdGNvbnN0IG1vdW50ZWQgPSB1c2VSZWYodHJ1ZSk7XG5cblx0Y29uc3QgYWJvcnQgPSB1c2VDYWxsYmFjaygoKTogdm9pZCA9PiB7XG5cdFx0Z2VuZXJhdGlvbi5jdXJyZW50ICs9IDE7XG5cdFx0Y29udHJvbGxlci5jdXJyZW50Py5hYm9ydCgpO1xuXHRcdGNvbnRyb2xsZXIuY3VycmVudCA9IG51bGw7XG5cdH0sIFtdKTtcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdG1vdW50ZWQuY3VycmVudCA9IHRydWU7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdG1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuXHRcdFx0YWJvcnQoKTtcblx0XHR9O1xuXHR9LCBbYWJvcnRdKTtcblxuXHRjb25zdCBydW4gPSB1c2VDYWxsYmFjayhcblx0XHRhc3luYyAoaW5wdXQ6IEkpOiBQcm9taXNlPFIgfCB1bmRlZmluZWQ+ID0+IHtcblx0XHRcdGFib3J0KCk7XG5cdFx0XHRjb25zdCBtaW5lID0gZ2VuZXJhdGlvbi5jdXJyZW50O1xuXHRcdFx0Y29uc3Qgc2lnbmFsID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXHRcdFx0Y29udHJvbGxlci5jdXJyZW50ID0gc2lnbmFsO1xuXHRcdFx0c2V0U3RhdGUoUEVORElORyk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGF3YWl0IG9wZXJhdGlvbihpbnB1dCwgeyBzaWduYWw6IHNpZ25hbC5zaWduYWwgfSk7XG5cdFx0XHRcdGlmIChnZW5lcmF0aW9uLmN1cnJlbnQgIT09IG1pbmUgfHwgIW1vdW50ZWQuY3VycmVudCkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0U3RhdGUoeyBzdGF0dXM6IFwib2tcIiwgdmFsdWUgfSk7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGlmIChnZW5lcmF0aW9uLmN1cnJlbnQgIT09IG1pbmUgfHwgIW1vdW50ZWQuY3VycmVudCkge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgUWdpc1Nka0JyaWRnZUFib3J0ZWRFcnJvcikge1xuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0U3RhdGUoe1xuXHRcdFx0XHRcdHN0YXR1czogXCJlcnJvclwiLFxuXHRcdFx0XHRcdGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXIuY3VycmVudCA9PT0gc2lnbmFsKSB7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5jdXJyZW50ID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29wZXJhdGlvbiwgYWJvcnRdLFxuXHQpO1xuXG5cdGNvbnN0IHJlc2V0ID0gdXNlQ2FsbGJhY2soKCk6IHZvaWQgPT4ge1xuXHRcdGFib3J0KCk7XG5cdFx0c2V0U3RhdGUoSURMRSk7XG5cdH0sIFthYm9ydF0pO1xuXG5cdGNvbnN0IGNvbnRyb2xzID0gdXNlTWVtbygoKSA9PiAoeyBhYm9ydCwgcmVzZXQgfSksIFthYm9ydCwgcmVzZXRdKTtcblx0cmV0dXJuIFtzdGF0ZSwgcnVuLCBjb250cm9sc107XG59XG5cbi8qKiBIb3cgYSBzdHJlYW0gZW5kZWQsIGFzIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIHJlcG9ydHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbVRlcm1pbmFsTGlrZSB7XG5cdHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblx0cmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblx0cmVhZG9ubHkgZHJvcHBlZD86IG51bWJlcjtcbn1cblxuLyoqIFRoZSBoYW5kbGUgYSBnZW5lcmF0ZWQgc3RyZWFtIG1lbWJlciByZXNvbHZlcyB3aXRoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVMaWtlIHtcblx0cmVhZG9ubHkgaWQ6IHN0cmluZztcblx0cmVhZG9ubHkgY2xvc2VkOiBib29sZWFuO1xuXHRjbG9zZSgpOiB2b2lkO1xufVxuXG4vKiogSGFuZGxlcnMgZm9yIGEgc3RyZWFtLCBhcyBhIGdlbmVyYXRlZCBtb2R1bGUgdHlwZXMgdGhlbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnNMaWtlPEU+IHtcblx0cmVhZG9ubHkgb25FdmVudD86IChldmVudDogRSkgPT4gdm9pZDtcblx0cmVhZG9ubHkgb25UZXJtaW5hbD86ICh0ZXJtaW5hbDogU3RyZWFtVGVybWluYWxMaWtlKSA9PiB2b2lkO1xufVxuXG4vKiogQSBzdHJlYW0gbWVtYmVyIG9mIGEgZ2VuZXJhdGVkIG1hcC4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbTxJLCBFPiA9IChcblx0aW5wdXQ6IEksXG5cdGhhbmRsZXJzOiBTdHJlYW1IYW5kbGVyc0xpa2U8RT4sXG5cdG9wdGlvbnM/OiB7IHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsIH0sXG4pID0+IFByb21pc2U8U3RyZWFtSGFuZGxlTGlrZT47XG5cbi8qKiBXaGVyZSBvbmUgc3Vic2NyaXB0aW9uIHN0YW5kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtU3RhdGU8RT4ge1xuXHQvKiogYGlkbGVgIHdpdGggYSBudWxsIGlucHV0LCBgZmFpbGVkYCB3aGVuIHRoZSBob3N0IHJlZnVzZWQgdG8gb3BlbiBpdC4gKi9cblx0cmVhZG9ubHkgc3RhdHVzOiBcImlkbGVcIiB8IFwib3BlbmluZ1wiIHwgXCJvcGVuXCIgfCBcImVuZGVkXCIgfCBcImZhaWxlZFwiO1xuXHRyZWFkb25seSBsYXN0RXZlbnQ6IEUgfCBudWxsO1xuXHRyZWFkb25seSB0ZXJtaW5hbDogU3RyZWFtVGVybWluYWxMaWtlIHwgbnVsbDtcblx0cmVhZG9ubHkgZXJyb3I6IEVycm9yIHwgbnVsbDtcbn1cblxuY29uc3QgSURMRV9TVFJFQU06IFN0cmVhbVN0YXRlPG5ldmVyPiA9IE9iamVjdC5mcmVlemUoe1xuXHRzdGF0dXM6IFwiaWRsZVwiLFxuXHRsYXN0RXZlbnQ6IG51bGwsXG5cdHRlcm1pbmFsOiBudWxsLFxuXHRlcnJvcjogbnVsbCxcbn0pO1xuXG5mdW5jdGlvbiBzdGFibGVLZXkodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIChfa2V5LCBpdGVtOiB1bmtub3duKSA9PlxuXHRcdGlzUGxhaW5SZWNvcmQoaXRlbSlcblx0XHRcdD8gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0XHRcdE9iamVjdC5lbnRyaWVzKGl0ZW0pLnNvcnQoKFthXSwgW2JdKSA9PiAoYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApKSxcblx0XHRcdFx0KVxuXHRcdFx0OiBpdGVtLFxuXHQpO1xufVxuXG4vKipcbiAqIEhvbGQgYSBnZW5lcmF0ZWQgc3RyZWFtIG9wZW4gd2hpbGUgYSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAqXG4gKiBUaGUgc3Vic2NyaXB0aW9uIGZvbGxvd3MgYG9wZW5gIGFuZCB0aGUgKmNvbnRlbnQqIG9mIGBpbnB1dGA6IGEgbmV3IG9iamVjdFxuICogd2l0aCB0aGUgc2FtZSBmaWVsZHMgZG9lcyBub3QgcmVvcGVuIGl0LCBhIGRpZmZlcmVudCBvbmUgY2xvc2VzIHRoZSBvbGRcbiAqIHN0cmVhbSBhbmQgb3BlbnMgYSBuZXcgb25lLCBhbmQgYG51bGxgIGNsb3NlcyBpdC4gSGFuZGxlcnMgYXJlIHJlYWQgZnJlc2hcbiAqIG9uIGV2ZXJ5IGZyYW1lLCBzbyBhIG5ldyBjbG9zdXJlIGRvZXMgbm90IHJlb3BlbiBhbnl0aGluZyBlaXRoZXIuIFVubW91bnRcbiAqIGNsb3NlcyB0aGUgc3RyZWFtLCBldmVuIGlmIHRoZSBob3N0IGhhcyBub3QgeWV0IGFja25vd2xlZGdlZCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0cmVhbTxJLCBFPihcblx0b3BlbjogU3RyZWFtPEksIEU+LFxuXHRpbnB1dDogSSB8IG51bGwsXG5cdGhhbmRsZXJzOiBTdHJlYW1IYW5kbGVyc0xpa2U8RT4gPSB7fSxcbik6IFN0cmVhbVN0YXRlPEU+IHtcblx0Y29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxTdHJlYW1TdGF0ZTxFPj4oSURMRV9TVFJFQU0pO1xuXHRjb25zdCBsYXRlc3QgPSB1c2VSZWYoaGFuZGxlcnMpO1xuXHRsYXRlc3QuY3VycmVudCA9IGhhbmRsZXJzO1xuXHRjb25zdCBrZXkgPSBpbnB1dCA9PT0gbnVsbCA/IG51bGwgOiBzdGFibGVLZXkoaW5wdXQpO1xuXHQvLyBgaW5wdXRgIGlzIGRlbGliZXJhdGVseSByZWFkIHRocm91Z2ggYGtleWA6IHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWVcblx0Ly8gZmllbGRzIGFyZSB0aGUgc2FtZSBzdWJzY3JpcHRpb24uXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlucHV0KTtcblx0aW5wdXRSZWYuY3VycmVudCA9IGlucHV0O1xuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGtleSA9PT0gbnVsbCkge1xuXHRcdFx0c2V0U3RhdGUoSURMRV9TVFJFQU0pO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudCA9IGlucHV0UmVmLmN1cnJlbnQgYXMgSTtcblx0XHRsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cdFx0bGV0IGhhbmRsZTogU3RyZWFtSGFuZGxlTGlrZSB8IG51bGwgPSBudWxsO1xuXHRcdHNldFN0YXRlKHtcblx0XHRcdHN0YXR1czogXCJvcGVuaW5nXCIsXG5cdFx0XHRsYXN0RXZlbnQ6IG51bGwsXG5cdFx0XHR0ZXJtaW5hbDogbnVsbCxcblx0XHRcdGVycm9yOiBudWxsLFxuXHRcdH0pO1xuXHRcdG9wZW4oY3VycmVudCwge1xuXHRcdFx0b25FdmVudDogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChjYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bGF0ZXN0LmN1cnJlbnQub25FdmVudD8uKGV2ZW50KTtcblx0XHRcdFx0c2V0U3RhdGUoKHByZXZpb3VzKSA9PiAoeyAuLi5wcmV2aW91cywgbGFzdEV2ZW50OiBldmVudCB9KSk7XG5cdFx0XHR9LFxuXHRcdFx0b25UZXJtaW5hbDogKHRlcm1pbmFsKSA9PiB7XG5cdFx0XHRcdGlmIChjYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0bGF0ZXN0LmN1cnJlbnQub25UZXJtaW5hbD8uKHRlcm1pbmFsKTtcblx0XHRcdFx0c2V0U3RhdGUoKHByZXZpb3VzKSA9PiAoeyAuLi5wcmV2aW91cywgc3RhdHVzOiBcImVuZGVkXCIsIHRlcm1pbmFsIH0pKTtcblx0XHRcdH0sXG5cdFx0fSkudGhlbihcblx0XHRcdChvcGVuZWQpID0+IHtcblx0XHRcdFx0aWYgKGNhbmNlbGxlZCkge1xuXHRcdFx0XHRcdG9wZW5lZC5jbG9zZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRoYW5kbGUgPSBvcGVuZWQ7XG5cdFx0XHRcdHNldFN0YXRlKChwcmV2aW91cykgPT5cblx0XHRcdFx0XHRwcmV2aW91cy5zdGF0dXMgPT09IFwiZW5kZWRcIlxuXHRcdFx0XHRcdFx0PyBwcmV2aW91c1xuXHRcdFx0XHRcdFx0OiB7IC4uLnByZXZpb3VzLCBzdGF0dXM6IFwib3BlblwiIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KGVycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdGlmIChjYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0c2V0U3RhdGUoe1xuXHRcdFx0XHRcdHN0YXR1czogXCJmYWlsZWRcIixcblx0XHRcdFx0XHRsYXN0RXZlbnQ6IG51bGwsXG5cdFx0XHRcdFx0dGVybWluYWw6IG51bGwsXG5cdFx0XHRcdFx0ZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdCk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNhbmNlbGxlZCA9IHRydWU7XG5cdFx0XHRoYW5kbGU/LmNsb3NlKCk7XG5cdFx0fTtcblx0fSwgW29wZW4sIGtleV0pO1xuXG5cdHJldHVybiBzdGF0ZTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFnQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3Qk8sTUFBTSxnQ0FBZ0MsY0FBYTtBQUFBLEVBQ2xELFdBQVcsQ0FBQyxTQUFpQjtBQUFBLElBQ25DLE1BQU0sU0FBUyxlQUFlO0FBQUE7QUFFaEM7QUFPQSxJQUFNLGdCQUFnQixjQUE2QixJQUFJO0FBNkJoRCxTQUFTLGNBQWMsQ0FBQyxPQUEwQztBQUFBLEVBQ3hFLFFBQVEsTUFBTSxRQUFRLFdBQVcsU0FBUyxhQUFhO0FBQUEsRUFDdkQsTUFBTSxRQUFRLENBQUMsTUFBTSxRQUFRLFNBQVMsRUFBRSxPQUN2QyxDQUFDLFdBQVcsV0FBVyxTQUN4QixFQUFFO0FBQUEsRUFDRixJQUFJLFVBQVUsR0FBRztBQUFBLElBQ2hCLE1BQU0sSUFBSSx3QkFDVCwrREFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLE1BQU0sWUFBWSxTQUFTO0FBQUEsRUFDM0IsT0FBTyxPQUFPLFlBQVksU0FBOEIsSUFBSTtBQUFBLEVBQzVELFVBQVUsTUFBTTtBQUFBLElBQ2YsSUFBSSxjQUFjLFdBQVc7QUFBQSxNQUM1QjtBQUFBLElBQ0Q7QUFBQSxJQUNBLE1BQU0sT0FBTyxJQUFJLGNBQ2hCLFdBQ0EsY0FBYyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FDNUM7QUFBQSxJQUNBLFNBQVMsSUFBSTtB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U0FBUyxPQUFPLFFBQVE7QUFBQSxFQUM5QixPQUFPLFVBQVU7QUFBQSxFQUNqQixNQUFNLE1BQU0sVUFBVSxPQUFPLE9BQU8sVUFBVSxLQUFLO0FBQUEsRUFHbkQsTUFBTSxXQUFXLE9BQU8sS0FBSztBQUFBLEVBQzdCLFNBQVMsVUFBVTtBQUFBLEVBRW5CLFVBQVUsTUFBTTtBQUFBLElBQ2YsSUFBSSxRQUFRLE1BQU07QUFBQSxNQUNqQixTQUFTLFdBQVc7QUFBQSxNQUNwQjtBQUFBLElBQ0Q7QUFBQSxJQUNBLE1BQU0sVUFBVSxTQUFTO0FBQUEsSUFDekIsSUFBSSxZQUFZO0FBQUEsSUFDaEIsSUFBSSxTQUFrQztBQUFBLElBQ3RDLFNBQVM7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLFVBQVU7QUFBQSxNQUNWLE9BQU87QUFBQSxJQUNSLENBQUM7QUFBQSxJQUNELEtBQUssU0FBUztBQUFBLE1BQ2IsU0FBUyxDQUFDLFVBQVU7QUFBQSxRQUNuQixJQUFJLFdBQVc7QUFBQSxVQUNkO0FBQUEsUUFDRDtBQUFBLFFBQ0EsT0FBTyxRQUFRLFVBQVUsS0FBSztBQUFBLFFBQzlCLFNBQVMsQ0FBQyxjQUFjLEtBQUssVUFBVSxXQUFXLE1BQU0sRUFBRTtBQUFBO0FBQUEsTUFFM0QsWUFBWSxDQUFDLGFBQWE7QUFBQSxRQUN6QixJQUFJLFdBQVc7QUFBQSxVQUNkO0FBQUEsUUFDRDtBQUFBLFFBQ0EsT0FBTyxRQUFRLGFBQWEsUUFBUTtBQUFBLFFBQ3BDLFNBQVMsQ0FBQyxjQUFjLEtBQUssVUFBVSxRQUFRLFNBQVMsU0FBUyxFQUFFO0FBQUE7QUFBQSxJQUVyRSxDQUFDLEVBQUUsS0FDRixDQUFDLFdBQVc7QUFBQSxNQUNYLElBQUksV0FBVztBQUFBLFFBQ2QsT0FBTyxNQUFNO0FBQUEsUUFDYjtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxNQUNULFNBQVMsQ0FBQyxhQUNULFNBQVMsV0FBVyxVQUNqQixXQUNBLEtBQUssVUFBVSxRQUFRLE9BQU8sQ0FDbEM7QUFBQSxPQUVELENBQUMsVUFBbUI7QUFBQSxNQUNuQixJQUFJLFdBQVc7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1IsUUFBUTtBQUFBLFFBQ1IsV0FBVztBQUFBLFFBQ1gsVUFBVTtBQUFBLFFBQ1YsT0FBTyxpQkFBaUIsUUFBUSxRQUFRLElBQUksTUFBTSxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQ2hFLENBQUM7QUFBQSxLQUVIO0FBQUEsSUFDQSxPQUFPLE1BQU07QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLFFBQVEsTUFBTTtBQUFBO0FBQUEsS0FFYixDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQUEsRUFFZCxPQUFPO0FBQUE7IiwKICAiZGVidWdJZCI6ICIwRkE4MzcxRDQ3NDAzNEZGNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
class QgisSdkError2 extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, code = "sdk_error") {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = new.target.name;
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { QgisSdkError2 };
|
|
12
|
+
|
|
13
|
+
//# debugId=87B5084359C9044664756E2164756E21
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2Vycm9ycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIFRoZSBvbmUgZXJyb3Igcm9vdCBvZiBgQGFyY2hvbnQ1NjEvcWdpcy1zZGtgLlxuICpcbiAqIEV2ZXJ5IGVycm9yIHRoaXMgcGFja2FnZSByYWlzZXMgLSB0cmFuc3BvcnQsIGhvc3QgY29udHJhY3QsIFJlYWN0IGJpbmRpbmcsXG4gKiB0ZXN0IGhhcm5lc3MgLSBleHRlbmRzIGBRZ2lzU2RrRXJyb3JgLCBzbyBhIHBhZ2UgY2FuIGNhdGNoIHRoZSBmYW1pbHkgaW4gb25lXG4gKiBgaW5zdGFuY2VvZmAgYW5kIHN3aXRjaCBvbiB0aGUgc3RhYmxlIHdpcmUgYGNvZGVgIHJhdGhlciB0aGFuIG9uIGNsYXNzIG5hbWVzXG4gKiBvciBtZXNzYWdlIHRleHQuIFRoZSBjbGFzcyBsaXZlcyBpbiBpdHMgb3duIG1vZHVsZSBzbyB0aGUgZW50cnkgcG9pbnRzIGNhblxuICogc2hhcmUgaXQgd2l0aG91dCBpbXBvcnRpbmcgZWFjaCBvdGhlci5cbiAqL1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGV4cGVjdGVkIFNESyBlcnJvcnMgYWNyb3NzIHRoZSBicmlkZ2UgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRZ2lzU2RrRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgY29kZTogc3RyaW5nID0gXCJzZGtfZXJyb3JcIikge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXMubmFtZSA9IG5ldy50YXJnZXQubmFtZTtcblx0XHR0aGlzLmNvZGUgPSBjb2RlO1xuXHR9XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBYU8sTUFBTSxzQkFBcUIsTUFBTTtBQUFBLEVBQ3ZCO0FBQUEsRUFFVCxXQUFXLENBQUMsU0FBaUIsT0FBZSxhQUFhO0FBQUEsSUFDL0QsTUFBTSxPQUFPO0FBQUEsSUFDYixLQUFLLE9BQU8sV0FBVztBQUFBLElBQ3ZCLEtBQUssT0FBTztBQUFBO0FBRWQ7IiwKICAiZGVidWdJZCI6ICI4N0I1MDg0MzU5QzkwNDQ2NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|