@arena-im/react-sdk-auth 1.9.0-wid-961.4
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/config/index.d.ts +11 -0
- package/config/index.d.ts.map +1 -0
- package/context/anonymous-token-provider.d.ts +5 -0
- package/context/anonymous-token-provider.d.ts.map +1 -0
- package/context/auth-dialog-provider.d.ts +25 -0
- package/context/auth-dialog-provider.d.ts.map +1 -0
- package/context/config-provider.d.ts +14 -0
- package/context/config-provider.d.ts.map +1 -0
- package/context/index.d.ts +8 -0
- package/context/index.d.ts.map +1 -0
- package/context/user-provider.d.ts +5 -0
- package/context/user-provider.d.ts.map +1 -0
- package/dialog/index.d.ts +2 -0
- package/dialog/index.d.ts.map +1 -0
- package/hooks/use-token-event-listener.d.ts +4 -0
- package/hooks/use-token-event-listener.d.ts.map +1 -0
- package/hooks/use-tokens.d.ts +19 -0
- package/hooks/use-tokens.d.ts.map +1 -0
- package/hooks/use-track.d.ts +3 -0
- package/hooks/use-track.d.ts.map +1 -0
- package/hooks/use-user.d.ts +25 -0
- package/hooks/use-user.d.ts.map +1 -0
- package/index.d.ts +249 -0
- package/index.d.ts.map +1 -0
- package/index.esm.js +2 -0
- package/index.umd.js +2 -0
- package/package.json +75 -0
- package/services/auth/types.d.ts +51 -0
- package/services/auth/types.d.ts.map +1 -0
- package/services/auth/use-auth-services.d.ts +5 -0
- package/services/auth/use-auth-services.d.ts.map +1 -0
- package/services/profile/types.d.ts +17 -0
- package/services/profile/types.d.ts.map +1 -0
- package/services/profile/use-profile-services.d.ts +6 -0
- package/services/profile/use-profile-services.d.ts.map +1 -0
- package/stores/index.d.ts +3 -0
- package/stores/index.d.ts.map +1 -0
- package/stores/token-store.d.ts +38 -0
- package/stores/token-store.d.ts.map +1 -0
- package/stores/user-store.d.ts +30 -0
- package/stores/user-store.d.ts.map +1 -0
- package/types/analytics.d.ts +59 -0
- package/types/analytics.d.ts.map +1 -0
- package/types/index.d.ts +3 -0
- package/types/index.d.ts.map +1 -0
- package/types/token.d.ts +20 -0
- package/types/token.d.ts.map +1 -0
- package/utils/analytics.d.ts +7 -0
- package/utils/analytics.d.ts.map +1 -0
- package/utils/dom-events.d.ts +10 -0
- package/utils/dom-events.d.ts.map +1 -0
- package/utils/request.d.ts +8 -0
- package/utils/request.d.ts.map +1 -0
- package/utils/url.d.ts +2 -0
- package/utils/url.d.ts.map +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Config {
|
|
2
|
+
profileServiceUrl: string;
|
|
3
|
+
identityServiceUrl: string;
|
|
4
|
+
refreshTokenApiKey: string;
|
|
5
|
+
authIframeUrl: string;
|
|
6
|
+
environment: 'development' | 'production';
|
|
7
|
+
debug: boolean;
|
|
8
|
+
}
|
|
9
|
+
export type Environment = 'development' | 'production';
|
|
10
|
+
export declare const getConfig: (environment: Environment) => Config;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC;IAC1C,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAEvD,eAAO,MAAM,SAAS,GAAI,aAAa,WAAW,KAAG,MAyBpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonymous-token-provider.d.ts","sourceRoot":"","sources":["../../src/context/anonymous-token-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAKzC,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,mBAoBA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { UserProps } from '../services/auth/types';
|
|
3
|
+
import { TrackOptions } from '../types/analytics';
|
|
4
|
+
interface AuthDialogContextType {
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
appName: string | undefined;
|
|
7
|
+
appDescription: string | undefined;
|
|
8
|
+
trackOptions: TrackOptions | undefined;
|
|
9
|
+
onAuthCompleted: ((user: UserProps) => void) | undefined;
|
|
10
|
+
openDialog: (options: OpenDialogOptions) => void;
|
|
11
|
+
closeDialog: () => void;
|
|
12
|
+
onOpenChange: (open: boolean) => void;
|
|
13
|
+
}
|
|
14
|
+
type OpenDialogOptions = {
|
|
15
|
+
trackOptions: TrackOptions;
|
|
16
|
+
appName?: string;
|
|
17
|
+
appDescription?: string;
|
|
18
|
+
onAuthCompleted?: () => (user: UserProps) => void;
|
|
19
|
+
};
|
|
20
|
+
export declare const AuthDialogProvider: ({ children }: {
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare const useAuthDialog: () => AuthDialogContextType;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=auth-dialog-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-dialog-provider.d.ts","sourceRoot":"","sources":["../../src/context/auth-dialog-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAE,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,UAAU,qBAAqB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAMD,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,4CA4CvE,CAAC;AAEF,eAAO,MAAM,aAAa,6BAMzB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Environment, Config } from '../config';
|
|
3
|
+
interface ConfigContextType {
|
|
4
|
+
config: Config;
|
|
5
|
+
environment: Environment;
|
|
6
|
+
}
|
|
7
|
+
interface ConfigProviderProps {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
environment?: Environment;
|
|
10
|
+
}
|
|
11
|
+
export declare const ConfigProvider: ({ children, environment, }: ConfigProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare const useConfig: () => ConfigContextType;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=config-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-provider.d.ts","sourceRoot":"","sources":["../../src/context/config-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAa,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE3D,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;CAC1B;AAID,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,GAAI,4BAG5B,mBAAmB,4CAQrB,CAAC;AAEF,eAAO,MAAM,SAAS,yBAMrB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
2
|
+
export declare function AuthProvider({ children, queryClient, environment, }: {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
queryClient?: QueryClient;
|
|
5
|
+
environment?: 'production' | 'development';
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export { useAuthDialog } from './auth-dialog-provider';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAuB,MAAM,uBAAuB,CAAC;AAMzE,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC;CAC5C,2CAiBA;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-provider.d.ts","sourceRoot":"","sources":["../../src/context/user-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAMtD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,mBAyBvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dialog/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,UAAU,mDAoFjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-token-event-listener.d.ts","sourceRoot":"","sources":["../../src/hooks/use-token-event-listener.ts"],"names":[],"mappings":"AAcA,wBAAgB,qBAAqB;;EAuGpC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function useTokens(): {
|
|
2
|
+
getToken: (type: import("..").TokenType) => string | null;
|
|
3
|
+
getMostPrivilegedToken: (options?: Array<import("..").TokenType>) => {
|
|
4
|
+
type: import("..").TokenType;
|
|
5
|
+
idToken: string;
|
|
6
|
+
} | null;
|
|
7
|
+
getRefreshToken: (type: import("..").TokenType) => string | null;
|
|
8
|
+
updatePublicTokens: (idToken: string, refreshToken: string) => void;
|
|
9
|
+
updateAnonymousToken: (idToken: string) => void;
|
|
10
|
+
updateGuestTokens: (idToken: string) => void;
|
|
11
|
+
updateCustomToken: (idToken: string) => void;
|
|
12
|
+
clearTokens: () => void;
|
|
13
|
+
clearPublicTokens: () => void;
|
|
14
|
+
clearCustomTokens: () => void;
|
|
15
|
+
};
|
|
16
|
+
export declare function useToken(type: 'anonymous' | 'guest' | 'public' | 'custom'): import("..").TokenPair;
|
|
17
|
+
export declare function useTokenValue(type: 'anonymous' | 'guest' | 'public' | 'custom'): string | null;
|
|
18
|
+
export declare function useRefreshToken(type: 'anonymous' | 'guest' | 'public'): string | null | undefined;
|
|
19
|
+
//# sourceMappingURL=use-tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tokens.d.ts","sourceRoot":"","sources":["../../src/hooks/use-tokens.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS;;;;;;;kCAsBS,MAAM,gBAAgB,MAAM;oCAE1B,MAAM;iCAET,MAAM;iCAEN,MAAM;;;;EAMtC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,0BAEzE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,iBAGlD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,6BAErE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-track.d.ts","sourceRoot":"","sources":["../../src/hooks/use-track.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElE,wBAAgB,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,WAGvC,cAAc,WACZ,MAAM,eACF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UA2B/C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare function useUser(): import("../services/auth/types").UserProps | null;
|
|
2
|
+
export declare function usePublicProfile(): import("../services/profile/types").PublicProfile | null;
|
|
3
|
+
export declare function useRefreshedTokenLoaded(): boolean;
|
|
4
|
+
export declare function useUserActions(): {
|
|
5
|
+
setUser: (user: import("../services/auth/types").UserProps | null) => void;
|
|
6
|
+
setPublicProfile: (publicProfile: import("../services/profile/types").PublicProfile | null) => void;
|
|
7
|
+
logout: () => void;
|
|
8
|
+
refreshPublicTokens: (config: {
|
|
9
|
+
refreshTokenApiKey: string;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
setUserByTokenId: (idToken: string) => void;
|
|
12
|
+
loadStoredUser: (config?: {
|
|
13
|
+
refreshTokenApiKey: string;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
ssoV2Exchange: (ssoSourceID: string, jwt: string, env?: import("../config").Environment) => Promise<import("../services/auth/types").SsoV2ExchangeResponse>;
|
|
16
|
+
};
|
|
17
|
+
export declare function useUpdateProfile(): {
|
|
18
|
+
updatePublicProfile: (params: Omit<import("../services/profile/types").PublicProfile, "metadata">) => Promise<void>;
|
|
19
|
+
};
|
|
20
|
+
export declare function useUserWithProfile(): {
|
|
21
|
+
user: import("../services/auth/types").UserProps | null;
|
|
22
|
+
publicProfile: import("../services/profile/types").PublicProfile | null;
|
|
23
|
+
refreshedTokenLoaded: boolean;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=use-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-user.d.ts","sourceRoot":"","sources":["../../src/hooks/use-user.ts"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,sDAEtB;AAED,wBAAgB,gBAAgB,6DAE/B;AAED,wBAAgB,uBAAuB,YAEtC;AAED,wBAAgB,cAAc;;;;;;;;;;;;EAmB7B;AAED,wBAAgB,gBAAgB;;EAK/B;AAED,wBAAgB,kBAAkB;;;;EAYjC"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
3
|
+
import * as zustand from 'zustand';
|
|
4
|
+
|
|
5
|
+
interface UserProps {
|
|
6
|
+
uid: string;
|
|
7
|
+
email: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
photoURL?: string;
|
|
10
|
+
handle?: string;
|
|
11
|
+
}
|
|
12
|
+
interface SsoV2ExchangeResponse {
|
|
13
|
+
token: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
type Nullable<T> = T | null;
|
|
17
|
+
declare enum AnalyticsWidgetType {
|
|
18
|
+
AvatarProfile = "avatar-profile",
|
|
19
|
+
AvatarChat = "avatar-chat",
|
|
20
|
+
Comments = "comments",
|
|
21
|
+
GlobalProfile = "global-profile",
|
|
22
|
+
GroupChat = "group-chat",
|
|
23
|
+
Polls = "polls",
|
|
24
|
+
UniversalSnippet = "universal-snippet"
|
|
25
|
+
}
|
|
26
|
+
type TrackOptions = {
|
|
27
|
+
widgetId: string | null;
|
|
28
|
+
widgetType: AnalyticsWidgetType;
|
|
29
|
+
siteId: string;
|
|
30
|
+
rsWriteKey: string;
|
|
31
|
+
rsDataPlaneUrl: string;
|
|
32
|
+
trigger: string;
|
|
33
|
+
};
|
|
34
|
+
declare enum AnalyticsEvent {
|
|
35
|
+
AuthenticationCompleted = "Authentication Completed",
|
|
36
|
+
AuthenticationStarted = "Authentication Started",
|
|
37
|
+
AuthenticationViewed = "Authentication Viewed"
|
|
38
|
+
}
|
|
39
|
+
type TrackProps = Nullable<Record<string, unknown>>;
|
|
40
|
+
interface IdentityProps {
|
|
41
|
+
anonymousId?: string;
|
|
42
|
+
userId?: string;
|
|
43
|
+
}
|
|
44
|
+
interface RudderContext {
|
|
45
|
+
channel: 'web';
|
|
46
|
+
anonymousId?: string;
|
|
47
|
+
locale?: string;
|
|
48
|
+
userAgent?: string;
|
|
49
|
+
timezone?: string;
|
|
50
|
+
os?: {
|
|
51
|
+
name: string;
|
|
52
|
+
version?: string;
|
|
53
|
+
};
|
|
54
|
+
page?: {
|
|
55
|
+
path?: string;
|
|
56
|
+
referrer?: string;
|
|
57
|
+
referring_domain?: string;
|
|
58
|
+
search?: string;
|
|
59
|
+
title?: string;
|
|
60
|
+
url?: string;
|
|
61
|
+
initial_referrer?: string;
|
|
62
|
+
initial_referring_domain?: string;
|
|
63
|
+
};
|
|
64
|
+
screen?: {
|
|
65
|
+
density?: number;
|
|
66
|
+
height?: number;
|
|
67
|
+
width?: number;
|
|
68
|
+
innerHeight?: number;
|
|
69
|
+
innerWidth?: number;
|
|
70
|
+
};
|
|
71
|
+
campaign?: Record<string, string>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
interface AuthDialogContextType {
|
|
75
|
+
isOpen: boolean;
|
|
76
|
+
appName: string | undefined;
|
|
77
|
+
appDescription: string | undefined;
|
|
78
|
+
trackOptions: TrackOptions | undefined;
|
|
79
|
+
onAuthCompleted: ((user: UserProps) => void) | undefined;
|
|
80
|
+
openDialog: (options: OpenDialogOptions) => void;
|
|
81
|
+
closeDialog: () => void;
|
|
82
|
+
onOpenChange: (open: boolean) => void;
|
|
83
|
+
}
|
|
84
|
+
type OpenDialogOptions = {
|
|
85
|
+
trackOptions: TrackOptions;
|
|
86
|
+
appName?: string;
|
|
87
|
+
appDescription?: string;
|
|
88
|
+
onAuthCompleted?: () => (user: UserProps) => void;
|
|
89
|
+
};
|
|
90
|
+
declare const useAuthDialog: () => AuthDialogContextType;
|
|
91
|
+
|
|
92
|
+
declare function AuthProvider({ children, queryClient, environment, }: {
|
|
93
|
+
children: React.ReactNode;
|
|
94
|
+
queryClient?: QueryClient;
|
|
95
|
+
environment?: 'production' | 'development';
|
|
96
|
+
}): react_jsx_runtime.JSX.Element;
|
|
97
|
+
|
|
98
|
+
declare enum TokenType {
|
|
99
|
+
ANONYMOUS = "anonymous",
|
|
100
|
+
GUEST = "guest",
|
|
101
|
+
PUBLIC = "public",
|
|
102
|
+
CUSTOM = "custom"
|
|
103
|
+
}
|
|
104
|
+
interface TokenPair {
|
|
105
|
+
idToken: string | null;
|
|
106
|
+
refreshToken?: string | null;
|
|
107
|
+
}
|
|
108
|
+
type TokensMap = Record<TokenType, TokenPair>;
|
|
109
|
+
declare enum AuthCookie {
|
|
110
|
+
PUBLIC_ID_TOKEN = "arena-auth-public-id-token",
|
|
111
|
+
PUBLIC_REFRESH_TOKEN = "arena-auth-public-refresh-token",
|
|
112
|
+
ANONYMOUS_ID_TOKEN = "arena-auth-anonymous-id-token",
|
|
113
|
+
GUEST_ID_TOKEN = "arena-auth-guest-id-token",
|
|
114
|
+
CUSTOM_ID_TOKEN = "arena-auth-custom-id-token",
|
|
115
|
+
CUSTOM_USER = "arena-auth-custom-user"
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
interface TokenStore {
|
|
119
|
+
tokens: TokensMap;
|
|
120
|
+
getToken: (type: TokenType) => string | null;
|
|
121
|
+
getMostPrivilegedToken: (options?: Array<TokenType>) => {
|
|
122
|
+
type: TokenType;
|
|
123
|
+
idToken: string;
|
|
124
|
+
} | null;
|
|
125
|
+
getRefreshToken: (type: TokenType) => string | null;
|
|
126
|
+
updatePublicTokens: (idToken: string, refreshToken: string, source?: string) => void;
|
|
127
|
+
updateAnonymousToken: (idToken: string, source?: string) => void;
|
|
128
|
+
updateGuestTokens: (idToken: string, source?: string) => void;
|
|
129
|
+
updateCustomToken: (idToken: string, source?: string) => void;
|
|
130
|
+
clearTokens: (source?: string) => void;
|
|
131
|
+
clearPublicTokens: (source?: string) => void;
|
|
132
|
+
clearAnonymousTokens: (source?: string) => void;
|
|
133
|
+
clearGuestTokens: (source?: string) => void;
|
|
134
|
+
clearCustomTokens: (source?: string) => void;
|
|
135
|
+
silentUpdatePublicTokens: (idToken: string, refreshToken: string) => void;
|
|
136
|
+
silentUpdateAnonymousToken: (idToken: string) => void;
|
|
137
|
+
silentUpdateGuestTokens: (idToken: string) => void;
|
|
138
|
+
silentUpdateCustomToken: (idToken: string) => void;
|
|
139
|
+
silentClearPublicTokens: () => void;
|
|
140
|
+
silentClearAnonymousTokens: () => void;
|
|
141
|
+
silentClearGuestTokens: () => void;
|
|
142
|
+
silentClearCustomTokens: () => void;
|
|
143
|
+
}
|
|
144
|
+
declare const useTokenStore: zustand.UseBoundStore<Omit<zustand.StoreApi<TokenStore>, "subscribe"> & {
|
|
145
|
+
subscribe: {
|
|
146
|
+
(listener: (selectedState: TokenStore, previousSelectedState: TokenStore) => void): () => void;
|
|
147
|
+
<U>(selector: (state: TokenStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
|
|
148
|
+
equalityFn?: ((a: U, b: U) => boolean) | undefined;
|
|
149
|
+
fireImmediately?: boolean;
|
|
150
|
+
} | undefined): () => void;
|
|
151
|
+
};
|
|
152
|
+
}>;
|
|
153
|
+
|
|
154
|
+
interface PublicProfile {
|
|
155
|
+
displayName?: string;
|
|
156
|
+
handle?: string;
|
|
157
|
+
bio?: string;
|
|
158
|
+
metadata?: {
|
|
159
|
+
commentCountBySite?: {
|
|
160
|
+
[siteId: string]: number;
|
|
161
|
+
};
|
|
162
|
+
commentReactionCountBySite?: {
|
|
163
|
+
[siteId: string]: number;
|
|
164
|
+
};
|
|
165
|
+
overallCommentCount?: number;
|
|
166
|
+
overallCommentReactionCount?: number;
|
|
167
|
+
};
|
|
168
|
+
photoURL?: string;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
type Environment = 'development' | 'production';
|
|
172
|
+
|
|
173
|
+
interface UserStore {
|
|
174
|
+
user: UserProps | null;
|
|
175
|
+
publicProfile: PublicProfile | null;
|
|
176
|
+
refreshedTokenLoaded: boolean;
|
|
177
|
+
setUser: (user: UserProps | null) => void;
|
|
178
|
+
setPublicProfile: (publicProfile: PublicProfile | null) => void;
|
|
179
|
+
logout: () => void;
|
|
180
|
+
refreshPublicTokens: (config: {
|
|
181
|
+
refreshTokenApiKey: string;
|
|
182
|
+
}) => Promise<void>;
|
|
183
|
+
setUserByTokenId: (idToken: string) => void;
|
|
184
|
+
loadStoredUser: (config?: {
|
|
185
|
+
refreshTokenApiKey: string;
|
|
186
|
+
}) => Promise<void>;
|
|
187
|
+
ssoV2Exchange: (ssoSourceID: string, jwt: string, env?: Environment) => Promise<SsoV2ExchangeResponse>;
|
|
188
|
+
}
|
|
189
|
+
declare const useUserStore: zustand.UseBoundStore<Omit<zustand.StoreApi<UserStore>, "subscribe"> & {
|
|
190
|
+
subscribe: {
|
|
191
|
+
(listener: (selectedState: UserStore, previousSelectedState: UserStore) => void): () => void;
|
|
192
|
+
<U>(selector: (state: UserStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
|
|
193
|
+
equalityFn?: ((a: U, b: U) => boolean) | undefined;
|
|
194
|
+
fireImmediately?: boolean;
|
|
195
|
+
} | undefined): () => void;
|
|
196
|
+
};
|
|
197
|
+
}>;
|
|
198
|
+
|
|
199
|
+
declare function useTokens(): {
|
|
200
|
+
getToken: (type: TokenType) => string | null;
|
|
201
|
+
getMostPrivilegedToken: (options?: Array<TokenType>) => {
|
|
202
|
+
type: TokenType;
|
|
203
|
+
idToken: string;
|
|
204
|
+
} | null;
|
|
205
|
+
getRefreshToken: (type: TokenType) => string | null;
|
|
206
|
+
updatePublicTokens: (idToken: string, refreshToken: string) => void;
|
|
207
|
+
updateAnonymousToken: (idToken: string) => void;
|
|
208
|
+
updateGuestTokens: (idToken: string) => void;
|
|
209
|
+
updateCustomToken: (idToken: string) => void;
|
|
210
|
+
clearTokens: () => void;
|
|
211
|
+
clearPublicTokens: () => void;
|
|
212
|
+
clearCustomTokens: () => void;
|
|
213
|
+
};
|
|
214
|
+
declare function useToken(type: 'anonymous' | 'guest' | 'public' | 'custom'): TokenPair;
|
|
215
|
+
declare function useTokenValue(type: 'anonymous' | 'guest' | 'public' | 'custom'): string | null;
|
|
216
|
+
declare function useRefreshToken(type: 'anonymous' | 'guest' | 'public'): string | null | undefined;
|
|
217
|
+
|
|
218
|
+
declare function useUser(): UserProps | null;
|
|
219
|
+
declare function usePublicProfile(): PublicProfile | null;
|
|
220
|
+
declare function useRefreshedTokenLoaded(): boolean;
|
|
221
|
+
declare function useUserActions(): {
|
|
222
|
+
setUser: (user: UserProps | null) => void;
|
|
223
|
+
setPublicProfile: (publicProfile: PublicProfile | null) => void;
|
|
224
|
+
logout: () => void;
|
|
225
|
+
refreshPublicTokens: (config: {
|
|
226
|
+
refreshTokenApiKey: string;
|
|
227
|
+
}) => Promise<void>;
|
|
228
|
+
setUserByTokenId: (idToken: string) => void;
|
|
229
|
+
loadStoredUser: (config?: {
|
|
230
|
+
refreshTokenApiKey: string;
|
|
231
|
+
}) => Promise<void>;
|
|
232
|
+
ssoV2Exchange: (ssoSourceID: string, jwt: string, env?: Environment) => Promise<SsoV2ExchangeResponse>;
|
|
233
|
+
};
|
|
234
|
+
declare function useUpdateProfile(): {
|
|
235
|
+
updatePublicProfile: (params: Omit<PublicProfile, "metadata">) => Promise<void>;
|
|
236
|
+
};
|
|
237
|
+
declare function useUserWithProfile(): {
|
|
238
|
+
user: UserProps | null;
|
|
239
|
+
publicProfile: PublicProfile | null;
|
|
240
|
+
refreshedTokenLoaded: boolean;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
declare function useTokenEventListener(): {
|
|
244
|
+
eventSource: string;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
export { AnalyticsEvent, AnalyticsWidgetType, AuthCookie, AuthProvider, TokenType, useAuthDialog, usePublicProfile, useRefreshToken, useRefreshedTokenLoaded, useToken, useTokenEventListener, useTokenStore, useTokenValue, useTokens, useUpdateProfile, useUser, useUserActions, useUserStore, useUserWithProfile };
|
|
248
|
+
export type { IdentityProps, RudderContext, TokenPair, TokensMap, TrackOptions, TrackProps };
|
|
249
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvYW5hbHl0aWNzLnRzIiwiLi4vc3JjL2NvbnRleHQvYXV0aC1kaWFsb2ctcHJvdmlkZXIudHN4IiwiLi4vc3JjL2NvbnRleHQvaW5kZXgudHN4IiwiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3N0b3Jlcy90b2tlbi1zdG9yZS50cyIsIi4uL3NyYy9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzLnRzIiwiLi4vc3JjL2NvbmZpZy9pbmRleC50cyIsIi4uL3NyYy9zdG9yZXMvdXNlci1zdG9yZS50cyIsIi4uL3NyYy9ob29rcy91c2UtdG9rZW5zLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS11c2VyLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEV4Y2hhbmdlVG9rZW5zUmVzcG9uc2Uge1xuICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb3BzIHtcbiAgdWlkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHBob3RvVVJMPzogc3RyaW5nO1xuICBoYW5kbGU/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNzb1VzZXJQcm9wcyB7XG4gIHN1Yjogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90b1VSTD86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNzb1YyRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkluUmVzcG9uc2Uge1xuICBkYXRhOiB7XG4gICAgdXNlcjogVXNlclByb3BzO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZWJhc2VVc2VyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwaWN0dXJlOiBzdHJpbmc7XG4gIG9yaWdpbmFsRW1haWw6IHN0cmluZztcbiAgc2FmZURpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHNhZmVQaG90b1VSTDogc3RyaW5nO1xuICBpbml0aWFsaXplZDogYm9vbGVhbjtcbiAgbGVnYWN5SUQ6IHN0cmluZztcbiAgaGFuZGxlOiBzdHJpbmc7XG4gIGlzczogc3RyaW5nO1xuICBhdWQ6IHN0cmluZztcbiAgYXV0aF90aW1lOiBudW1iZXI7XG4gIHVzZXJfaWQ6IHN0cmluZztcbiAgc3ViOiBzdHJpbmc7XG4gIGlhdDogbnVtYmVyO1xuICBleHA6IG51bWJlcjtcbiAgZW1haWw6IHN0cmluZztcbiAgZW1haWxfdmVyaWZpZWQ6IGJvb2xlYW47XG4gIGZpcmViYXNlOiB7XG4gICAgaWRlbnRpdGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIHNpZ25faW5fcHJvdmlkZXI6IHN0cmluZztcbiAgfTtcbn1cbiIsInR5cGUgTnVsbGFibGU8VD4gPSBUIHwgbnVsbDtcblxuZXhwb3J0IGVudW0gQW5hbHl0aWNzV2lkZ2V0VHlwZSB7XG4gIEF2YXRhclByb2ZpbGUgPSAnYXZhdGFyLXByb2ZpbGUnLFxuICBBdmF0YXJDaGF0ID0gJ2F2YXRhci1jaGF0JyxcbiAgQ29tbWVudHMgPSAnY29tbWVudHMnLFxuICBHbG9iYWxQcm9maWxlID0gJ2dsb2JhbC1wcm9maWxlJyxcbiAgR3JvdXBDaGF0ID0gJ2dyb3VwLWNoYXQnLFxuICBQb2xscyA9ICdwb2xscycsXG4gIFVuaXZlcnNhbFNuaXBwZXQgPSAndW5pdmVyc2FsLXNuaXBwZXQnLFxufVxuXG5leHBvcnQgdHlwZSBUcmFja09wdGlvbnMgPSB7XG4gIHdpZGdldElkOiBzdHJpbmcgfCBudWxsO1xuICB3aWRnZXRUeXBlOiBBbmFseXRpY3NXaWRnZXRUeXBlO1xuICBzaXRlSWQ6IHN0cmluZztcbiAgcnNXcml0ZUtleTogc3RyaW5nO1xuICByc0RhdGFQbGFuZVVybDogc3RyaW5nO1xuICB0cmlnZ2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZW51bSBBbmFseXRpY3NFdmVudCB7XG4gIEF1dGhlbnRpY2F0aW9uQ29tcGxldGVkID0gJ0F1dGhlbnRpY2F0aW9uIENvbXBsZXRlZCcsXG4gIEF1dGhlbnRpY2F0aW9uU3RhcnRlZCA9ICdBdXRoZW50aWNhdGlvbiBTdGFydGVkJyxcbiAgQXV0aGVudGljYXRpb25WaWV3ZWQgPSAnQXV0aGVudGljYXRpb24gVmlld2VkJyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhY2tQcm9wcyA9IE51bGxhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3BzIHtcbiAgYW5vbnltb3VzSWQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWRkZXJDb250ZXh0IHtcbiAgY2hhbm5lbDogJ3dlYic7XG4gIGFub255bW91c0lkPzogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIG9zPzogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfTtcbiAgcGFnZT86IHtcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHJlZmVycmVyPzogc3RyaW5nO1xuICAgIHJlZmVycmluZ19kb21haW4/OiBzdHJpbmc7XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHVybD86IHN0cmluZztcbiAgICBpbml0aWFsX3JlZmVycmVyPzogc3RyaW5nO1xuICAgIGluaXRpYWxfcmVmZXJyaW5nX2RvbWFpbj86IHN0cmluZztcbiAgfTtcbiAgc2NyZWVuPzoge1xuICAgIGRlbnNpdHk/OiBudW1iZXI7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGlubmVySGVpZ2h0PzogbnVtYmVyO1xuICAgIGlubmVyV2lkdGg/OiBudW1iZXI7XG4gIH07XG4gIGNhbXBhaWduPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBVc2VyUHJvcHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoL3R5cGVzJztcbmltcG9ydCB7IFRyYWNrT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2FuYWx5dGljcyc7XG5cbmludGVyZmFjZSBBdXRoRGlhbG9nQ29udGV4dFR5cGUge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGFwcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgYXBwRGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdHJhY2tPcHRpb25zOiBUcmFja09wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIG9uQXV0aENvbXBsZXRlZDogKCh1c2VyOiBVc2VyUHJvcHMpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBvcGVuRGlhbG9nOiAob3B0aW9uczogT3BlbkRpYWxvZ09wdGlvbnMpID0+IHZvaWQ7XG4gIGNsb3NlRGlhbG9nOiAoKSA9PiB2b2lkO1xuICBvbk9wZW5DaGFuZ2U6IChvcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5jb25zdCBBdXRoRGlhbG9nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QXV0aERpYWxvZ0NvbnRleHRUeXBlIHwgdW5kZWZpbmVkPihcbiAgdW5kZWZpbmVkXG4pO1xuXG50eXBlIE9wZW5EaWFsb2dPcHRpb25zID0ge1xuICB0cmFja09wdGlvbnM6IFRyYWNrT3B0aW9ucztcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgYXBwRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIG9uQXV0aENvbXBsZXRlZD86ICgpID0+ICh1c2VyOiBVc2VyUHJvcHMpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgQXV0aERpYWxvZ1Byb3ZpZGVyID0gKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3ROb2RlIH0pID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcE5hbWUsIHNldEFwcE5hbWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBbYXBwRGVzY3JpcHRpb24sIHNldEFwcERlc2NyaXB0aW9uXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IFtvbkF1dGhDb21wbGV0ZWQsIHNldE9uQXV0aENvbXBsZXRlZF0gPSB1c2VTdGF0ZTxcbiAgICAoKHVzZXI6IFVzZXJQcm9wcykgPT4gdm9pZCkgfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBjb25zdCBbdHJhY2tPcHRpb25zLCBzZXRUcmFja09wdGlvbnNdID0gdXNlU3RhdGU8VHJhY2tPcHRpb25zIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3Qgb3BlbkRpYWxvZyA9ICh7XG4gICAgdHJhY2tPcHRpb25zLFxuICAgIGFwcE5hbWUsXG4gICAgYXBwRGVzY3JpcHRpb24sXG4gICAgb25BdXRoQ29tcGxldGVkLFxuICB9OiBPcGVuRGlhbG9nT3B0aW9ucykgPT4ge1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgICBzZXRUcmFja09wdGlvbnModHJhY2tPcHRpb25zKTtcbiAgICBzZXRBcHBOYW1lKGFwcE5hbWUpO1xuICAgIHNldEFwcERlc2NyaXB0aW9uKGFwcERlc2NyaXB0aW9uKTtcbiAgICBzZXRPbkF1dGhDb21wbGV0ZWQob25BdXRoQ29tcGxldGVkKTtcbiAgfTtcblxuICBjb25zdCBjbG9zZURpYWxvZyA9ICgpID0+IHNldElzT3BlbihmYWxzZSk7XG4gIGNvbnN0IG9uT3BlbkNoYW5nZSA9IChvcGVuOiBib29sZWFuKSA9PiBzZXRJc09wZW4ob3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0aERpYWxvZ0NvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGlzT3BlbixcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgYXBwRGVzY3JpcHRpb24sXG4gICAgICAgIHRyYWNrT3B0aW9ucyxcbiAgICAgICAgb25BdXRoQ29tcGxldGVkLFxuICAgICAgICBvcGVuRGlhbG9nLFxuICAgICAgICBjbG9zZURpYWxvZyxcbiAgICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoRGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoRGlhbG9nQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aERpYWxvZyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIEF1dGhEaWFsb2dQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiIsImltcG9ydCB7IEF1dGhEaWFsb2dQcm92aWRlciB9IGZyb20gJy4vYXV0aC1kaWFsb2ctcHJvdmlkZXInO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgVXNlclByb3ZpZGVyIH0gZnJvbSAnLi91c2VyLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbmZpZ1Byb3ZpZGVyIH0gZnJvbSAnLi9jb25maWctcHJvdmlkZXInO1xuaW1wb3J0IEF1dGhEaWFsb2cgZnJvbSAnLi4vZGlhbG9nJztcbmltcG9ydCB7IEFub255bW91c1Rva2VuUHJvdmlkZXIgfSBmcm9tICcuL2Fub255bW91cy10b2tlbi1wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRoUHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgcXVlcnlDbGllbnQsXG4gIGVudmlyb25tZW50LFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBxdWVyeUNsaWVudD86IFF1ZXJ5Q2xpZW50O1xuICBlbnZpcm9ubWVudD86ICdwcm9kdWN0aW9uJyB8ICdkZXZlbG9wbWVudCc7XG59KSB7XG4gIHF1ZXJ5Q2xpZW50ID0gcXVlcnlDbGllbnQgfHwgbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxDb25maWdQcm92aWRlciBlbnZpcm9ubWVudD17ZW52aXJvbm1lbnR9PlxuICAgICAgICA8VXNlclByb3ZpZGVyPlxuICAgICAgICAgIDxBdXRoRGlhbG9nUHJvdmlkZXI+XG4gICAgICAgICAgICA8QW5vbnltb3VzVG9rZW5Qcm92aWRlcj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8QXV0aERpYWxvZyAvPlxuICAgICAgICAgICAgPC9Bbm9ueW1vdXNUb2tlblByb3ZpZGVyPlxuICAgICAgICAgIDwvQXV0aERpYWxvZ1Byb3ZpZGVyPlxuICAgICAgICA8L1VzZXJQcm92aWRlcj5cbiAgICAgIDwvQ29uZmlnUHJvdmlkZXI+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyB1c2VBdXRoRGlhbG9nIH0gZnJvbSAnLi9hdXRoLWRpYWxvZy1wcm92aWRlcic7XG4iLCJleHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBBTk9OWU1PVVMgPSAnYW5vbnltb3VzJyxcbiAgR1VFU1QgPSAnZ3Vlc3QnLFxuICBQVUJMSUMgPSAncHVibGljJyxcbiAgQ1VTVE9NID0gJ2N1c3RvbScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5QYWlyIHtcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVG9rZW5zTWFwID0gUmVjb3JkPFRva2VuVHlwZSwgVG9rZW5QYWlyPjtcblxuZXhwb3J0IGVudW0gQXV0aENvb2tpZSB7XG4gIFBVQkxJQ19JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1pZC10b2tlbicsXG4gIFBVQkxJQ19SRUZSRVNIX1RPS0VOID0gJ2FyZW5hLWF1dGgtcHVibGljLXJlZnJlc2gtdG9rZW4nLFxuICBBTk9OWU1PVVNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1hbm9ueW1vdXMtaWQtdG9rZW4nLFxuICBHVUVTVF9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWd1ZXN0LWlkLXRva2VuJyxcbiAgQ1VTVE9NX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtY3VzdG9tLWlkLXRva2VuJyxcbiAgQ1VTVE9NX1VTRVIgPSAnYXJlbmEtYXV0aC1jdXN0b20tdXNlcicsXG59XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJztcbmltcG9ydCB7IHN1YnNjcmliZVdpdGhTZWxlY3RvciB9IGZyb20gJ3p1c3RhbmQvbWlkZGxld2FyZSc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSwgVG9rZW5zTWFwLCBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblN0b3JlIHtcbiAgdG9rZW5zOiBUb2tlbnNNYXA7XG4gIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuOiAoXG4gICAgb3B0aW9ucz86IEFycmF5PFRva2VuVHlwZT5cbiAgKSA9PiB7IHR5cGU6IFRva2VuVHlwZTsgaWRUb2tlbjogc3RyaW5nIH0gfCBudWxsO1xuICBnZXRSZWZyZXNoVG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgICBzb3VyY2U/OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xuICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhclRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckN1c3RvbVRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlUHVibGljVG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckd1ZXN0VG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRva2VuczogVG9rZW5zTWFwID0ge1xuICBwdWJsaWM6IHtcbiAgICBpZFRva2VuOiBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTikgfHwgbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGFub255bW91czoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxuICBndWVzdDoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGN1c3RvbToge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHVzZVRva2VuU3RvcmUgPSBjcmVhdGU8VG9rZW5TdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5pZFRva2VuICYmXG4gICAgICAgIHJlZnJlc2hUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5yZWZyZXNoVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgcHVibGljOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBDb29raWVzLnNldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOLCByZWZyZXNoVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMzAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuUFVCTElDLCB7XG4gICAgICAgICAgaWRUb2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgYW5vbnltb3VzOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmd1ZXN0LmlkVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGd1ZXN0OiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkdVRVNULCB7IGlkVG9rZW4sIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgY3VzdG9tOiB7IGlkVG9rZW4gfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4sIGlkVG9rZW4pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5DVVNUT00sIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBwdWJsaWM6IHsgaWRUb2tlbjogbnVsbCwgcmVmcmVzaFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLlBVQkxJQywgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBhbm9ueW1vdXM6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHtcbiAgICAgICAgICBpZFRva2VuOiBudWxsLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTik7XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgZ3Vlc3Q6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5HVUVTVCwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGN1c3RvbTogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkNVU1RPTSwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRlZmF1bHRUb2tlbnMsXG5cbiAgICAgIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQoKS50b2tlbnNbdHlwZV0/LmlkVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW46IChcbiAgICAgICAgb3B0aW9ucyA9IFtUb2tlblR5cGUuUFVCTElDLCBUb2tlblR5cGUuR1VFU1QsIFRva2VuVHlwZS5BTk9OWU1PVVNdXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5DVVNUT00pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5DVVNUT00sXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuY3VzdG9tLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5wdWJsaWMuaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5QVUJMSUMpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5QVUJMSUMsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMucHVibGljLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5ndWVzdC5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLkdVRVNUKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuR1VFU1QsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuZ3Vlc3QuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuICYmXG4gICAgICAgICAgb3B0aW9ucy5pbmNsdWRlcyhUb2tlblR5cGUuQU5PTllNT1VTKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkFOT05ZTU9VUyxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldFJlZnJlc2hUb2tlbjogKHR5cGU6IFRva2VuVHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0KCkudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnNIZWxwZXIoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVDdXN0b21Ub2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlcihpZFRva2VuLCByZWZyZXNoVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyUHVibGljVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyUHVibGljVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyR3Vlc3RUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4ge1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pXG4pO1xuIiwiZXhwb3J0IGludGVyZmFjZSBQdWJsaWNQcm9maWxlIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHtcbiAgICBjb21tZW50Q291bnRCeVNpdGU/OiB7XG4gICAgICBbc2l0ZUlkOiBzdHJpbmddOiBudW1iZXI7XG4gICAgfTtcbiAgICBjb21tZW50UmVhY3Rpb25Db3VudEJ5U2l0ZT86IHtcbiAgICAgIFtzaXRlSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgICB9O1xuICAgIG92ZXJhbGxDb21tZW50Q291bnQ/OiBudW1iZXI7XG4gICAgb3ZlcmFsbENvbW1lbnRSZWFjdGlvbkNvdW50PzogbnVtYmVyO1xuICB9O1xuICBwaG90b1VSTD86IHN0cmluZztcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnenVzdGFuZCc7XG5pbXBvcnQgeyBzdWJzY3JpYmVXaXRoU2VsZWN0b3IgfSBmcm9tICd6dXN0YW5kL21pZGRsZXdhcmUnO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCB7XG4gIFVzZXJQcm9wcyxcbiAgRmlyZWJhc2VVc2VyLFxuICBTc29Vc2VyUHJvcHMsXG4gIFNzb1YyRXhjaGFuZ2VSZXNwb25zZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBqd3REZWNvZGUgfSBmcm9tICdqd3QtZGVjb2RlJztcbmltcG9ydCB7IHR5cGUgUHVibGljUHJvZmlsZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2ZpbGUvdHlwZXMnO1xuaW1wb3J0IHsgdXNlVG9rZW5TdG9yZSB9IGZyb20gJy4vdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSB9IGZyb20gJy4uL3R5cGVzL3Rva2VuJztcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IEVudmlyb25tZW50LCBnZXRDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbnRlcmZhY2UgVXNlclN0b3JlIHtcbiAgdXNlcjogVXNlclByb3BzIHwgbnVsbDtcbiAgcHVibGljUHJvZmlsZTogUHVibGljUHJvZmlsZSB8IG51bGw7XG4gIHJlZnJlc2hlZFRva2VuTG9hZGVkOiBib29sZWFuO1xuICBzZXRVc2VyOiAodXNlcjogVXNlclByb3BzIHwgbnVsbCkgPT4gdm9pZDtcbiAgc2V0UHVibGljUHJvZmlsZTogKHB1YmxpY1Byb2ZpbGU6IFB1YmxpY1Byb2ZpbGUgfCBudWxsKSA9PiB2b2lkO1xuICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG4gIHJlZnJlc2hQdWJsaWNUb2tlbnM6IChjb25maWc6IHtcbiAgICByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2V0VXNlckJ5VG9rZW5JZDogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgbG9hZFN0b3JlZFVzZXI6IChjb25maWc/OiB7IHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nIH0pID0+IFByb21pc2U8dm9pZD47XG4gIHNzb1YyRXhjaGFuZ2U6IChcbiAgICBzc29Tb3VyY2VJRDogc3RyaW5nLFxuICAgIGp3dDogc3RyaW5nLFxuICAgIGVudj86IEVudmlyb25tZW50XG4gICkgPT4gUHJvbWlzZTxTc29WMkV4Y2hhbmdlUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY29uc3QgdXNlVXNlclN0b3JlID0gY3JlYXRlPFVzZXJTdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4gKHtcbiAgICB1c2VyOiBudWxsLFxuICAgIHB1YmxpY1Byb2ZpbGU6IG51bGwsXG4gICAgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IGZhbHNlLFxuXG4gICAgc2V0VXNlcjogKHVzZXI6IFVzZXJQcm9wcyB8IG51bGwpID0+IHtcbiAgICAgIHNldCh7IHVzZXIgfSk7XG4gICAgfSxcblxuICAgIHNldFB1YmxpY1Byb2ZpbGU6IChwdWJsaWNQcm9maWxlOiBQdWJsaWNQcm9maWxlIHwgbnVsbCkgPT4ge1xuICAgICAgc2V0KHsgcHVibGljUHJvZmlsZSB9KTtcbiAgICB9LFxuXG4gICAgc2V0VXNlckJ5VG9rZW5JZDogKGlkVG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGp3dERlY29kZTxGaXJlYmFzZVVzZXI+KGlkVG9rZW4pO1xuICAgICAgICBjb25zdCB1c2VyUHJvcHM6IFVzZXJQcm9wcyA9IHtcbiAgICAgICAgICB1aWQ6IHVzZXIudXNlcl9pZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogdXNlci5zYWZlRGlzcGxheU5hbWUsXG4gICAgICAgICAgZW1haWw6IHVzZXIuZW1haWwsXG4gICAgICAgICAgcGhvdG9VUkw6IHVzZXIuc2FmZVBob3RvVVJMLFxuICAgICAgICAgIGhhbmRsZTogdXNlci5oYW5kbGUsXG4gICAgICAgIH07XG4gICAgICAgIHNldCh7IHVzZXI6IHVzZXJQcm9wcyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsb2dvdXQ6ICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUuY2xlYXJQdWJsaWNUb2tlbnMoKTtcbiAgICAgICAgdG9rZW5TdG9yZS5jbGVhckN1c3RvbVRva2VucygpO1xuICAgICAgICBzZXQoeyB1c2VyOiBudWxsIH0pO1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnYXJlbmEtY29tbWVudHMtbG9nb3V0JykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlZnJlc2hQdWJsaWNUb2tlbnM6IGFzeW5jIChjb25maWc6IHsgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG5cbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZnJlc2ggdG9rZW4gZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZWFwaXMuY29tL3YxL3Rva2VuP2tleT0nO1xuICAgICAgICBjb25zdCBhcGlLZXkgPSBjb25maWcucmVmcmVzaFRva2VuQXBpS2V5O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtwcmVmaXh9JHthcGlLZXl9YDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRVc2VyQnlUb2tlbklkIH0gPSBnZXQoKTtcbiAgICAgICAgc2V0VXNlckJ5VG9rZW5JZChkYXRhLmlkX3Rva2VuKTtcblxuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZVB1YmxpY1Rva2VucyhkYXRhLmlkX3Rva2VuLCBkYXRhLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIGNvbnN0IHsgbG9nb3V0IH0gPSBnZXQoKTtcbiAgICAgICAgbG9nb3V0KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGxvYWRTdG9yZWRVc2VyOiBhc3luYyAoY29uZmlnPzogeyByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBwdWJsaWNJZFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuICAgICAgY29uc3QgcHVibGljUmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgICBjb25zdCBjdXN0b21JZFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4pO1xuICAgICAgY29uc3QgY3VzdG9tVXNlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBpZiAoISFjdXN0b21JZFRva2VuICYmICEhY3VzdG9tVXNlcikge1xuICAgICAgICBjb25zdCBwYXJzZWRVc2VyID0gSlNPTi5wYXJzZShjdXN0b21Vc2VyKTtcblxuICAgICAgICBzZXQoeyB1c2VyOiBwYXJzZWRVc2VyIH0pO1xuXG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUudXBkYXRlQ3VzdG9tVG9rZW4oY3VzdG9tSWRUb2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHVibGljSWRUb2tlbikge1xuICAgICAgICAgIGNvbnN0IHsgc2V0VXNlckJ5VG9rZW5JZCB9ID0gZ2V0KCk7XG4gICAgICAgICAgc2V0VXNlckJ5VG9rZW5JZChwdWJsaWNJZFRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmIChwdWJsaWNSZWZyZXNoVG9rZW4gJiYgY29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgeyByZWZyZXNoUHVibGljVG9rZW5zIH0gPSBnZXQoKTtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoUHVibGljVG9rZW5zKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0KHsgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIHNzb1YyRXhjaGFuZ2U6IGFzeW5jIChcbiAgICAgIHNzb1NvdXJjZUlEOiBzdHJpbmcsXG4gICAgICBqd3Q6IHN0cmluZyxcbiAgICAgIGVudj86IEVudmlyb25tZW50XG4gICAgKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoZW52ID8/ICdwcm9kdWN0aW9uJyk7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVVcmwgPSBjb25maWcucHJvZmlsZVNlcnZpY2VVcmw7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJvZmlsZVVybH0vc3NvL3NvdXJjZXMvJHtzc29Tb3VyY2VJRH0vdXNlcmA7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBTc29WMkV4Y2hhbmdlUmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KCdQT1NUJywgdXJsLCB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzaWduZWRVc2VyRGF0YTogand0IH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkVXNlciA9IGp3dERlY29kZTxTc29Vc2VyUHJvcHM+KHJlc3BvbnNlLnRva2VuKTtcblxuICAgICAgICAgIGNvbnN0IHsgc2V0VXNlciwgc2V0UHVibGljUHJvZmlsZSB9ID0gZ2V0KCk7XG5cbiAgICAgICAgICBzZXRVc2VyKHtcbiAgICAgICAgICAgIHVpZDogZGVjb2RlZFVzZXI/LnN1YixcbiAgICAgICAgICAgIGVtYWlsOiBkZWNvZGVkVXNlcj8uZW1haWwsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZGVjb2RlZFVzZXI/LmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgcGhvdG9VUkw6IGRlY29kZWRVc2VyPy5waG90b1VSTCxcbiAgICAgICAgICAgIGhhbmRsZTogZGVjb2RlZFVzZXI/LmhhbmRsZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNldFB1YmxpY1Byb2ZpbGUoe1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWRVc2VyPy5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHBob3RvVVJMOiBkZWNvZGVkVXNlcj8ucGhvdG9VUkwsXG4gICAgICAgICAgICBoYW5kbGU6IGRlY29kZWRVc2VyPy5oYW5kbGUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgIHRva2VuU3RvcmUudXBkYXRlQ3VzdG9tVG9rZW4ocmVzcG9uc2UudG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU1NPIFYyIEV4Y2hhbmdlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gIH0pKVxuKTtcbiIsImltcG9ydCB7IHVzZVRva2VuU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgdXNlVG9rZW5FdmVudExpc3RlbmVyIH0gZnJvbSAnLi91c2UtdG9rZW4tZXZlbnQtbGlzdGVuZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5zKCkge1xuICBjb25zdCBnZXRUb2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuZ2V0VG9rZW4pO1xuICBjb25zdCBnZXRNb3N0UHJpdmlsZWdlZFRva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5nZXRNb3N0UHJpdmlsZWdlZFRva2VuXG4gICk7XG4gIGNvbnN0IGdldFJlZnJlc2hUb2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuZ2V0UmVmcmVzaFRva2VuKTtcbiAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVQdWJsaWNUb2tlbnMpO1xuICBjb25zdCB1cGRhdGVBbm9ueW1vdXNUb2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUudXBkYXRlQW5vbnltb3VzVG9rZW5cbiAgKTtcbiAgY29uc3QgdXBkYXRlR3Vlc3RUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZUd1ZXN0VG9rZW5zKTtcbiAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZUN1c3RvbVRva2VuKTtcbiAgY29uc3QgY2xlYXJUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyUHVibGljVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyQ3VzdG9tVG9rZW5zKTtcblxuICBjb25zdCB7IGV2ZW50U291cmNlIH0gPSB1c2VUb2tlbkV2ZW50TGlzdGVuZXIoKTtcblxuICByZXR1cm4ge1xuICAgIGdldFRva2VuLFxuICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW4sXG4gICAgZ2V0UmVmcmVzaFRva2VuLFxuICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKGlkVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVQdWJsaWNUb2tlbnMoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbihpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVHdWVzdFRva2VucyhpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVDdXN0b21Ub2tlbihpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgY2xlYXJUb2tlbnM6ICgpID0+IGNsZWFyVG9rZW5zKGV2ZW50U291cmNlKSxcbiAgICBjbGVhclB1YmxpY1Rva2VuczogKCkgPT4gY2xlYXJQdWJsaWNUb2tlbnMoZXZlbnRTb3VyY2UpLFxuICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoKSA9PiBjbGVhckN1c3RvbVRva2VucyhldmVudFNvdXJjZSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbih0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJyB8ICdjdXN0b20nKSB7XG4gIHJldHVybiB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnRva2Vuc1t0eXBlXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlblZhbHVlKFxuICB0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJyB8ICdjdXN0b20nXG4pIHtcbiAgcmV0dXJuIHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudG9rZW5zW3R5cGVdPy5pZFRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZnJlc2hUb2tlbih0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJykge1xuICByZXR1cm4gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS50b2tlbnNbdHlwZV0/LnJlZnJlc2hUb2tlbik7XG59XG4iLCJpbXBvcnQgeyB1c2VQcm9maWxlU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9maWxlL3VzZS1wcm9maWxlLXNlcnZpY2VzJztcbmltcG9ydCB7IHVzZVVzZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy91c2VyLXN0b3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXIoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQdWJsaWNQcm9maWxlKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnB1YmxpY1Byb2ZpbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaGVkVG9rZW5Mb2FkZWQoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucmVmcmVzaGVkVG9rZW5Mb2FkZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVXNlckFjdGlvbnMoKSB7XG4gIGNvbnN0IHNldFVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0VXNlcik7XG4gIGNvbnN0IHNldFB1YmxpY1Byb2ZpbGUgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0UHVibGljUHJvZmlsZSk7XG4gIGNvbnN0IGxvZ291dCA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5sb2dvdXQpO1xuICBjb25zdCByZWZyZXNoUHVibGljVG9rZW5zID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnJlZnJlc2hQdWJsaWNUb2tlbnMpO1xuICBjb25zdCBzZXRVc2VyQnlUb2tlbklkID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFVzZXJCeVRva2VuSWQpO1xuICBjb25zdCBsb2FkU3RvcmVkVXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5sb2FkU3RvcmVkVXNlcik7XG4gIGNvbnN0IHNzb1YyRXhjaGFuZ2UgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc3NvVjJFeGNoYW5nZSk7XG4gIFxuXG4gIHJldHVybiB7XG4gICAgc2V0VXNlcixcbiAgICBzZXRQdWJsaWNQcm9maWxlLFxuICAgIGxvZ291dCxcbiAgICByZWZyZXNoUHVibGljVG9rZW5zLFxuICAgIHNldFVzZXJCeVRva2VuSWQsXG4gICAgbG9hZFN0b3JlZFVzZXIsXG4gICAgc3NvVjJFeGNoYW5nZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2ZpbGUoKSB7XG4gIGNvbnN0IHsgdXBkYXRlUHVibGljUHJvZmlsZSB9ID0gdXNlUHJvZmlsZVNlcnZpY2VzKCk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlUHVibGljUHJvZmlsZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXJXaXRoUHJvZmlsZSgpIHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS51c2VyKTtcbiAgY29uc3QgcHVibGljUHJvZmlsZSA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5wdWJsaWNQcm9maWxlKTtcbiAgY29uc3QgcmVmcmVzaGVkVG9rZW5Mb2FkZWQgPSB1c2VVc2VyU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUucmVmcmVzaGVkVG9rZW5Mb2FkZWRcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVzZXIsXG4gICAgcHVibGljUHJvZmlsZSxcbiAgICByZWZyZXNoZWRUb2tlbkxvYWRlZCxcbiAgfTtcbn1cblxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyB1c2VUb2tlblN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IFRPS0VOX1VQREFURURfRVZFTlQgfSBmcm9tICcuLi91dGlscy9kb20tZXZlbnRzJztcblxuaW50ZXJmYWNlIFRva2VuVXBkYXRlRXZlbnQge1xuICBkZXRhaWw6IHtcbiAgICBpZFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG4gICAgdHlwZTogVG9rZW5UeXBlO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VuRXZlbnRMaXN0ZW5lcigpIHtcbiAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnNcbiAgKTtcbiAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVHdWVzdFRva2Vuc1xuICApO1xuICBjb25zdCB1cGRhdGVDdXN0b21Ub2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlQ3VzdG9tVG9rZW5cbiAgKTtcbiAgY29uc3QgY2xlYXJUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyUHVibGljVG9rZW5zXG4gICk7XG4gIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckFub255bW91c1Rva2Vuc1xuICApO1xuICBjb25zdCBjbGVhckd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckd1ZXN0VG9rZW5zKTtcbiAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyQ3VzdG9tVG9rZW5zXG4gICk7XG5cbiAgY29uc3QgZXZlbnRTb3VyY2VSZWYgPSB1c2VSZWY8c3RyaW5nPihcbiAgICBgd2lkZ2V0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWBcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVRva2VuVXBkYXRlID0gKFxuICAgICAgZXZlbnQ6IEN1c3RvbUV2ZW50PFRva2VuVXBkYXRlRXZlbnRbJ2RldGFpbCddPlxuICAgICkgPT4ge1xuICAgICAgY29uc3QgeyBpZFRva2VuLCByZWZyZXNoVG9rZW4sIHR5cGUsIHNvdXJjZSB9ID0gZXZlbnQuZGV0YWlsO1xuXG4gICAgICBpZiAoc291cmNlID09PSBldmVudFNvdXJjZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLlBVQkxJQzpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWZyZXNoIHRva2VuIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgdG9rZW5zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnMoaWRUb2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuQU5PTllNT1VTOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbihpZFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuR1VFU1Q6XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zKGlkVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhckd1ZXN0VG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkNVU1RPTTpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgdXBkYXRlQ3VzdG9tVG9rZW4oaWRUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgVE9LRU5fVVBEQVRFRF9FVkVOVCxcbiAgICAgIGhhbmRsZVRva2VuVXBkYXRlIGFzIEV2ZW50TGlzdGVuZXJcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFRPS0VOX1VQREFURURfRVZFTlQsXG4gICAgICAgIGhhbmRsZVRva2VuVXBkYXRlIGFzIEV2ZW50TGlzdGVuZXJcbiAgICAgICk7XG4gICAgfTtcbiAgfSwgW1xuICAgIHVwZGF0ZVB1YmxpY1Rva2VucyxcbiAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbixcbiAgICB1cGRhdGVHdWVzdFRva2VucyxcbiAgICB1cGRhdGVDdXN0b21Ub2tlbixcbiAgICBjbGVhclRva2VucyxcbiAgICBjbGVhclB1YmxpY1Rva2VucyxcbiAgICBjbGVhckFub255bW91c1Rva2VucyxcbiAgICBjbGVhckd1ZXN0VG9rZW5zLFxuICAgIGNsZWFyQ3VzdG9tVG9rZW5zLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIGV2ZW50U291cmNlOiBldmVudFNvdXJjZVJlZi5jdXJyZW50LFxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFJTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFPO0FBQ1A7QUFDQTs7QUNwQkE7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlPOztBQ3JCQTtBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQ0xPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQTzs7QUNMUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQk87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FDdkJPO0FBQ1A7QUFDQTs7OyJ9
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACvD,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kCAAkC,CAAC;AACjD,cAAc,SAAS,CAAC"}
|