@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/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 QgisSdkError {
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?: BridgeClient;
19
+ readonly client?: BridgeClient2;
110
20
  /** A transport the provider builds and owns a client for. */
111
- readonly transport?: WireTransport;
21
+ readonly transport?: WireTransport2;
112
22
  /** Options for the owned client; ignored when `client` is given. */
113
- readonly options?: BridgeClientOptions;
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(): BridgeClient;
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: BridgeClient) => T): T;
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
- QgisSdkError2,
3
- isPlainRecord2
4
- } from "./shared/chunk-0fknax6w.js";
5
- import {
2
+ isPlainRecord,
6
3
  QgisSdkBridgeAbortedError2,
7
4
  BridgeClient2
8
- } from "./shared/chunk-a7bjgeve.js";
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
- if (client === undefined === (transport === undefined)) {
30
- throw new QgisSdkBridgeReactError("BridgeProvider needs exactly one of client or transport");
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 = client ?? owned;
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
- const client = useContext(ClientContext);
50
- if (client === null) {
51
- throw new QgisSdkBridgeReactError("useBridgeClient needs a BridgeProvider above it");
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 client;
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) => isPlainRecord2(item) ? Object.fromEntries(Object.entries(item).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) : 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=B9173116D0A8AD4364756E2164756E21
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/LmNsb3NlKCk7XG5cdFx0fTtcblx0fSwgW29wZW4sIGtleV0pO1xuXG5cdHJldHVybiBzdGF0ZTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFnQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQk8sTUFBTSxnQ0FBZ0MsY0FBYTtBQUFBLEVBQ2xELFdBQVcsQ0FBQyxTQUFpQjtBQUFBLElBQ25DLE1BQU0sU0FBUyxlQUFlO0FBQUE7QUFFaEM7QUFFQSxJQUFNLGdCQUFnQixjQUFtQyxJQUFJO0FBd0J0RCxTQUFTLGNBQWMsQ0FBQyxPQUEwQztBQUFBLEVBQ3hFLFFBQVEsUUFBUSxXQUFXLFNBQVMsYUFBYTtBQUFBLEVBQ2pELElBQUssV0FBVyxlQUFnQixjQUFjLFlBQVk7QUFBQSxJQUN6RCxNQUFNLElBQUksd0JBQ1QseURBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxNQUFNLFlBQVksU0FBUztBQUFBLEVBQzNCLE9BQU8sT0FBTyxZQUFZLFNBQThCLElBQUk7QUFBQSxFQUM1RCxVQUFVLE1BQU07QUFBQSxJQUNmLElBQUksY0FBYyxXQUFXO0FBQUEsTUFDNUI7QUFBQSxJQUNEO0FBQUEsSUFDQSxNQUFNLE9BQU8sSUFBSSxjQUNoQixXQUNBLGNBQWMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQzVDO0FBQUEsSUFDQSxTQUFTLElBQUk7QUFBQSxJQUNiLE9BQU8sTUFBTTtBQUFBLE1BQ1osS0FBSyxNQUFNO0FBQUEsTUFDWCxTQUFTLENBQUMsWUFBYSxZQUFZLE9BQU8sT0FBTyxPQUFRO0FBQUE7QUFBQSxLQUV4RCxDQUFDLFdBQVcsU0FBUyxDQUFDO0FBQUEsRUFDekIsTUFBTSxRQUFRLFVBQVU7QUFBQSxFQUN4QixPQUFPLGNBQ04sY0FBYyxVQUNkLEVBQUUsTUFBTSxHQUNSLFVBQVUsT0FBTyxPQUFPLFFBQ3pCO0FBQUE7QUFJTSxTQUFTLGVBQWUsR0FBaUI7QUFBQSxFQUMvQyxNQUFNLFNBQVMsV0FBVyxhQUFhO0FBQUEsRUFDdkMsSUFBSSxXQUFXLE1BQU07QUFBQSxJQUNwQixNQUFNLElBQUksd0JBQ1QsaURBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUFNRCxTQUFTLGFBQWdCLENBQUMsUUFBd0M7QUFBQSxFQUN4RSxNQUFNLFNBQVMsZ0JBQWdCO0FBQUEsRUFDL0IsT0FBTyxRQUFRLE1BQU0sT0FBTyxNQUFNLEdBQUcsQ0FBQyxRQUFRLE1BQU0sQ0FBQztBQUFBO0FBd0J0RCxJQUFNLE9BQThCLE9BQU8sT0FBTyxFQUFFLFFBQVEsT0FBTyxDQUFDO0FBQ3BFLElBQU0sVUFBaUMsT0FBTyxPQUFPLEVBQUUsUUFBUSxVQUFVLENBQUM7QUFVbkUsU0FBUyxZQUFrQixDQUNqQyxXQUtDO0FBQUEsRUFDRCxPQUFPLE9BQU8sWUFBWSxTQUE0QixJQUFJO0FBQUEsRUFDMUQsTUFBTSxhQUFhLE9BQU8sQ0FBQztBQUFBLEVBQzNCLE1BQU0sYUFBYSxPQUErQixJQUFJO0FBQUEsRUFDdEQsTUFBTSxVQUFVLE9BQU8sSUFBSTtBQUFBLEVBRTNCLE1BQU0sUUFBUSxZQUFZLE1BQVk7QUFBQSxJQUNyQyxXQUFXLFdBQVc7QUFBQSxJQUN0QixXQUFXLFNBQVMsTUFBTTtBQUFBLElBQzFCLFdBQVcsVUFBVTtBQUFBLEtBQ25CLENBQUMsQ0FBQztBQUFBLEVBRUwsVUFBVSxNQUFNO0FBQUEsSUFDZixRQUFRLFVBQVU7QUFBQSxJQUNsQixPQUFPLE1BQU07QUFBQSxNQUNaLFFBQVEsVUFBVTtBQUFBLE1BQ2xCLE1BQU07QUFBQTtBQUFBLEtBRUwsQ0FBQyxLQUFLLENBQUM7QUFBQSxFQUVWLE1BQU0sTUFBTSxZQUNYLE9BQU8sVUFBcUM7QUFBQSxJQUMzQyxNQUFNO0FBQUEsSUFDTixNQUFNLE9BQU8sV0FBVztBQUFBLElBQ3hCLE1BQU0sU0FBUyxJQUFJO0FBQUEsSUFDbkIsV0FBVyxVQUFVO0FBQUEsSUFDckIsU0FBUyxPQUFPO0FBQUEsSUFDaEIsSUFBSTtBQUFBLE1BQ0gsTUFBTSxRQUFRLE1BQU0sVUFBVSxPQUFPLEVBQUUsUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUFBLE1BQzlELElBQUksV0FBVyxZQUFZLFFBQVEsQ0FBQyxRQUFRLFNBQVM7QUFBQSxRQUNwRDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVMsRUFBRSxRQUFRLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDaEMsT0FBTztBQUFBLE1BQ04sT0FBTyxPQUFPO0FBQUEsTUFDZixJQUFJLFdBQVcsWUFBWSxRQUFRLENBQUMsUUFBUSxTQUFTO0FBQUEsUUFDcEQ7QUFBQSxNQUNEO0FBQUEsTUFDQSxJQUFJLGlCQUFpQiw0QkFBMkI7QUFBQSxRQUMvQztBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLE9BQU8saUJBQWlCLFFBQVEsUUFBUSxJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFBQSxNQUNoRSxDQUFDO0FBQUEsTUFDRDtBQUFBLGNBQ0M7QUFBQSxNQUNELElBQUksV0FBVyxZQUFZLFFBQVE7QUFBQSxRQUNsQyxXQUFXLFVBQVU7QUFBQSxNQUN0QjtBQUFBO0FBQUEsS0FHRixDQUFDLFdBQVcsS0FBSyxDQUNsQjtBQUFBLEVBRUEsTUFBTSxRQUFRLFlBQVksTUFBWTtBQUFBLElBQ3JDLE1BQU07QUFBQSxJQUNOLFNBQVMsSUFBSTtBQUFBLEtBQ1gsQ0FBQyxLQUFLLENBQUM7QUFBQSxFQUVWLE1BQU0sV0FBVyxRQUFRLE9BQU8sRUFBRSxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDO0FBQUEsRUFDakUsT0FBTyxDQUFDLE9BQU8sS0FBSyxRQUFRO0FBQUE7QUF1QzdCLElBQU0sY0FBa0MsT0FBTyxPQUFPO0FBQUEsRUFDckQsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUNSLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxPQUF3QjtBQUFBLEVBQzFDLE9BQU8sS0FBSyxVQUFVLE9BQU8sQ0FBQyxNQUFNLFNBQ25DLGVBQWMsSUFBSSxJQUNmLE9BQU8sWUFDUCxPQUFPLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLE9BQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBRSxDQUNyRSxJQUNDLElBQ0o7QUFBQTtBQVlNLFNBQVMsU0FBZSxDQUM5QixNQUNBLE9BQ0EsV0FBa0MsQ0FBQyxHQUNsQjtBQUFBLEVBQ2pCLE9BQU8sT0FBTyxZQUFZLFNBQXlCLFdBQVc7QUFBQSxFQUM5RCxNQUFNLFNBQVMsT0FBTyxRQUFRO0FBQUEsRUFDOUIsT0FBTyxVQUFVO0FBQUEsRUFDakIsTUFBTSxNQUFNLFVBQVUsT0FBTyxPQUFPLFVBQVUsS0FBSztBQUFBLEVBR25ELE1BQU0sV0FBVyxPQUFPLEtBQUs7QUFBQSxFQUM3QixTQUFTLFVBQVU7QUFBQSxFQUVuQixVQUFVLE1BQU07QUFBQSxJQUNmLElBQUksUUFBUSxNQUFNO0FBQUEsTUFDakIsU0FBUyxXQUFXO0FBQUEsTUFDcEI7QUFBQSxJQUNEO0FBQUEsSUFDQSxNQUFNLFVBQVUsU0FBUztBQUFBLElBQ3pCLElBQUksWUFBWTtBQUFBLElBQ2hCLElBQUksU0FBa0M7QUFBQSxJQUN0QyxTQUFTO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsSUFDUixDQUFDO0FBQUEsSUFDRCxLQUFLLFNBQVM7QUFBQSxNQUNiLFNBQVMsQ0FBQyxVQUFVO0FBQUEsUUFDbkIsSUFBSSxXQUFXO0FBQUEsVUFDZDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLE9BQU8sUUFBUSxVQUFVLEtBQUs7QUFBQSxRQUM5QixTQUFTLENBQUMsY0FBYyxLQUFLLFVBQVUsV0FBVyxNQUFNLEVBQUU7QUFBQTtBQUFBLE1BRTNELFlBQVksQ0FBQyxhQUFhO0FBQUEsUUFDekIsSUFBSSxXQUFXO0FBQUEsVUFDZDtBQUFBLFFBQ0Q7QUFBQSxRQUNBLE9BQU8sUUFBUSxhQUFhLFFBQVE7QUFBQSxRQUNwQyxTQUFTLENBQUMsY0FBYyxLQUFLLFVBQVUsUUFBUSxTQUFTLFNBQVMsRUFBRTtBQUFBO0FBQUEsSUFFckUsQ0FBQyxFQUFFLEtBQ0YsQ0FBQyxXQUFXO0FBQUEsTUFDWCxJQUFJLFdBQVc7QUFBQSxRQUNkLE9BQU8sTUFBTTtBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxTQUFTLENBQUMsYUFDVCxTQUFTLFdBQVcsVUFDakIsV0FDQSxLQUFLLFVBQVUsUUFBUSxPQUFPLENBQ2xDO0FBQUEsT0FFRCxDQUFDLFVBQW1CO0FBQUEsTUFDbkIsSUFBSSxXQUFXO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNSLFFBQVE7QUFBQSxRQUNSLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUNWLE9BQU8saUJBQWlCLFFBQVEsUUFBUSxJQUFJLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFBQSxNQUNoRSxDQUFDO0FBQUEsS0FFSDtBQUFBLElBQ0EsT0FBTyxNQUFNO0FBQUEsTUFDWixZQUFZO0FBQUEsTUFDWixRQUFRLE1BQU07QUFBQTtBQUFBLEtBRWIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUFBLEVBRWQsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiQjkxNzMxMTZEMEE4QUQ0MzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
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==