@sambath999/localize-token 12.4.12 → 12.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,67 +1,46 @@
1
1
  import { __awaiter } from "tslib";
2
- import { HttpClient } from "@angular/common/http";
3
2
  import { ChangeDetectorRef, Component, Injector, ViewEncapsulation, } from "@angular/core";
4
3
  import { MessageService } from "primeng/api";
5
4
  import { DynamicDialogConfig, DynamicDialogRef } from "primeng/dynamicdialog";
6
5
  import { DomSanitizer } from "@angular/platform-browser";
7
- import { LocalizeApiService, LocalizeApiBroadcastService, LocalizeApiToken, LocalizeApiTokenService, waitFor } from "@sambath999/localize-api";
8
- var ELoginState;
9
- (function (ELoginState) {
10
- ELoginState[ELoginState["Requesting"] = 0] = "Requesting";
11
- ELoginState[ELoginState["Success"] = 1] = "Success";
12
- ELoginState[ELoginState["Error"] = 2] = "Error";
13
- })(ELoginState || (ELoginState = {}));
6
+ import { LocalizeApiLoginService, waitFor } from "@sambath999/localize-api";
14
7
  export class LocalizeTokenLoginDialogComponent {
15
- constructor(messageService, cdt, dlgRef, dlgConfig, httpClient, sanitizer, injector) {
8
+ constructor(messageService, cdt, dlgRef, dlgConfig, sanitizer, injector) {
16
9
  this.messageService = messageService;
17
10
  this.cdt = cdt;
18
11
  this.dlgRef = dlgRef;
19
12
  this.dlgConfig = dlgConfig;
20
- this.httpClient = httpClient;
21
13
  this.sanitizer = sanitizer;
22
14
  this.injector = injector;
23
15
  this.messageKey = "$login-dlg";
24
- this.loading = false;
25
- this.success = false;
26
- this.loginBroadcastChannel = "bc-localize-login";
27
- this.sourceId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
28
- this.clickLogout = () => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); };
29
- this.tokenService = this.injector.get(LocalizeApiTokenService);
30
- this.broadcastService = this.injector.get(LocalizeApiBroadcastService);
31
- this.apiService = this.injector.get(LocalizeApiService);
32
- this.decodeToken = this.tokenService.decodeRefreshToken;
33
16
  this.loginConfig = this.dlgConfig.data.loginConfig;
17
+ this.apiLoginService = this.injector.get(LocalizeApiLoginService);
34
18
  this.properties = this.loginConfig.properties;
35
- this.removeLoginListener = this.broadcastService.listen(this.loginBroadcastChannel, (payload) => {
36
- var _a;
37
- if (!payload || payload.sourceId === this.sourceId) {
38
- console.warn('Ignoring login state message with invalid payload or from same source', payload);
39
- return;
40
- }
41
- switch (payload.state) {
42
- case ELoginState.Requesting:
43
- this.loading = true;
44
- this.success = false;
45
- break;
46
- case ELoginState.Success:
47
- this.apiService.clearRequiredLoginStateAfterLogin();
48
- this.loginSuccess();
49
- break;
50
- case ELoginState.Error:
51
- this.showMessage("error", (_a = payload.message) !== null && _a !== void 0 ? _a : "Login failed");
52
- break;
53
- }
54
- });
19
+ this.decodeToken = this.apiLoginService.decodedToken;
20
+ this.logout = this.loginConfig.logoutFunc;
21
+ this.configure();
55
22
  }
56
- get config() { return this.tokenService.config; }
57
- ngOnInit() {
23
+ get loading() { return this.apiLoginService.isLoading; }
24
+ get success() { return this.apiLoginService.isSuccess; }
25
+ configure() {
26
+ var _a, _b;
58
27
  this.dlgConfig.closable = false;
59
28
  this.dlgConfig.dismissableMask = false;
60
29
  this.dlgConfig.modal = true;
61
- this.logout = this.loginConfig.logoutFunc;
62
- this.loginUrl = this.loginConfig.loginUrl;
30
+ this.apiLoginService.configure({
31
+ loginUrl: this.loginConfig.loginUrl,
32
+ onSuccess: this.loginSuccess.bind(this),
33
+ onFailure: (msg) => this.showMessage("error", msg),
34
+ onError: (msg) => this.showMessage("error", msg),
35
+ loginFunction: this.loginConfig.loginFunction,
36
+ refreshTokenTtl: this.loginConfig.expire,
37
+ passwordResolver: () => this.password,
38
+ passwordValidator: (_b = (_a = this.loginConfig.properties) === null || _a === void 0 ? void 0 : _a.passwordValidator) === null || _b === void 0 ? void 0 : _b.bind(this),
39
+ });
40
+ }
41
+ ngOnInit() {
63
42
  if (!this.decodeToken) {
64
- this.showMessage("error", "Token is invalid");
43
+ this.showMessage("error", "Invalid Token. Please login again.");
65
44
  setTimeout(() => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); }, 2000);
66
45
  }
67
46
  }
@@ -70,85 +49,28 @@ export class LocalizeTokenLoginDialogComponent {
70
49
  }
71
50
  loginSuccess() {
72
51
  return __awaiter(this, void 0, void 0, function* () {
73
- this.success = true;
74
52
  yield waitFor(2000);
75
53
  this.dlgRef.close(true);
76
54
  });
77
55
  }
78
56
  clickLogin() {
79
- var _a, _b, _c;
80
57
  return __awaiter(this, void 0, void 0, function* () {
81
- if (!this.isValidPassword) {
82
- return this.showMessage("error", "Password is required and must be at least 6 characters");
83
- }
84
- this.publishLoginState(ELoginState.Requesting);
85
- yield waitFor(300);
86
- this.loading = true;
87
- const loginRes = yield this.login();
88
- if (!(loginRes === null || loginRes === void 0 ? void 0 : loginRes.status)) {
89
- const message = (_a = loginRes === null || loginRes === void 0 ? void 0 : loginRes.message) !== null && _a !== void 0 ? _a : "An error occurred";
90
- this.publishLoginState(ELoginState.Error, message);
91
- return this.showMessage("error", message);
92
- }
93
- this.tokenService.accessToken = loginRes.tokens.accessToken;
94
- const cookieOptions = { expires: (_b = this.loginConfig.expire) !== null && _b !== void 0 ? _b : 365 };
95
- LocalizeApiToken.storage.set(((_c = this.config.refreshToken) === null || _c === void 0 ? void 0 : _c.name) || '', loginRes.tokens.refreshToken, cookieOptions);
96
- this.apiService.clearRequiredLoginStateAfterLogin();
97
- this.publishLoginState(ELoginState.Success);
98
- this.loginSuccess();
58
+ yield this.apiLoginService.clickLogin();
99
59
  });
100
60
  }
101
- publishLoginState(state, message) {
102
- this.broadcastService.publish(this.loginBroadcastChannel, {
103
- state,
104
- sourceId: this.sourceId,
105
- message,
106
- });
107
- }
108
- login() {
109
- var _a, _b, _c;
110
- return __awaiter(this, void 0, void 0, function* () {
111
- if (!((_a = this.loginUrl) === null || _a === void 0 ? void 0 : _a.trim().length)) {
112
- this.showMessage("error", "Login url is required");
113
- throw new Error("Login url is required");
114
- }
115
- try {
116
- if (this.loginConfig.loginFunction) {
117
- console.log("Using custom login function");
118
- return yield this.loginConfig.loginFunction((_c = (_b = this.decodeToken) === null || _b === void 0 ? void 0 : _b.email) !== null && _c !== void 0 ? _c : '', this.password.trim(), this.getHeaders());
119
- }
120
- return yield new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));
121
- }
122
- catch (e) {
123
- this.showMessage("error", e.message);
124
- return null;
125
- }
126
- });
127
- }
128
- getHeaders() {
129
- var _a, _b;
130
- return {
131
- [LocalizeApiToken.httpHeaders.X_REFRESH_TOKEN]: (_a = this.tokenService.refreshToken) !== null && _a !== void 0 ? _a : "",
132
- [LocalizeApiToken.httpHeaders.X_TENANT]: (_b = this.tokenService.tenantToken) !== null && _b !== void 0 ? _b : "",
133
- };
134
- }
135
- get isValidPassword() {
136
- this.loading = false;
137
- return this.properties.passwordValidator
138
- ? this.properties.passwordValidator(this.password)
139
- : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;
61
+ clickLogout() {
62
+ var _a;
63
+ (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this);
140
64
  }
141
65
  showMessage(severity, summary) {
142
66
  this.messageService.add({ key: this.messageKey, severity, summary });
143
- this.loading = false;
144
67
  }
145
68
  get sanitizedTitle() {
146
69
  var _a;
147
70
  return this.sanitizer.bypassSecurityTrustHtml((_a = this.properties.title) !== null && _a !== void 0 ? _a : '');
148
71
  }
149
72
  ngOnDestroy() {
150
- var _a;
151
- (_a = this.removeLoginListener) === null || _a === void 0 ? void 0 : _a.call(this);
73
+ this.apiLoginService.unConfigure();
152
74
  }
153
75
  }
154
76
  LocalizeTokenLoginDialogComponent.decorators = [
@@ -467,8 +389,7 @@ LocalizeTokenLoginDialogComponent.ctorParameters = () => [
467
389
  { type: ChangeDetectorRef },
468
390
  { type: DynamicDialogRef },
469
391
  { type: DynamicDialogConfig },
470
- { type: HttpClient },
471
392
  { type: DomSanitizer },
472
393
  { type: Injector }
473
394
  ];
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWNrYWdlL2NvbXBvbmVudHMvbG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFHUixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFjLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNKLElBQUssV0FJSjtBQUpELFdBQUssV0FBVztJQUNkLHlEQUFVLENBQUE7SUFDVixtREFBTyxDQUFBO0lBQ1AsK0NBQUssQ0FBQTtBQUNQLENBQUMsRUFKSSxXQUFXLEtBQVgsV0FBVyxRQUlmO0FBK1RELE1BQU0sT0FBTyxpQ0FBaUM7SUFvQjVDLFlBQ21CLGNBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLE1BQXdCLEVBQ3hCLFNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFNBQXVCLEVBQ3ZCLFFBQWtCO1FBTmxCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTFCNUIsZUFBVSxHQUFHLFlBQVksQ0FBQztRQUduQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFRQywwQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztRQUM1QyxhQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQTBJbkYsZ0JBQVcsR0FBRyxHQUFHLEVBQUUsV0FBQyxPQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sK0NBQVgsSUFBSSxDQUFXLENBQUEsRUFBQSxDQUFDO1FBM0hsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVyxDQUFDO1FBRS9DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUF5QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTs7WUFDdEgsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQy9GLE9BQU87YUFDUjtZQUVELFFBQVEsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDckIsS0FBSyxXQUFXLENBQUMsVUFBVTtvQkFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDLE9BQU87b0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDLEtBQUs7b0JBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQUEsT0FBTyxDQUFDLE9BQU8sbUNBQUksY0FBYyxDQUFDLENBQUM7b0JBQzdELE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWxERCxJQUFZLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQW9EekQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQTtRQUV6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsV0FBQyxPQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sK0NBQVgsSUFBSSxDQUFXLENBQUEsRUFBQSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFYSxZQUFZOztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFFSyxVQUFVOzs7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSx3REFBd0QsQ0FBQyxDQUFDO2FBQzVGO1lBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsTUFBTSxDQUFBLEVBQUU7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE9BQU8sbUNBQUksbUJBQW1CLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzNDO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDNUQsTUFBTSxhQUFhLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sbUNBQUksR0FBRyxFQUFFLENBQUE7WUFDakUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLDBDQUFFLElBQUksS0FBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDaEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1lBRXBELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOztLQUNyQjtJQUVPLGlCQUFpQixDQUFDLEtBQWtCLEVBQUUsT0FBZ0I7UUFDNUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBeUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ2hGLEtBQUs7WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFYSxLQUFLOzs7WUFDakIsSUFBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxJQUFJLEdBQUcsTUFBTSxDQUFBLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUMxQztZQUVELElBQUk7Z0JBRUYsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtvQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUMzQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLEtBQUssbUNBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7aUJBQ3JIO2dCQUVELE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUyxFQUNqQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQ2xDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBRWxGO1lBQUMsT0FBTyxDQUFNLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLElBQUksQ0FBQzthQUNiOztLQUNGO0lBRU8sVUFBVTs7UUFDaEIsT0FBTztZQUNMLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLG1DQUFJLEVBQUU7WUFDcEYsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsbUNBQUksRUFBRTtTQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM3RixDQUFDO0lBSU8sV0FBVyxDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLGNBQWM7O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVzs7UUFDVCxNQUFBLElBQUksQ0FBQyxtQkFBbUIsK0NBQXhCLElBQUksQ0FBd0IsQ0FBQztJQUMvQixDQUFDOzs7WUExZEYsU0FBUyxTQUFDO2dCQXFQVCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBMkRIO2dCQUNQLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDM0IsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7eUJBbFQ1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbVBSO2FBZ0VGOzs7WUF6VVEsY0FBYztZQVByQixpQkFBaUI7WUFRVyxnQkFBZ0I7WUFBckMsbUJBQW1CO1lBVm5CLFVBQVU7WUFZVixZQUFZO1lBUm5CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEluamVjdG9yLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgSUxvZ2luRGlhbG9nQ29uZmlnLCBJTG9naW5EaWFsb2dQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uL21vZGVscy9sb2NhbGl6ZS10b2tlbi1tb2RlbHNcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgSnd0UGF5bG9hZCwgTG9jYWxpemVBcGlTZXJ2aWNlLCBMb2NhbGl6ZUFwaUJyb2FkY2FzdFNlcnZpY2UsIExvY2FsaXplQXBpVG9rZW4sIExvY2FsaXplQXBpVG9rZW5TZXJ2aWNlLCB3YWl0Rm9yIH0gZnJvbSBcIkBzYW1iYXRoOTk5L2xvY2FsaXplLWFwaVwiO1xyXG5cclxuXHJcbmVudW0gRUxvZ2luU3RhdGUge1xyXG4gIFJlcXVlc3RpbmcsXHJcbiAgU3VjY2VzcyxcclxuICBFcnJvclxyXG59XHJcblxyXG5pbnRlcmZhY2UgSUxvZ2luQnJvYWRjYXN0TWVzc2FnZSB7XHJcbiAgc3RhdGU6IEVMb2dpblN0YXRlO1xyXG4gIHNvdXJjZUlkOiBzdHJpbmc7XHJcbiAgcmVxdWVzdElkPzogc3RyaW5nO1xyXG4gIGVtaXR0ZWRBdD86IG51bWJlcjtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdHlsZXM6IFtgXHJcbiAgI2xvZ2luLWRsZy13cmFwIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgbWF4LXdpZHRoOiA0MDBweDtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgcGFkZGluZzogMzBweDtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICB9XHJcbiAgXHJcbiAgLmxvZ2luLWRsZy1lbG0ge1xyXG4gICAgbWFyZ2luLXRvcDogMXJlbTtcclxuICB9XHJcblxyXG4gIC5sb2dpbi1kbGctZWxtLmxvZ2luLWRsZy1zdWdnZXN0IHtcclxuICAgIGRpc3BsYXk6IGZsZXggO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkZGQ7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XHJcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcclxuICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7XHJcbiAgICBib3gtc2hhZG93OiAxcHggNXB4IDEwcHggLTEycHggIzAwMDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1oZWFkZXIge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctaGVhZGVyIGgzIHtcclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gICAgZm9udC1zaXplOiAwLjlyZW07XHJcbiAgICBjb2xvcjogb3JhbmdlO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tbG9nbyB7XHJcbiAgICBoZWlnaHQ6IDU1cHg7XHJcbiAgICB3aWR0aDogNTVweDtcclxuICAgIC8qIGJhY2tncm91bmQ6IHVybChcIi9hc3NldHMvaW1hZ2VzL2xvZ28tMzAwcHgucG5nXCIpIG5vLXJlcGVhdDsgKi9cclxuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbiAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctY29udGVudCAucC1pbnB1dGdyb3VwIC5wLWlucHV0Z3JvdXAtYWRkb24ge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTVweCAwIDAgMTVweDtcclxuICAgIHdpZHRoOiA1MHB4O1xyXG4gIH1cclxuICAjbG9naW4tZGxnLWNvbnRlbnQgKntcclxuICAgIGZvbnQtc2l6ZTogLjlyZW07XHJcbiAgICAvKiBmb250LWZhbWlseTogJ0xleGVuZCcsICdSb2JvdG8nLCBzYW5zLXNlcmlmLCAnbWF0ZXJpYWwtaWNvbnMtcm91bmQnOyAqL1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uICoge1xyXG4gICAgZm9udC1zaXplOiAxcmVtO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCBpbnB1dCB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAwIDE1cHggMTVweCAwO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgYnV0dG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XHJcbiAgfVxyXG4gIFxyXG4gIC8qY2hlY2sgYW5pbWF0aW9uIGJsb2NrKi9cclxuICBcclxuICAuY2hlY2stYW5pbWF0aW9uLXdyYXAge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwMHB4KTtcclxuICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stbWFpbi1jb250YWluZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMHZoO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiA2LjI1cmVtO1xyXG4gICAgaGVpZ2h0OiA3LjVyZW07XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxLjI1cmVtKTtcclxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20gcmlnaHQsICM1ZGU1OTMsICM0MWQ2N2MpO1xyXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuODQpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlQ29udGFpbmVyIDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLWJhY2tncm91bmQgc3ZnIHtcclxuICAgIHdpZHRoOiA2NSU7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC4yNXJlbSk7XHJcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4MDtcclxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNoZWNrIDAuMzVzIGZvcndhcmRzIDEuMjVzIGVhc2Utb3V0O1xyXG4gICAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gIFxyXG4gIC5jaGVjay1jb250YWluZXIgLmNoZWNrLXNoYWRvdyB7XHJcbiAgICBib3R0b206IGNhbGMoLTE1JSAtIDVweCk7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNsb3Nlc3Qtc2lkZSwgcmdiYSg3MywgMjE4LCAxMzEsIDEpLCB0cmFuc3BhcmVudCk7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVTaGFkb3cgMC43NXMgZWFzZS1vdXQgZm9yd2FyZHMgMC43NXM7XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZUNvbnRhaW5lciB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xNSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDQzLjMzNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDYyLjUlIHtcclxuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDIxLjY2N3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA4MS4yNSUge1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgb3BhY2l0eTogMTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDaGVjayB7XHJcbiAgICBmcm9tIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDgwO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgdG8ge1xyXG4gICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlU2hhZG93IHtcclxuICAgIDAlIHtcclxuICAgICAgb3BhY2l0eTogMDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMjUlIHtcclxuICAgICAgb3BhY2l0eTogMC4yNTtcclxuICAgIH1cclxuICBcclxuICAgIDQzLjc1JSB7XHJcbiAgICAgIHdpZHRoOiA0MCU7XHJcbiAgICAgIGhlaWdodDogNyU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMzU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAxMDAlIHtcclxuICAgICAgd2lkdGg6IDg1JTtcclxuICAgICAgaGVpZ2h0OiAxNSU7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgfVxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9hZGVyLXdyYXAge1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDoxMDAlO1xyXG4gICAgd2lkdGg6MTAwJTtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB6LWluZGV4OiAxMDA7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmNDI7XHJcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcclxuICB9XHJcblxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9naW4tZGxnLWxvYWRlciB7XHJcbiAgICBib3JkZXI6IDE1cHggc29saWQgI2U3ZTdlNztcclxuICAgIGJvcmRlci10b3A6IDE1cHggc29saWQgIzUyZGJhMTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIHdpZHRoOiAxMDBweDtcclxuICAgIGhlaWdodDogMTAwcHg7XHJcbiAgICBhbmltYXRpb246IHNwaW5sb2FkZXIgMnMgbGluZWFyIGluZmluaXRlO1xyXG4gIH1cclxuXHJcbiAgI2xvZ2luLWRsZy13cmFwIC5sb2FkZXItd3JhcDo6YmVmb3JlIHtcclxuICAgIGNvbnRlbnQ6IFwiXCI7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB3aWR0aDogNzBweDtcclxuICAgIGhlaWdodDogNzBweDtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIGJvcmRlcjogMTVweCBzb2xpZCAjZTdlN2U3MDA7XHJcbiAgICBib3JkZXItdG9wOiAxNXB4IHNvbGlkICM1MmRiYTFjOTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogc3BpbmxvYWRlciAuNzVzIGxpbmVhciBpbmZpbml0ZTtcclxuICB9XHJcblxyXG4gIEBrZXlmcmFtZXMgc3BpbmxvYWRlciB7XHJcbiAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XHJcbiAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxyXG4gIH1cclxuICBgXSxcclxuICB0ZW1wbGF0ZTogYDxwLXRvYXN0IGtleT1cIiRsb2dpbi1kbGdcIiBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIj48L3AtdG9hc3Q+XHJcbiAgPGRpdiBpZD1cImxvZ2luLWRsZy13cmFwXCI+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwibG9naW4tbG9nb1wiIGNsYXNzPVwicC1tYi0yXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB1cmwoJ3t7cHJvcGVydGllcy5sb2dvSW1hZ2V9fScpIG5vLXJlcGVhdFwiPjwvZGl2PlxyXG4gICAgICA8aDMgKm5nSWY9XCIhc3VjY2Vzc1wiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkVGl0bGVcIj48L2gzPlxyXG4gICAgICA8aDMgKm5nSWY9XCJzdWNjZXNzXCIgc3R5bGU9XCJjb2xvcjpncmVlbiAhaW1wb3J0YW50O1wiPnt7cHJvcGVydGllcy5sb2dpblN1Y2Nlc3NNZXNzYWdlfX08L2gzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwibG9naW4tZGxnLWNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdWNjZXNzXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImxvYWRlci13cmFwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dGdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dGdyb3VwLWFkZG9uXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1yb3VuZFwiPnBlcnNvbjwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgZGlzYWJsZWQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3twcm9wZXJ0aWVzLnVzZXJuYW1lPy5wbGFjZUhvbGRlcn19XCIgW3ZhbHVlXT1cImRlY29kZVRva2VuPy5lbWFpbFwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5sb2NrPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChrZXlkb3duLmVudGVyKT1cImNsaWNrTG9naW4oKVwiIHBJbnB1dFRleHQgdHlwZT1cInBhc3N3b3JkXCIgXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3Byb3BlcnRpZXMucGFzc3dvcmQ/LnBsYWNlSG9sZGVyfX1cIiBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICBhdXRvZm9jdXMgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJ7e3Byb3BlcnRpZXMubG9naW5CdXR0b24/LnBsYWNlSG9sZGVyfX1cIiAoY2xpY2spPVwiY2xpY2tMb2dpbigpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwYXNzd29yZCB8fCBsb2FkaW5nXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG0gbG9naW4tZGxnLXN1Z2dlc3RcIiBzdHlsZT1cImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczogY2VudGVyO3VzZXItc2VsZWN0OiBub25lO1wiPlxyXG4gICAgICAgICAgPHNwYW4+e3twcm9wZXJ0aWVzLmxvZ291dEJ1dHRvbj8ubWVzc2FnZX19PC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cInt7cHJvcGVydGllcy5sb2dvdXRCdXR0b24/LnBsYWNlSG9sZGVyfX1cIiBcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrTG9nb3V0KClcIj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWNjZXNzXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MzVweDtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stYW5pbWF0aW9uLXdyYXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1tYWluLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWJhY2tncm91bmRcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCA2NSA1MVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgMjVMMjcuMzA3NyA0NEw1OC41IDdcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5gLFxyXG4gIHNlbGVjdG9yOiBcImFwcC1sb2NhbGl6ZS1sb2dpbmRsZ1wiLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlbkxvZ2luRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHJlYWRvbmx5IG1lc3NhZ2VLZXkgPSBcIiRsb2dpbi1kbGdcIjtcclxuICBwYXNzd29yZDogYW55O1xyXG4gIHJlYWRvbmx5IGRlY29kZVRva2VuOiBKd3RQYXlsb2FkIHwgbnVsbDtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgc3VjY2VzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZ2V0IGNvbmZpZygpIHsgcmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLmNvbmZpZzsgfVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Db25maWc6IElMb2dpbkRpYWxvZ0NvbmZpZ1xyXG5cclxuICBwcml2YXRlIGxvZ291dD86ICgpID0+IGFueVxyXG4gIHByaXZhdGUgbG9naW5Vcmw/OiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgcHJvcGVydGllczogSUxvZ2luRGlhbG9nUHJvcGVydGllcztcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbW92ZUxvZ2luTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Ccm9hZGNhc3RDaGFubmVsID0gXCJiYy1sb2NhbGl6ZS1sb2dpblwiO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlSWQgPSBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfWA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0b2tlblNlcnZpY2U6IExvY2FsaXplQXBpVG9rZW5TZXJ2aWNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJvYWRjYXN0U2VydmljZTogTG9jYWxpemVBcGlCcm9hZGNhc3RTZXJ2aWNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZTogTG9jYWxpemVBcGlTZXJ2aWNlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2R0OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGxnUmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkbGdDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHRoaXMudG9rZW5TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTG9jYWxpemVBcGlUb2tlblNlcnZpY2UpO1xyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoTG9jYWxpemVBcGlCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHRoaXMuYXBpU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsaXplQXBpU2VydmljZSk7XHJcbiAgICB0aGlzLmRlY29kZVRva2VuID0gdGhpcy50b2tlblNlcnZpY2UuZGVjb2RlUmVmcmVzaFRva2VuO1xyXG4gICAgdGhpcy5sb2dpbkNvbmZpZyA9IHRoaXMuZGxnQ29uZmlnLmRhdGEubG9naW5Db25maWc7XHJcbiAgICB0aGlzLnByb3BlcnRpZXMgPSB0aGlzLmxvZ2luQ29uZmlnLnByb3BlcnRpZXMhO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTG9naW5MaXN0ZW5lciA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5saXN0ZW48SUxvZ2luQnJvYWRjYXN0TWVzc2FnZT4odGhpcy5sb2dpbkJyb2FkY2FzdENoYW5uZWwsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgIGlmICghcGF5bG9hZCB8fCBwYXlsb2FkLnNvdXJjZUlkID09PSB0aGlzLnNvdXJjZUlkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmluZyBsb2dpbiBzdGF0ZSBtZXNzYWdlIHdpdGggaW52YWxpZCBwYXlsb2FkIG9yIGZyb20gc2FtZSBzb3VyY2UnLCBwYXlsb2FkKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAocGF5bG9hZC5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgRUxvZ2luU3RhdGUuUmVxdWVzdGluZzpcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRUxvZ2luU3RhdGUuU3VjY2VzczpcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS5jbGVhclJlcXVpcmVkTG9naW5TdGF0ZUFmdGVyTG9naW4oKTtcclxuICAgICAgICAgIHRoaXMubG9naW5TdWNjZXNzKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEVMb2dpblN0YXRlLkVycm9yOlxyXG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIHBheWxvYWQubWVzc2FnZSA/PyBcIkxvZ2luIGZhaWxlZFwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kbGdDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGxnQ29uZmlnLmRpc21pc3NhYmxlTWFzayA9IGZhbHNlO1xyXG4gICAgdGhpcy5kbGdDb25maWcubW9kYWwgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubG9nb3V0ID0gdGhpcy5sb2dpbkNvbmZpZy5sb2dvdXRGdW5jO1xyXG4gICAgdGhpcy5sb2dpblVybCA9IHRoaXMubG9naW5Db25maWcubG9naW5VcmxcclxuXHJcbiAgICBpZiAoIXRoaXMuZGVjb2RlVG9rZW4pIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIFwiVG9rZW4gaXMgaW52YWxpZFwiKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvZ291dD8uKCksIDIwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jZHQuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpblN1Y2Nlc3MoKSB7XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgYXdhaXQgd2FpdEZvcigyMDAwKTtcclxuICAgIHRoaXMuZGxnUmVmLmNsb3NlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2xpY2tMb2dpbigpIHtcclxuICAgIGlmICghdGhpcy5pc1ZhbGlkUGFzc3dvcmQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBcIlBhc3N3b3JkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGF0IGxlYXN0IDYgY2hhcmFjdGVyc1wiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnB1Ymxpc2hMb2dpblN0YXRlKEVMb2dpblN0YXRlLlJlcXVlc3RpbmcpO1xyXG4gICAgYXdhaXQgd2FpdEZvcigzMDApO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGxvZ2luUmVzID0gYXdhaXQgdGhpcy5sb2dpbigpO1xyXG4gICAgaWYgKCFsb2dpblJlcz8uc3RhdHVzKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBsb2dpblJlcz8ubWVzc2FnZSA/PyBcIkFuIGVycm9yIG9jY3VycmVkXCI7XHJcbiAgICAgIHRoaXMucHVibGlzaExvZ2luU3RhdGUoRUxvZ2luU3RhdGUuRXJyb3IsIG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG9rZW5TZXJ2aWNlLmFjY2Vzc1Rva2VuID0gbG9naW5SZXMudG9rZW5zLmFjY2Vzc1Rva2VuO1xyXG4gICAgY29uc3QgY29va2llT3B0aW9ucyA9IHsgZXhwaXJlczogdGhpcy5sb2dpbkNvbmZpZy5leHBpcmUgPz8gMzY1IH1cclxuICAgIExvY2FsaXplQXBpVG9rZW4uc3RvcmFnZS5zZXQodGhpcy5jb25maWcucmVmcmVzaFRva2VuPy5uYW1lIHx8ICcnLCBsb2dpblJlcy50b2tlbnMucmVmcmVzaFRva2VuLCBjb29raWVPcHRpb25zKTtcclxuICAgIHRoaXMuYXBpU2VydmljZS5jbGVhclJlcXVpcmVkTG9naW5TdGF0ZUFmdGVyTG9naW4oKTtcclxuXHJcbiAgICB0aGlzLnB1Ymxpc2hMb2dpblN0YXRlKEVMb2dpblN0YXRlLlN1Y2Nlc3MpO1xyXG4gICAgdGhpcy5sb2dpblN1Y2Nlc3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHVibGlzaExvZ2luU3RhdGUoc3RhdGU6IEVMb2dpblN0YXRlLCBtZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2UucHVibGlzaDxJTG9naW5Ccm9hZGNhc3RNZXNzYWdlPih0aGlzLmxvZ2luQnJvYWRjYXN0Q2hhbm5lbCwge1xyXG4gICAgICBzdGF0ZSxcclxuICAgICAgc291cmNlSWQ6IHRoaXMuc291cmNlSWQsXHJcbiAgICAgIG1lc3NhZ2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW4oKSB7XHJcbiAgICBpZiAoIXRoaXMubG9naW5Vcmw/LnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIFwiTG9naW4gdXJsIGlzIHJlcXVpcmVkXCIpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2dpbiB1cmwgaXMgcmVxdWlyZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmxvZ2luQ29uZmlnLmxvZ2luRnVuY3Rpb24pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlVzaW5nIGN1c3RvbSBsb2dpbiBmdW5jdGlvblwiKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2dpbkNvbmZpZy5sb2dpbkZ1bmN0aW9uKHRoaXMuZGVjb2RlVG9rZW4/LmVtYWlsID8/ICcnLCB0aGlzLnBhc3N3b3JkLnRyaW0oKSwgdGhpcy5nZXRIZWFkZXJzKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwhLFxyXG4gICAgICAgICAgeyBwYXNzd29yZDogdGhpcy5wYXNzd29yZC50cmltKCkgfSxcclxuICAgICAgICAgIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSkuc3Vic2NyaWJlKHsgbmV4dDogcmVzb2x2ZSwgZXJyb3I6IHJlamVjdCB9KSk7XHJcblxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SGVhZGVycygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtMb2NhbGl6ZUFwaVRva2VuLmh0dHBIZWFkZXJzLlhfUkVGUkVTSF9UT0tFTl06IHRoaXMudG9rZW5TZXJ2aWNlLnJlZnJlc2hUb2tlbiA/PyBcIlwiLFxyXG4gICAgICBbTG9jYWxpemVBcGlUb2tlbi5odHRwSGVhZGVycy5YX1RFTkFOVF06IHRoaXMudG9rZW5TZXJ2aWNlLnRlbmFudFRva2VuID8/IFwiXCIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVmFsaWRQYXNzd29yZCgpOiBib29sZWFuIHtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5wYXNzd29yZFZhbGlkYXRvclxyXG4gICAgICA/IHRoaXMucHJvcGVydGllcy5wYXNzd29yZFZhbGlkYXRvcih0aGlzLnBhc3N3b3JkKVxyXG4gICAgICA6IHRoaXMucGFzc3dvcmQgJiYgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID49IDYgJiYgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoIDw9IDUwO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tMb2dvdXQgPSAoKSA9PiB0aGlzLmxvZ291dD8uKCk7XHJcblxyXG4gIHByaXZhdGUgc2hvd01lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogdGhpcy5tZXNzYWdlS2V5LCBzZXZlcml0eSwgc3VtbWFyeSB9KTtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbml0aXplZFRpdGxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMucHJvcGVydGllcy50aXRsZSA/PyAnJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVtb3ZlTG9naW5MaXN0ZW5lcj8uKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWNrYWdlL2NvbXBvbmVudHMvbG9jYWxpemUtdG9rZW4tbG9naW4tZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUdSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQWMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUF1VHhGLE1BQU0sT0FBTyxpQ0FBaUM7SUFZNUMsWUFDbUIsY0FBOEIsRUFDOUIsR0FBc0IsRUFDdEIsTUFBd0IsRUFDeEIsU0FBOEIsRUFDOUIsU0FBdUIsRUFDdkIsUUFBa0I7UUFMbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWpCNUIsZUFBVSxHQUFHLFlBQVksQ0FBQztRQW1CakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2xFLElB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LENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7O1lBcllGLFNBQVMsU0FBQztnQkFxUFQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQTJESDtnQkFDUCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQzNCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO3lCQWxUNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1QUjthQWdFRjs7O1lBMVRRLGNBQWM7WUFQckIsaUJBQWlCO1lBUVcsZ0JBQWdCO1lBQXJDLG1CQUFtQjtZQUVuQixZQUFZO1lBUm5CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbmplY3RvcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IElMb2dpbkRpYWxvZ0NvbmZpZywgSUxvZ2luRGlhbG9nUHJvcGVydGllcyB9IGZyb20gXCIuLi9tb2RlbHMvbG9jYWxpemUtdG9rZW4tbW9kZWxzXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IEp3dFBheWxvYWQsIExvY2FsaXplQXBpTG9naW5TZXJ2aWNlLCB3YWl0Rm9yIH0gZnJvbSBcIkBzYW1iYXRoOTk5L2xvY2FsaXplLWFwaVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3R5bGVzOiBbYFxyXG4gICNsb2dpbi1kbGctd3JhcCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogNDAwcHg7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIHBhZGRpbmc6IDMwcHg7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgfVxyXG4gIFxyXG4gIC5sb2dpbi1kbGctZWxtIHtcclxuICAgIG1hcmdpbi10b3A6IDFyZW07XHJcbiAgfVxyXG5cclxuICAubG9naW4tZGxnLWVsbS5sb2dpbi1kbGctc3VnZ2VzdCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4IDtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGRkO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgcGFkZGluZzogNXB4IDEwcHg7XHJcbiAgICBiYWNrZ3JvdW5kOiAjZjlmOWY5O1xyXG4gICAgYm94LXNoYWRvdzogMXB4IDVweCAxMHB4IC0xMnB4ICMwMDA7XHJcbiAgfVxyXG4gIFxyXG4gICNsb2dpbi1kbGctaGVhZGVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWhlYWRlciBoMyB7XHJcbiAgICBmb250LXdlaWdodDogYm9sZDtcclxuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xyXG4gICAgY29sb3I6IG9yYW5nZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWxvZ28ge1xyXG4gICAgaGVpZ2h0OiA1NXB4O1xyXG4gICAgd2lkdGg6IDU1cHg7XHJcbiAgICAvKiBiYWNrZ3JvdW5kOiB1cmwoXCIvYXNzZXRzL2ltYWdlcy9sb2dvLTMwMHB4LnBuZ1wiKSBuby1yZXBlYXQ7ICovXHJcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW4gIWltcG9ydGFudDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gIH1cclxuICBcclxuICAjbG9naW4tZGxnLWNvbnRlbnQgLnAtaW5wdXRncm91cCAucC1pbnB1dGdyb3VwLWFkZG9uIHtcclxuICAgIGhlaWdodDogNDVweDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE1cHggMCAwIDE1cHg7XHJcbiAgICB3aWR0aDogNTBweDtcclxuICB9XHJcbiAgI2xvZ2luLWRsZy1jb250ZW50ICp7XHJcbiAgICBmb250LXNpemU6IC45cmVtO1xyXG4gICAgLyogZm9udC1mYW1pbHk6ICdMZXhlbmQnLCAnUm9ib3RvJywgc2Fucy1zZXJpZiwgJ21hdGVyaWFsLWljb25zLXJvdW5kJzsgKi9cclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAgLnAtaW5wdXRncm91cC1hZGRvbiAqIHtcclxuICAgIGZvbnQtc2l6ZTogMXJlbTtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IC5wLWlucHV0Z3JvdXAgaW5wdXQge1xyXG4gICAgaGVpZ2h0OiA0NXB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogMCAxNXB4IDE1cHggMDtcclxuICB9XHJcbiAgXHJcbiAgI2xvZ2luLWRsZy1jb250ZW50IGJ1dHRvbiB7XHJcbiAgICBoZWlnaHQ6IDQ1cHg7XHJcbiAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xyXG4gIH1cclxuICBcclxuICAvKmNoZWNrIGFuaW1hdGlvbiBibG9jayovXHJcbiAgXHJcbiAgLmNoZWNrLWFuaW1hdGlvbi13cmFwIHtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMDBweCk7XHJcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLW1haW4tY29udGFpbmVyIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDB2aDtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbjtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLWNvbnRhaW5lciB7XHJcbiAgICB3aWR0aDogNi4yNXJlbTtcclxuICAgIGhlaWdodDogNy41cmVtO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogY29sdW1uO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICB9XHJcbiAgXHJcbiAgLmNoZWNrLWNvbnRhaW5lciAuY2hlY2stYmFja2dyb3VuZCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogY2FsYygxMDAlIC0gMS4yNXJlbSk7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LCAjNWRlNTkzLCAjNDFkNjdjKTtcclxuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldCwgMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjg0KTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZUNvbnRhaW5lciAwLjc1cyBlYXNlLW91dCBmb3J3YXJkcyAwLjc1cztcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBvcGFjaXR5OiAwO1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1iYWNrZ3JvdW5kIHN2ZyB7XHJcbiAgICB3aWR0aDogNjUlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuMjVyZW0pO1xyXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODA7XHJcbiAgICBzdHJva2UtZGFzaG9mZnNldDogODA7XHJcbiAgICBhbmltYXRpb246IGFuaW1hdGVDaGVjayAwLjM1cyBmb3J3YXJkcyAxLjI1cyBlYXNlLW91dDtcclxuICAgIG1pbi13aWR0aDogYXV0byAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAuY2hlY2stY29udGFpbmVyIC5jaGVjay1zaGFkb3cge1xyXG4gICAgYm90dG9tOiBjYWxjKC0xNSUgLSA1cHgpO1xyXG4gICAgbGVmdDogMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjbG9zZXN0LXNpZGUsIHJnYmEoNzMsIDIxOCwgMTMxLCAxKSwgdHJhbnNwYXJlbnQpO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlU2hhZG93IDAuNzVzIGVhc2Utb3V0IGZvcndhcmRzIDAuNzVzO1xyXG4gIH1cclxuICBcclxuICBAa2V5ZnJhbWVzIGFuaW1hdGVDb250YWluZXIge1xyXG4gICAgMCUge1xyXG4gICAgICBvcGFjaXR5OiAwO1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDY1cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICBcclxuICAgIDI1JSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggNjVweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA0My43NSUge1xyXG4gICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpO1xyXG4gICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCA0My4zMzRweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCA2NXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA2Mi41JSB7XHJcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCAyMS42NjdweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgODEuMjUlIHtcclxuICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkgaW5zZXQsIDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMTAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDE7XHJcbiAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpIGluc2V0LCAwcHggMHB4IDBweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KSBpbnNldDtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQGtleWZyYW1lcyBhbmltYXRlQ2hlY2sge1xyXG4gICAgZnJvbSB7XHJcbiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4MDtcclxuICAgIH1cclxuICBcclxuICAgIHRvIHtcclxuICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIEBrZXlmcmFtZXMgYW5pbWF0ZVNoYWRvdyB7XHJcbiAgICAwJSB7XHJcbiAgICAgIG9wYWNpdHk6IDA7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDE1JTtcclxuICAgIH1cclxuICBcclxuICAgIDI1JSB7XHJcbiAgICAgIG9wYWNpdHk6IDAuMjU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICA0My43NSUge1xyXG4gICAgICB3aWR0aDogNDAlO1xyXG4gICAgICBoZWlnaHQ6IDclO1xyXG4gICAgICBvcGFjaXR5OiAwLjM1O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgMTAwJSB7XHJcbiAgICAgIHdpZHRoOiA4NSU7XHJcbiAgICAgIGhlaWdodDogMTUlO1xyXG4gICAgICBvcGFjaXR5OiAwLjI1O1xyXG4gICAgfVxyXG4gIH1cclxuICAjbG9naW4tZGxnLXdyYXAgLmxvYWRlci13cmFwIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6MTAwJTtcclxuICAgIHdpZHRoOjEwMCU7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgei1pbmRleDogMTAwO1xyXG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjQyO1xyXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XHJcbiAgfVxyXG5cclxuICAjbG9naW4tZGxnLXdyYXAgLmxvZ2luLWRsZy1sb2FkZXIge1xyXG4gICAgYm9yZGVyOiAxNXB4IHNvbGlkICNlN2U3ZTc7XHJcbiAgICBib3JkZXItdG9wOiAxNXB4IHNvbGlkICM1MmRiYTE7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICB3aWR0aDogMTAwcHg7XHJcbiAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgYW5pbWF0aW9uOiBzcGlubG9hZGVyIDJzIGxpbmVhciBpbmZpbml0ZTtcclxuICB9XHJcblxyXG4gICNsb2dpbi1kbGctd3JhcCAubG9hZGVyLXdyYXA6OmJlZm9yZSB7XHJcbiAgICBjb250ZW50OiBcIlwiO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgd2lkdGg6IDcwcHg7XHJcbiAgICBoZWlnaHQ6IDcwcHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICAgIHotaW5kZXg6IDE7XHJcbiAgICBib3JkZXI6IDE1cHggc29saWQgI2U3ZTdlNzAwO1xyXG4gICAgYm9yZGVyLXRvcDogMTVweCBzb2xpZCAjNTJkYmExYzk7XHJcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICBhbmltYXRpb246IHNwaW5sb2FkZXIgLjc1cyBsaW5lYXIgaW5maW5pdGU7XHJcbiAgfVxyXG5cclxuICBAa2V5ZnJhbWVzIHNwaW5sb2FkZXIge1xyXG4gICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxyXG4gICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cclxuICB9XHJcbiAgYF0sXHJcbiAgdGVtcGxhdGU6IGA8cC10b2FzdCBrZXk9XCIkbG9naW4tZGxnXCIgcG9zaXRpb249XCJ0b3AtY2VudGVyXCI+PC9wLXRvYXN0PlxyXG4gIDxkaXYgaWQ9XCJsb2dpbi1kbGctd3JhcFwiPlxyXG4gICAgPGRpdiBpZD1cImxvZ2luLWRsZy1oZWFkZXJcIj5cclxuICAgICAgPGRpdiBpZD1cImxvZ2luLWxvZ29cIiBjbGFzcz1cInAtbWItMlwiIHN0eWxlPVwiYmFja2dyb3VuZDogdXJsKCd7e3Byb3BlcnRpZXMubG9nb0ltYWdlfX0nKSBuby1yZXBlYXRcIj48L2Rpdj5cclxuICAgICAgPGgzICpuZ0lmPVwiIXN1Y2Nlc3NcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZFRpdGxlXCI+PC9oMz5cclxuICAgICAgPGgzICpuZ0lmPVwic3VjY2Vzc1wiIHN0eWxlPVwiY29sb3I6Z3JlZW4gIWltcG9ydGFudDtcIj57e3Byb3BlcnRpZXMubG9naW5TdWNjZXNzTWVzc2FnZX19PC9oMz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cImxvZ2luLWRsZy1jb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJsb2FkZXItd3JhcFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1sb2FkZXJcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtaW5wdXRncm91cFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIj5wZXJzb248L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7cHJvcGVydGllcy51c2VybmFtZT8ucGxhY2VIb2xkZXJ9fVwiIFt2YWx1ZV09XCJkZWNvZGVUb2tlbj8uZW1haWxcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWRsZy1lbG1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0Z3JvdXAtYWRkb25cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCI+bG9jazwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImxvYWRpbmdcIiAoa2V5ZG93bi5lbnRlcik9XCJjbGlja0xvZ2luKClcIiBwSW5wdXRUZXh0IHR5cGU9XCJwYXNzd29yZFwiIFxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twcm9wZXJ0aWVzLnBhc3N3b3JkPy5wbGFjZUhvbGRlcn19XCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgICAgYXV0b2ZvY3VzIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tZGxnLWVsbVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwie3twcm9wZXJ0aWVzLmxvZ2luQnV0dG9uPy5wbGFjZUhvbGRlcn19XCIgKGNsaWNrKT1cImNsaWNrTG9naW4oKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFzc3dvcmQgfHwgbG9hZGluZ1wiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1kbGctZWxtIGxvZ2luLWRsZy1zdWdnZXN0XCIgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6IGNlbnRlcjt1c2VyLXNlbGVjdDogbm9uZTtcIj5cclxuICAgICAgICAgIDxzcGFuPnt7cHJvcGVydGllcy5sb2dvdXRCdXR0b24/Lm1lc3NhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJ7e3Byb3BlcnRpZXMubG9nb3V0QnV0dG9uPy5wbGFjZUhvbGRlcn19XCIgXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0xvZ291dCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjM1cHg7XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWFuaW1hdGlvbi13cmFwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stbWFpbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgNjUgNTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDI1TDI3LjMwNzcgNDRMNTguNSA3XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+YCxcclxuICBzZWxlY3RvcjogXCJhcHAtbG9jYWxpemUtbG9naW5kbGdcIixcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplVG9rZW5Mb2dpbkRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICByZWFkb25seSBtZXNzYWdlS2V5ID0gXCIkbG9naW4tZGxnXCI7XHJcbiAgcGFzc3dvcmQ6IGFueTtcclxuICByZWFkb25seSBkZWNvZGVUb2tlbjogSnd0UGF5bG9hZCB8IG51bGw7XHJcbiAgZ2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLmFwaUxvZ2luU2VydmljZS5pc0xvYWRpbmc7IH1cclxuICBnZXQgc3VjY2VzcygpIHsgcmV0dXJuIHRoaXMuYXBpTG9naW5TZXJ2aWNlLmlzU3VjY2VzczsgfVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5Db25maWc6IElMb2dpbkRpYWxvZ0NvbmZpZ1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ291dD86ICgpID0+IGFueVxyXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IElMb2dpbkRpYWxvZ1Byb3BlcnRpZXM7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlMb2dpblNlcnZpY2U6IExvY2FsaXplQXBpTG9naW5TZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHQ6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkbGdSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRsZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvclxyXG4gICkge1xyXG4gICAgdGhpcy5sb2dpbkNvbmZpZyA9IHRoaXMuZGxnQ29uZmlnLmRhdGEubG9naW5Db25maWc7XHJcbiAgICB0aGlzLmFwaUxvZ2luU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvY2FsaXplQXBpTG9naW5TZXJ2aWNlKTtcclxuICAgIHRoaXMucHJvcGVydGllcyA9IHRoaXMubG9naW5Db25maWcucHJvcGVydGllcyE7XHJcbiAgICB0aGlzLmRlY29kZVRva2VuID0gdGhpcy5hcGlMb2dpblNlcnZpY2UuZGVjb2RlZFRva2VuO1xyXG5cclxuICAgIHRoaXMubG9nb3V0ID0gdGhpcy5sb2dpbkNvbmZpZy5sb2dvdXRGdW5jO1xyXG4gICAgdGhpcy5jb25maWd1cmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlKCkge1xyXG4gICAgdGhpcy5kbGdDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuZGxnQ29uZmlnLmRpc21pc3NhYmxlTWFzayA9IGZhbHNlO1xyXG4gICAgdGhpcy5kbGdDb25maWcubW9kYWwgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuYXBpTG9naW5TZXJ2aWNlLmNvbmZpZ3VyZSh7XHJcbiAgICAgIGxvZ2luVXJsOiB0aGlzLmxvZ2luQ29uZmlnLmxvZ2luVXJsLFxyXG4gICAgICBvblN1Y2Nlc3M6IHRoaXMubG9naW5TdWNjZXNzLmJpbmQodGhpcyksXHJcbiAgICAgIG9uRmFpbHVyZTogKG1zZykgPT4gdGhpcy5zaG93TWVzc2FnZShcImVycm9yXCIsIG1zZyksXHJcbiAgICAgIG9uRXJyb3I6IChtc2cpID0+IHRoaXMuc2hvd01lc3NhZ2UoXCJlcnJvclwiLCBtc2cpLFxyXG4gICAgICBsb2dpbkZ1bmN0aW9uOiB0aGlzLmxvZ2luQ29uZmlnLmxvZ2luRnVuY3Rpb24sXHJcbiAgICAgIHJlZnJlc2hUb2tlblR0bDogdGhpcy5sb2dpbkNvbmZpZy5leHBpcmUsXHJcbiAgICAgIHBhc3N3b3JkUmVzb2x2ZXI6ICgpID0+IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgIHBhc3N3b3JkVmFsaWRhdG9yOiB0aGlzLmxvZ2luQ29uZmlnLnByb3BlcnRpZXM/LnBhc3N3b3JkVmFsaWRhdG9yPy5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kZWNvZGVUb2tlbikge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKFwiZXJyb3JcIiwgXCJJbnZhbGlkIFRva2VuLiBQbGVhc2UgbG9naW4gYWdhaW4uXCIpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9nb3V0Py4oKSwgMjAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNkdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvZ2luU3VjY2VzcygpIHtcclxuICAgIGF3YWl0IHdhaXRGb3IoMjAwMCk7XHJcbiAgICB0aGlzLmRsZ1JlZi5jbG9zZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNsaWNrTG9naW4oKSB7XHJcbiAgICBhd2FpdCB0aGlzLmFwaUxvZ2luU2VydmljZS5jbGlja0xvZ2luKCk7XHJcbiAgfVxyXG5cclxuICBjbGlja0xvZ291dCgpIHtcclxuICAgIHRoaXMubG9nb3V0Py4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvd01lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IGtleTogdGhpcy5tZXNzYWdlS2V5LCBzZXZlcml0eSwgc3VtbWFyeSB9KTtcclxuICB9XHJcblxyXG4gIGdldCBzYW5pdGl6ZWRUaXRsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLnByb3BlcnRpZXMudGl0bGUgPz8gJycpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwaUxvZ2luU2VydmljZS51bkNvbmZpZ3VyZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhY2thZ2UvbW9kZWxzL2xvY2FsaXplLXRva2VuLW1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJTG9naW5EaWFsb2dQbGFjZUhvbGRlciB7XHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBpbnB1dCBmaWVsZCwgdHlwaWNhbGx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzIG9yIGhpbnRzLlxyXG4gICAqIFRoaXMgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IG9yIGluc3RydWN0aW9ucyB0byB0aGUgdXNlci5cclxuICAgKi9cclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFBsYWNlaG9sZGVyIG9yIGxhYmVsIHRleHQgZm9yIHRoZSBpbnB1dCBmaWVsZFxyXG4gICAqL1xyXG4gIHBsYWNlSG9sZGVyPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMb2dpbkRpYWxvZ1Byb3BlcnRpZXMge1xyXG4gIC8qKlxyXG4gICAqIFRpdGxlIG9mIHRoZSBsb2dpbiBkaWFsb2dcclxuICAgKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICBsb2dpblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIExvZ29nIGltYWdlIHBhdGggb3IgVVJMIHRvIGRpc3BsYXkgaW4gdGhlIGxvZ2luIGRpYWxvZ1xyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIFwiL2Fzc2V0cy9pbWFnZXMvbG9nby0zMDBweC5wbmdcIiBpbWFnZSB3aWxsIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgbG9nb0ltYWdlPzogc3RyaW5nO1xyXG4gIHVzZXJuYW1lPzogSUxvZ2luRGlhbG9nUGxhY2VIb2xkZXI7XHJcbiAgcGFzc3dvcmQ/OiBJTG9naW5EaWFsb2dQbGFjZUhvbGRlcjtcclxuICBsb2dpbkJ1dHRvbj86IElMb2dpbkRpYWxvZ1BsYWNlSG9sZGVyO1xyXG4gIGxvZ291dEJ1dHRvbj86IElMb2dpbkRpYWxvZ1BsYWNlSG9sZGVyO1xyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYXNzd29yZC5cclxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gY2hlY2tzIGlmIHRoZSBwYXNzd29yZCBpcyBiZXR3ZWVuIDYgYW5kIDUwIGNoYXJhY3RlcnMgbG9uZy5cclxuICAgKiBAcGFyYW0gcGFzc3dvcmRcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHBhc3N3b3JkVmFsaWRhdG9yPzogKHBhc3N3b3JkOiBzdHJpbmcpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2luRGlhbG9nQ29uZmlnIHtcclxuICBsb2dpblVybD86IHN0cmluZztcclxuICBsb2dvdXRVcmw/OiBzdHJpbmc7XHJcbiAgbG9naW5GdW5jdGlvbj86ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxhbnk+O1xyXG4gIGxvZ291dEZ1bmM/OiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIENvb2tpZSBleHBpcmF0aW9uIGRhdGUgaW4gZGF5cyBmcm9tIG5vdy4gSWYgbm90IHByb3ZpZGVkIHRoZSBjb29raWUgaXMgYSBzZXNzaW9uIGNvb2tpZVxyXG4gICAqL1xyXG4gIGV4cGlyZT86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgbG9naW4gZGlhbG9nLlxyXG4gICAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIGxvZ2luIGRpYWxvZydzIGJlaGF2aW9yIGFuZCBhcHBlYXJhbmNlXHJcbiAgICovXHJcbiAgcHJvcGVydGllcz86IElMb2dpbkRpYWxvZ1Byb3BlcnRpZXM7XHJcbn1cclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUtdG9rZW4tbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhY2thZ2UvbW9kZWxzL2xvY2FsaXplLXRva2VuLW1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJTG9naW5EaWFsb2dQbGFjZUhvbGRlciB7XHJcbiAgLyoqXHJcbiAgICogTWVzc2FnZSB0byBkaXNwbGF5IGluIHRoZSBpbnB1dCBmaWVsZCwgdHlwaWNhbGx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzIG9yIGhpbnRzLlxyXG4gICAqIFRoaXMgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IG9yIGluc3RydWN0aW9ucyB0byB0aGUgdXNlci5cclxuICAgKi9cclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFBsYWNlaG9sZGVyIG9yIGxhYmVsIHRleHQgZm9yIHRoZSBpbnB1dCBmaWVsZFxyXG4gICAqL1xyXG4gIHBsYWNlSG9sZGVyPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMb2dpbkRpYWxvZ1Byb3BlcnRpZXMge1xyXG4gIC8qKlxyXG4gICAqIFRpdGxlIG9mIHRoZSBsb2dpbiBkaWFsb2dcclxuICAgKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICBsb2dpblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIExvZ29nIGltYWdlIHBhdGggb3IgVVJMIHRvIGRpc3BsYXkgaW4gdGhlIGxvZ2luIGRpYWxvZ1xyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIFwiL2Fzc2V0cy9pbWFnZXMvbG9nby0zMDBweC5wbmdcIiBpbWFnZSB3aWxsIGJlIHVzZWQuXHJcbiAgICovXHJcbiAgbG9nb0ltYWdlPzogc3RyaW5nO1xyXG4gIHVzZXJuYW1lPzogSUxvZ2luRGlhbG9nUGxhY2VIb2xkZXI7XHJcbiAgcGFzc3dvcmQ/OiBJTG9naW5EaWFsb2dQbGFjZUhvbGRlcjtcclxuICBsb2dpbkJ1dHRvbj86IElMb2dpbkRpYWxvZ1BsYWNlSG9sZGVyO1xyXG4gIGxvZ291dEJ1dHRvbj86IElMb2dpbkRpYWxvZ1BsYWNlSG9sZGVyO1xyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYXNzd29yZC5cclxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gY2hlY2tzIGlmIHRoZSBwYXNzd29yZCBpcyBiZXR3ZWVuIDYgYW5kIDUwIGNoYXJhY3RlcnMgbG9uZy5cclxuICAgKiBAcGFyYW0gcGFzc3dvcmRcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHBhc3N3b3JkVmFsaWRhdG9yPzogKHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2luRGlhbG9nQ29uZmlnIHtcclxuICBsb2dpblVybD86IHN0cmluZztcclxuICBsb2dvdXRVcmw/OiBzdHJpbmc7XHJcbiAgbG9naW5GdW5jdGlvbj86ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxhbnk+O1xyXG4gIGxvZ291dEZ1bmM/OiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIENvb2tpZSBleHBpcmF0aW9uIGRhdGUgaW4gZGF5cyBmcm9tIG5vdy4gSWYgbm90IHByb3ZpZGVkIHRoZSBjb29raWUgaXMgYSBzZXNzaW9uIGNvb2tpZVxyXG4gICAqL1xyXG4gIGV4cGlyZT86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgbG9naW4gZGlhbG9nLlxyXG4gICAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIGxvZ2luIGRpYWxvZydzIGJlaGF2aW9yIGFuZCBhcHBlYXJhbmNlXHJcbiAgICovXHJcbiAgcHJvcGVydGllcz86IElMb2dpbkRpYWxvZ1Byb3BlcnRpZXM7XHJcbn1cclxuIl19
@@ -1,75 +1,54 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { HttpClient } from '@angular/common/http';
3
2
  import * as i0 from '@angular/core';
4
3
  import { Component, ViewEncapsulation, ChangeDetectorRef, Injector, Injectable, NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
5
4
  import { MessageService } from 'primeng/api';
6
5
  import { DynamicDialogRef, DynamicDialogConfig, DialogService } from 'primeng/dynamicdialog';
7
6
  import { DomSanitizer } from '@angular/platform-browser';
8
7
  import * as i1 from '@sambath999/localize-api';
9
- import { LocalizeApiTokenService, LocalizeApiBroadcastService, LocalizeApiService, waitFor, LocalizeApiToken } from '@sambath999/localize-api';
8
+ import { LocalizeApiLoginService, waitFor, LocalizeApiTokenService, LocalizeApiService } from '@sambath999/localize-api';
10
9
  import { CommonModule } from '@angular/common';
11
10
  import { ToastModule } from 'primeng/toast';
12
11
  import { InputTextModule } from 'primeng/inputtext';
13
12
  import { ButtonModule } from 'primeng/button';
14
13
  import { FormsModule } from '@angular/forms';
15
14
 
16
- var ELoginState;
17
- (function (ELoginState) {
18
- ELoginState[ELoginState["Requesting"] = 0] = "Requesting";
19
- ELoginState[ELoginState["Success"] = 1] = "Success";
20
- ELoginState[ELoginState["Error"] = 2] = "Error";
21
- })(ELoginState || (ELoginState = {}));
22
15
  class LocalizeTokenLoginDialogComponent {
23
- constructor(messageService, cdt, dlgRef, dlgConfig, httpClient, sanitizer, injector) {
16
+ constructor(messageService, cdt, dlgRef, dlgConfig, sanitizer, injector) {
24
17
  this.messageService = messageService;
25
18
  this.cdt = cdt;
26
19
  this.dlgRef = dlgRef;
27
20
  this.dlgConfig = dlgConfig;
28
- this.httpClient = httpClient;
29
21
  this.sanitizer = sanitizer;
30
22
  this.injector = injector;
31
23
  this.messageKey = "$login-dlg";
32
- this.loading = false;
33
- this.success = false;
34
- this.loginBroadcastChannel = "bc-localize-login";
35
- this.sourceId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;
36
- this.clickLogout = () => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); };
37
- this.tokenService = this.injector.get(LocalizeApiTokenService);
38
- this.broadcastService = this.injector.get(LocalizeApiBroadcastService);
39
- this.apiService = this.injector.get(LocalizeApiService);
40
- this.decodeToken = this.tokenService.decodeRefreshToken;
41
24
  this.loginConfig = this.dlgConfig.data.loginConfig;
25
+ this.apiLoginService = this.injector.get(LocalizeApiLoginService);
42
26
  this.properties = this.loginConfig.properties;
43
- this.removeLoginListener = this.broadcastService.listen(this.loginBroadcastChannel, (payload) => {
44
- var _a;
45
- if (!payload || payload.sourceId === this.sourceId) {
46
- console.warn('Ignoring login state message with invalid payload or from same source', payload);
47
- return;
48
- }
49
- switch (payload.state) {
50
- case ELoginState.Requesting:
51
- this.loading = true;
52
- this.success = false;
53
- break;
54
- case ELoginState.Success:
55
- this.apiService.clearRequiredLoginStateAfterLogin();
56
- this.loginSuccess();
57
- break;
58
- case ELoginState.Error:
59
- this.showMessage("error", (_a = payload.message) !== null && _a !== void 0 ? _a : "Login failed");
60
- break;
61
- }
62
- });
27
+ this.decodeToken = this.apiLoginService.decodedToken;
28
+ this.logout = this.loginConfig.logoutFunc;
29
+ this.configure();
63
30
  }
64
- get config() { return this.tokenService.config; }
65
- ngOnInit() {
31
+ get loading() { return this.apiLoginService.isLoading; }
32
+ get success() { return this.apiLoginService.isSuccess; }
33
+ configure() {
34
+ var _a, _b;
66
35
  this.dlgConfig.closable = false;
67
36
  this.dlgConfig.dismissableMask = false;
68
37
  this.dlgConfig.modal = true;
69
- this.logout = this.loginConfig.logoutFunc;
70
- this.loginUrl = this.loginConfig.loginUrl;
38
+ this.apiLoginService.configure({
39
+ loginUrl: this.loginConfig.loginUrl,
40
+ onSuccess: this.loginSuccess.bind(this),
41
+ onFailure: (msg) => this.showMessage("error", msg),
42
+ onError: (msg) => this.showMessage("error", msg),
43
+ loginFunction: this.loginConfig.loginFunction,
44
+ refreshTokenTtl: this.loginConfig.expire,
45
+ passwordResolver: () => this.password,
46
+ passwordValidator: (_b = (_a = this.loginConfig.properties) === null || _a === void 0 ? void 0 : _a.passwordValidator) === null || _b === void 0 ? void 0 : _b.bind(this),
47
+ });
48
+ }
49
+ ngOnInit() {
71
50
  if (!this.decodeToken) {
72
- this.showMessage("error", "Token is invalid");
51
+ this.showMessage("error", "Invalid Token. Please login again.");
73
52
  setTimeout(() => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); }, 2000);
74
53
  }
75
54
  }
@@ -78,85 +57,28 @@ class LocalizeTokenLoginDialogComponent {
78
57
  }
79
58
  loginSuccess() {
80
59
  return __awaiter(this, void 0, void 0, function* () {
81
- this.success = true;
82
60
  yield waitFor(2000);
83
61
  this.dlgRef.close(true);
84
62
  });
85
63
  }
86
64
  clickLogin() {
87
- var _a, _b, _c;
88
65
  return __awaiter(this, void 0, void 0, function* () {
89
- if (!this.isValidPassword) {
90
- return this.showMessage("error", "Password is required and must be at least 6 characters");
91
- }
92
- this.publishLoginState(ELoginState.Requesting);
93
- yield waitFor(300);
94
- this.loading = true;
95
- const loginRes = yield this.login();
96
- if (!(loginRes === null || loginRes === void 0 ? void 0 : loginRes.status)) {
97
- const message = (_a = loginRes === null || loginRes === void 0 ? void 0 : loginRes.message) !== null && _a !== void 0 ? _a : "An error occurred";
98
- this.publishLoginState(ELoginState.Error, message);
99
- return this.showMessage("error", message);
100
- }
101
- this.tokenService.accessToken = loginRes.tokens.accessToken;
102
- const cookieOptions = { expires: (_b = this.loginConfig.expire) !== null && _b !== void 0 ? _b : 365 };
103
- LocalizeApiToken.storage.set(((_c = this.config.refreshToken) === null || _c === void 0 ? void 0 : _c.name) || '', loginRes.tokens.refreshToken, cookieOptions);
104
- this.apiService.clearRequiredLoginStateAfterLogin();
105
- this.publishLoginState(ELoginState.Success);
106
- this.loginSuccess();
66
+ yield this.apiLoginService.clickLogin();
107
67
  });
108
68
  }
109
- publishLoginState(state, message) {
110
- this.broadcastService.publish(this.loginBroadcastChannel, {
111
- state,
112
- sourceId: this.sourceId,
113
- message,
114
- });
115
- }
116
- login() {
117
- var _a, _b, _c;
118
- return __awaiter(this, void 0, void 0, function* () {
119
- if (!((_a = this.loginUrl) === null || _a === void 0 ? void 0 : _a.trim().length)) {
120
- this.showMessage("error", "Login url is required");
121
- throw new Error("Login url is required");
122
- }
123
- try {
124
- if (this.loginConfig.loginFunction) {
125
- console.log("Using custom login function");
126
- return yield this.loginConfig.loginFunction((_c = (_b = this.decodeToken) === null || _b === void 0 ? void 0 : _b.email) !== null && _c !== void 0 ? _c : '', this.password.trim(), this.getHeaders());
127
- }
128
- return yield new Promise((resolve, reject) => this.httpClient.post(this.loginUrl, { password: this.password.trim() }, { headers: this.getHeaders() }).subscribe({ next: resolve, error: reject }));
129
- }
130
- catch (e) {
131
- this.showMessage("error", e.message);
132
- return null;
133
- }
134
- });
135
- }
136
- getHeaders() {
137
- var _a, _b;
138
- return {
139
- [LocalizeApiToken.httpHeaders.X_REFRESH_TOKEN]: (_a = this.tokenService.refreshToken) !== null && _a !== void 0 ? _a : "",
140
- [LocalizeApiToken.httpHeaders.X_TENANT]: (_b = this.tokenService.tenantToken) !== null && _b !== void 0 ? _b : "",
141
- };
142
- }
143
- get isValidPassword() {
144
- this.loading = false;
145
- return this.properties.passwordValidator
146
- ? this.properties.passwordValidator(this.password)
147
- : this.password && this.password.trim().length >= 6 && this.password.trim().length <= 50;
69
+ clickLogout() {
70
+ var _a;
71
+ (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this);
148
72
  }
149
73
  showMessage(severity, summary) {
150
74
  this.messageService.add({ key: this.messageKey, severity, summary });
151
- this.loading = false;
152
75
  }
153
76
  get sanitizedTitle() {
154
77
  var _a;
155
78
  return this.sanitizer.bypassSecurityTrustHtml((_a = this.properties.title) !== null && _a !== void 0 ? _a : '');
156
79
  }
157
80
  ngOnDestroy() {
158
- var _a;
159
- (_a = this.removeLoginListener) === null || _a === void 0 ? void 0 : _a.call(this);
81
+ this.apiLoginService.unConfigure();
160
82
  }
161
83
  }
162
84
  LocalizeTokenLoginDialogComponent.decorators = [
@@ -475,7 +397,6 @@ LocalizeTokenLoginDialogComponent.ctorParameters = () => [
475
397
  { type: ChangeDetectorRef },
476
398
  { type: DynamicDialogRef },
477
399
  { type: DynamicDialogConfig },
478
- { type: HttpClient },
479
400
  { type: DomSanitizer },
480
401
  { type: Injector }
481
402
  ];