@nibssplc/cams-sdk-react 0.0.1-beta.99 → 1.0.0-rc.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -4,6 +4,8 @@ var React = require('react');
4
4
  var camsSdk = require('@nibssplc/cams-sdk');
5
5
  var msalReact = require('@azure/msal-react');
6
6
  var msalBrowser = require('@azure/msal-browser');
7
+ var sonner = require('sonner');
8
+ var jsxRuntime = require('react/jsx-runtime');
7
9
  var z = require('zod');
8
10
  var inputOtp = require('input-otp');
9
11
  var lucideReact = require('lucide-react');
@@ -15,9 +17,7 @@ var reactSlot = require('@radix-ui/react-slot');
15
17
  var LabelPrimitive = require('@radix-ui/react-label');
16
18
  var classVarianceAuthority = require('class-variance-authority');
17
19
  var DialogPrimitive = require('@radix-ui/react-dialog');
18
- var sonner = require('sonner');
19
20
  var framerMotion = require('framer-motion');
20
- var axios = require('axios');
21
21
 
22
22
  function _interopNamespaceDefault(e) {
23
23
  var n = Object.create(null);
@@ -80,7 +80,7 @@ function __rest(s, e) {
80
80
  return t;
81
81
  }
82
82
 
83
- function __awaiter(thisArg, _arguments, P, generator) {
83
+ function __awaiter$1(thisArg, _arguments, P, generator) {
84
84
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
85
85
  return new (P || (P = Promise))(function (resolve, reject) {
86
86
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -90,7 +90,7 @@ function __awaiter(thisArg, _arguments, P, generator) {
90
90
  });
91
91
  }
92
92
 
93
- function __generator(thisArg, body) {
93
+ function __generator$1(thisArg, body) {
94
94
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
95
95
  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
96
96
  function verb(n) { return function (v) { return step([n, v]); }; }
@@ -187,10 +187,10 @@ function useCAMSAuth(options) {
187
187
  }
188
188
  }
189
189
  }, [options.storageKey]);
190
- var login = React.useCallback(function (config) { return __awaiter(_this, void 0, void 0, function () {
190
+ var login = React.useCallback(function (config) { return __awaiter$1(_this, void 0, void 0, function () {
191
191
  var loginConfig, userProfile, err_1, e, isPopupClosedError, restoredToken, userProfile;
192
192
  var _a, _b, _c;
193
- return __generator(this, function (_d) {
193
+ return __generator$1(this, function (_d) {
194
194
  switch (_d.label) {
195
195
  case 0:
196
196
  if (!sessionManagerRef.current)
@@ -238,8 +238,8 @@ function useCAMSAuth(options) {
238
238
  }
239
239
  });
240
240
  }); }, [options.idleTimeout]);
241
- var logout = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
242
- return __generator(this, function (_a) {
241
+ var logout = React.useCallback(function () { return __awaiter$1(_this, void 0, void 0, function () {
242
+ return __generator$1(this, function (_a) {
243
243
  switch (_a.label) {
244
244
  case 0:
245
245
  if (!sessionManagerRef.current)
@@ -269,11 +269,154 @@ function useCAMSAuth(options) {
269
269
  };
270
270
  }
271
271
 
272
- var setCookie$1 = function (name, value, days) {
272
+ var _a;
273
+ // Crypto polyfill for MSAL browser compatibility
274
+ // Only apply if crypto.subtle is completely missing
275
+ if (typeof window !== "undefined" && !((_a = window.crypto) === null || _a === void 0 ? void 0 : _a.subtle)) {
276
+ // Ensure crypto object exists
277
+ if (!window.crypto) {
278
+ window.crypto = {};
279
+ }
280
+ // Polyfill getRandomValues
281
+ if (!window.crypto.getRandomValues) {
282
+ window.crypto.getRandomValues = function (array) {
283
+ var bytes = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);
284
+ for (var i = 0; i < bytes.length; i++) {
285
+ bytes[i] = Math.floor(Math.random() * 256);
286
+ }
287
+ return array;
288
+ };
289
+ }
290
+ var sha256_1 = function (data) { return __awaiter(void 0, void 0, void 0, function () {
291
+ var toUint8, bytes, hash, k, ml, msg, dv, high, low, i, w, j, j, s0, s1, a, b, c, d, e, f, g, h, j, S1, ch, temp1, S0, maj, temp2, result, i;
292
+ return __generator(this, function (_a) {
293
+ toUint8 = function (src) {
294
+ if (src instanceof ArrayBuffer)
295
+ return new Uint8Array(src);
296
+ if (ArrayBuffer.isView(src)) {
297
+ var view = src;
298
+ return new Uint8Array(view.buffer, view.byteOffset || 0, view.byteLength);
299
+ }
300
+ throw new TypeError("Unsupported BufferSource");
301
+ };
302
+ bytes = toUint8(data);
303
+ hash = new Uint32Array(8);
304
+ k = new Uint32Array([
305
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
306
+ 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
307
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
308
+ 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
309
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
310
+ 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
311
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
312
+ 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
313
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
314
+ 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
315
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
316
+ ]);
317
+ hash[0] = 0x6a09e667;
318
+ hash[1] = 0xbb67ae85;
319
+ hash[2] = 0x3c6ef372;
320
+ hash[3] = 0xa54ff53a;
321
+ hash[4] = 0x510e527f;
322
+ hash[5] = 0x9b05688c;
323
+ hash[6] = 0x1f83d9ab;
324
+ hash[7] = 0x5be0cd19;
325
+ ml = bytes.length * 8;
326
+ msg = new Uint8Array(bytes.length + 64 + ((64 - ((bytes.length + 9) % 64)) % 64));
327
+ msg.set(bytes);
328
+ msg[bytes.length] = 0x80;
329
+ dv = new DataView(msg.buffer);
330
+ high = Math.floor(ml / 0x100000000);
331
+ low = ml >>> 0;
332
+ dv.setUint32(msg.length - 8, high, false);
333
+ dv.setUint32(msg.length - 4, low, false);
334
+ for (i = 0; i < msg.length; i += 64) {
335
+ w = new Uint32Array(64);
336
+ for (j = 0; j < 16; j++)
337
+ w[j] = new DataView(msg.buffer).getUint32(i + j * 4, false);
338
+ for (j = 16; j < 64; j++) {
339
+ s0 = ((w[j - 15] >>> 7) | (w[j - 15] << 25)) ^
340
+ ((w[j - 15] >>> 18) | (w[j - 15] << 14)) ^
341
+ (w[j - 15] >>> 3);
342
+ s1 = ((w[j - 2] >>> 17) | (w[j - 2] << 15)) ^
343
+ ((w[j - 2] >>> 19) | (w[j - 2] << 13)) ^
344
+ (w[j - 2] >>> 10);
345
+ w[j] = (w[j - 16] + s0 + w[j - 7] + s1) >>> 0;
346
+ }
347
+ a = hash[0], b = hash[1], c = hash[2], d = hash[3], e = hash[4], f = hash[5], g = hash[6], h = hash[7];
348
+ for (j = 0; j < 64; j++) {
349
+ S1 = ((e >>> 6) | (e << 26)) ^
350
+ ((e >>> 11) | (e << 21)) ^
351
+ ((e >>> 25) | (e << 7));
352
+ ch = (e & f) ^ (~e & g);
353
+ temp1 = (h + S1 + ch + k[j] + w[j]) >>> 0;
354
+ S0 = ((a >>> 2) | (a << 30)) ^
355
+ ((a >>> 13) | (a << 19)) ^
356
+ ((a >>> 22) | (a << 10));
357
+ maj = (a & b) ^ (a & c) ^ (b & c);
358
+ temp2 = (S0 + maj) >>> 0;
359
+ h = g;
360
+ g = f;
361
+ f = e;
362
+ e = (d + temp1) >>> 0;
363
+ d = c;
364
+ c = b;
365
+ b = a;
366
+ a = (temp1 + temp2) >>> 0;
367
+ }
368
+ hash[0] = (hash[0] + a) >>> 0;
369
+ hash[1] = (hash[1] + b) >>> 0;
370
+ hash[2] = (hash[2] + c) >>> 0;
371
+ hash[3] = (hash[3] + d) >>> 0;
372
+ hash[4] = (hash[4] + e) >>> 0;
373
+ hash[5] = (hash[5] + f) >>> 0;
374
+ hash[6] = (hash[6] + g) >>> 0;
375
+ hash[7] = (hash[7] + h) >>> 0;
376
+ }
377
+ result = new Uint8Array(32);
378
+ for (i = 0; i < 8; i++)
379
+ new DataView(result.buffer).setUint32(i * 4, hash[i], false);
380
+ return [2 /*return*/, result.buffer];
381
+ });
382
+ }); };
383
+ // Create the polyfilled subtle object
384
+ var polyfillSubtle = {
385
+ digest: function (algorithm, data) { return __awaiter(void 0, void 0, void 0, function () {
386
+ var alg;
387
+ return __generator(this, function (_a) {
388
+ alg = typeof algorithm === "string"
389
+ ? algorithm
390
+ : algorithm.name;
391
+ if (alg === "SHA-256")
392
+ return [2 /*return*/, sha256_1(data)];
393
+ throw new Error("Unsupported algorithm: ".concat(alg));
394
+ });
395
+ }); },
396
+ };
397
+ // Set the polyfilled subtle object
398
+ window.crypto.subtle = polyfillSubtle;
399
+ // Polyfill randomUUID
400
+ if (!window.crypto.randomUUID) {
401
+ window.crypto.randomUUID =
402
+ function () {
403
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
404
+ var r = (Math.random() * 16) | 0;
405
+ var v = c === "x" ? r : (r & 0x3) | 0x8;
406
+ return v.toString(16);
407
+ });
408
+ };
409
+ }
410
+ console.log("Crypto polyfill applied (native crypto.subtle not available)");
411
+ }
412
+
413
+ var setCookie = function (name, value, days) {
414
+ if (days === void 0) { days = 1; }
273
415
  var expires = new Date(Date.now() + days * 24 * 60 * 60 * 1000).toUTCString();
416
+ console.log("Auth Cookie Expires >>>", { name: name, value: value, expires: expires });
274
417
  document.cookie = "".concat(name, "=").concat(encodeURIComponent(value), "; expires=").concat(expires, "; path=/; samesite=Lax");
275
418
  };
276
- var getCookie$1 = function (name) {
419
+ var getCookie = function (name) {
277
420
  var _a;
278
421
  return ((_a = document.cookie
279
422
  .split("; ")
@@ -284,23 +427,25 @@ var getCookie$1 = function (name) {
284
427
  .split("=")[1])
285
428
  : null;
286
429
  };
287
- var deleteCookie$1 = function (name) {
430
+ var deleteCookie = function (name) {
288
431
  document.cookie = name + "=; Max-Age=-99999999; path=/";
289
432
  };
290
433
 
291
434
  function useCAMSMSALAuth(options) {
292
435
  var _this = this;
293
- var storageKey = options.storageKey || "CAMS-MSAL-AUTH-SDK";
294
- var _a = msalReact.useMsal(), instance = _a.instance, inProgress = _a.inProgress, accounts = _a.accounts;
436
+ var optStorageKey = options.storageKey, optScopes = options.scopes, prompt = options.prompt, appCode = options.appCode, ValidateUserEndpoint = options.ValidateUserEndpoint, _a = options.activeCookiePeriod, activeCookiePeriod = _a === void 0 ? 1 : _a;
437
+ var storageKey = optStorageKey || "CAMS-MSAL-AUTH-SDK";
438
+ var _b = msalReact.useMsal(), instance = _b.instance, inProgress = _b.inProgress, accounts = _b.accounts;
295
439
  var account = msalReact.useAccount(accounts[0] || {});
296
- var _b = React.useState(null), error = _b[0], setError = _b[1];
297
- var _c = React.useState(""), idToken = _c[0], setIdToken = _c[1];
298
- var _d = React.useState(""), accessToken = _d[0], setAccessToken = _d[1];
299
- var _e = React.useState(null), mfaAuthenticator = _e[0], setMfaAuthenticator = _e[1];
300
- var _f = React.useState(false), requiresMFA = _f[0], setRequiresMFA = _f[1];
301
- var isLoading = inProgress !== msalBrowser.InteractionStatus.None;
302
- var isAuthenticated = !!account && !!accessToken && !requiresMFA;
303
- var scopes = options.scopes || ["openid", "profile", "email"];
440
+ var _c = React.useState(null), error = _c[0], setError = _c[1];
441
+ var _d = React.useState(""), idToken = _d[0], setIdToken = _d[1];
442
+ var _e = React.useState(""), accessToken = _e[0], setAccessToken = _e[1];
443
+ var _f = React.useState(""), email = _f[0], setEmail = _f[1];
444
+ var _g = React.useState(false), requiresMFA = _g[0], setRequiresMFA = _g[1];
445
+ var _h = React.useState(false), isFetchingMFAConfig = _h[0], setIsFetchingMFAConfig = _h[1];
446
+ var isLoading = inProgress !== msalBrowser.InteractionStatus.None || isFetchingMFAConfig;
447
+ var isAuthenticated = !!account && !!accessToken;
448
+ var scopes = optScopes || ["openid", "profile", "email"];
304
449
  var isTokenValid = function (token) {
305
450
  try {
306
451
  var payload = JSON.parse(atob(token.split(".")[1]));
@@ -316,23 +461,17 @@ function useCAMSMSALAuth(options) {
316
461
  if (stored) {
317
462
  try {
318
463
  var _a = JSON.parse(stored), accessToken_1 = _a.accessToken, idToken_1 = _a.idToken, storedRequiresMFA = _a.requiresMFA, storedIsAuthenticated = _a.isAuthenticated;
464
+ // Restore MFA state
319
465
  if (accessToken_1 && isTokenValid(accessToken_1)) {
320
466
  setAccessToken(accessToken_1);
321
467
  setIdToken(idToken_1);
322
- // Restore MFA state
323
- if (storedRequiresMFA && !storedIsAuthenticated) {
324
- var mfaConfig = {
325
- accessToken: accessToken_1,
326
- idToken: idToken_1,
327
- appCode: options.appCode,
328
- provider: "MSAL",
329
- apiEndpoint: options.MFAEndpoint,
330
- };
331
- var authenticator = new camsSdk.CAMSMFAAuthenticator(mfaConfig);
332
- setMfaAuthenticator(authenticator);
333
- setRequiresMFA(true);
334
- }
335
- camsSdk.Logger.debug("App Code", { ">>>": options.appCode });
468
+ setRequiresMFA(storedRequiresMFA);
469
+ camsSdk.Logger.debug("Restored authentication state from storage", {
470
+ accessToken: accessToken_1,
471
+ idToken: idToken_1,
472
+ requiresMFA: storedRequiresMFA,
473
+ isAuthenticated: storedIsAuthenticated,
474
+ });
336
475
  }
337
476
  else {
338
477
  localStorage.removeItem(storageKey);
@@ -340,88 +479,92 @@ function useCAMSMSALAuth(options) {
340
479
  }
341
480
  catch (_b) { }
342
481
  }
343
- else if (account) {
344
- // Storage cleared but MSAL account exists - clear MSAL state
345
- instance.logoutRedirect().catch(function () { });
346
- }
347
482
  }
348
483
  }, [accessToken, account, instance, options.storageKey]);
349
- // useEffect(() => {
350
- // const handleRedirect = async () => {
351
- // try {
352
- // const response = await instance.handleRedirectPromise();
353
- // if (response) {
354
- // const account = response.account;
355
- // instance.setActiveA ccount(account);
356
- // const tokenResponse = await instance.acq uireTokenSilent({
357
- // scopes,
358
- // account,
359
- // });
360
- // setToken(tokenResponse.accessToken);
361
- // setAccessToken(tokenResponse.accessToken);
362
- // setIdToken(tokenResponse.idTo ken);
363
- // options.onAuthSuccess?.(tokenR esponse.accessToken);
364
- // if (
365
- // typeof window !== "undefined" &&
366
- // process.env.NODE_ENV !== "test"
367
- // ) {
368
- // window.location.href = options.mfaUrl!;
369
- // }
370
- // }
371
- // } catch (err) {
372
- // console.error("Redirect handling failed:", err);
373
- // }
374
- // };
375
- // handleRedirect();
376
- // }, []);
377
- var login = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
378
- var response, mfaConfig, authenticator, err_1, camsError_1, camsError;
379
- var _a, _b, _c, _d;
380
- return __generator(this, function (_e) {
381
- switch (_e.label) {
484
+ var login = React.useCallback(function () { return __awaiter$1(_this, void 0, void 0, function () {
485
+ var response, authenticator, userConfig, camsError, error_1, err_1, camsError_1, camsError;
486
+ var _a, _b;
487
+ return __generator$1(this, function (_c) {
488
+ switch (_c.label) {
382
489
  case 0:
490
+ if (inProgress !== msalBrowser.InteractionStatus.None) {
491
+ camsSdk.Logger.warn("Authentication already in progress, ignoring duplicate call");
492
+ return [2 /*return*/];
493
+ }
383
494
  setError(null);
384
- _e.label = 1;
495
+ _c.label = 1;
385
496
  case 1:
386
- _e.trys.push([1, 3, , 4]);
497
+ _c.trys.push([1, 7, , 8]);
387
498
  return [4 /*yield*/, instance.loginPopup({
388
499
  scopes: scopes,
389
- prompt: options.prompt || "login",
500
+ prompt: prompt || "login",
390
501
  })];
391
502
  case 2:
392
- response = _e.sent();
393
- console.log("Login Token response:", {
394
- accessToken: response.accessToken,
395
- idToken: response.idToken,
503
+ response = _c.sent();
504
+ authenticator = new camsSdk.CAMSMFAAuthenticator();
505
+ setIsFetchingMFAConfig(true);
506
+ _c.label = 3;
507
+ case 3:
508
+ _c.trys.push([3, 5, , 6]);
509
+ return [4 /*yield*/, authenticator.GetUserMFAConfig({
510
+ accessToken: response.accessToken,
511
+ idToken: response.idToken,
512
+ provider: "MSAL",
513
+ APIAuthEndpoint: ValidateUserEndpoint,
514
+ })];
515
+ case 4:
516
+ userConfig = _c.sent();
517
+ setIsFetchingMFAConfig(false);
518
+ camsSdk.Logger.info("CAMS MFA Authenticator initialized. MSAL User Auth is Completed...", {
519
+ userConfig: userConfig,
520
+ storageKey: storageKey,
521
+ email: userConfig.userInfo.email,
396
522
  });
397
- setAccessToken(response.accessToken);
398
- setIdToken(response.idToken);
399
- mfaConfig = {
400
- accessToken: response.accessToken,
401
- idToken: response.idToken,
402
- appCode: options.appCode,
403
- provider: "MSAL",
404
- apiEndpoint: options.MFAEndpoint,
405
- };
406
- authenticator = new camsSdk.CAMSMFAAuthenticator(mfaConfig);
407
- setMfaAuthenticator(authenticator);
408
- setRequiresMFA(true);
409
523
  // Don't persist as authenticated until MFA is complete
410
- if (typeof window !== "undefined") {
524
+ if (userConfig.isValid && userConfig.userInfo.email) {
525
+ setAccessToken(response.accessToken);
526
+ setIdToken(response.idToken);
411
527
  localStorage.setItem(storageKey, JSON.stringify({
412
- isAuthenticated: false,
413
- requiresMFA: true,
528
+ isAuthenticated: !userConfig.userInfo.isMFAEnabled,
529
+ requiresMFA: userConfig.userInfo.isMFAEnabled,
414
530
  accessToken: response.accessToken,
415
531
  idToken: response.idToken,
416
532
  }));
533
+ setEmail(userConfig.userInfo.email);
534
+ setRequiresMFA(userConfig.userInfo.isMFAEnabled);
535
+ }
536
+ else {
537
+ camsError = new camsSdk.CAMSError(camsSdk.CAMSErrorType.API_VALIDATION_ERROR, "Login failed: " + userConfig.message);
538
+ sonner.toast.error((_a = userConfig.message) !== null && _a !== void 0 ? _a : "Login failed");
539
+ camsSdk.Logger.error("Login failed: " + userConfig.message);
540
+ setError(camsError);
541
+ setIsFetchingMFAConfig(false);
542
+ }
543
+ return [3 /*break*/, 6];
544
+ case 5:
545
+ error_1 = _c.sent();
546
+ if (error_1 instanceof camsSdk.CAMSError &&
547
+ error_1.type === camsSdk.CAMSErrorType.NETWORK_ERROR) {
548
+ sonner.toast.error(error_1.message);
549
+ camsSdk.Logger.error(error_1.message);
550
+ setError(error_1);
551
+ setIsFetchingMFAConfig(false);
552
+ return [2 /*return*/];
553
+ }
554
+ return [3 /*break*/, 6];
555
+ case 6: return [3 /*break*/, 8];
556
+ case 7:
557
+ err_1 = _c.sent();
558
+ // Handle interaction_in_progress error
559
+ if (err_1.errorCode === "interaction_in_progress") {
560
+ camsSdk.Logger.warn("Interaction already in progress, please wait");
561
+ sonner.toast.error("Interaction already in progress, please wait");
562
+ return [2 /*return*/];
417
563
  }
418
- (_a = options.onAuthSuccess) === null || _a === void 0 ? void 0 : _a.call(options, response.accessToken);
419
- return [3 /*break*/, 4];
420
- case 3:
421
- err_1 = _e.sent();
422
564
  // Handle user cancellation gracefully
423
565
  if (err_1.errorCode === "user_cancelled") {
424
- camsSdk.Logger.error("User cancelled login");
566
+ camsSdk.Logger.error("User Cancelled Login Flow");
567
+ sonner.toast.error("User Cancelled Login Flow");
425
568
  setError(null); // Don't treat cancellation as an error
426
569
  return [2 /*return*/];
427
570
  }
@@ -429,23 +572,28 @@ function useCAMSMSALAuth(options) {
429
572
  if (err_1.errorCode === "popup_window_error" ||
430
573
  ((_b = err_1.message) === null || _b === void 0 ? void 0 : _b.includes("popup"))) {
431
574
  camsError_1 = new camsSdk.CAMSError(camsSdk.CAMSErrorType.POPUP_BLOCKED, "Popup blocked by browser. Please allow popups and try again.");
575
+ sonner.toast.error(camsError_1.message);
432
576
  setError(camsError_1);
433
- (_c = options.onAuthError) === null || _c === void 0 ? void 0 : _c.call(options, camsError_1);
434
577
  return [2 /*return*/];
435
578
  }
436
579
  camsError = new camsSdk.CAMSError(camsSdk.CAMSErrorType.API_VALIDATION_ERROR, "Login failed: " + err_1.message || err_1);
437
580
  setError(camsError);
438
- (_d = options.onAuthError) === null || _d === void 0 ? void 0 : _d.call(options, camsError);
439
- return [3 /*break*/, 4];
440
- case 4: return [2 /*return*/];
581
+ setIsFetchingMFAConfig(false);
582
+ return [3 /*break*/, 8];
583
+ case 8: return [2 /*return*/];
441
584
  }
442
585
  });
443
- }); }, [instance, scopes, options]);
444
- var completeMFA = React.useCallback(function (data) { return __awaiter(_this, void 0, void 0, function () {
445
- return __generator(this, function (_a) {
446
- if (!mfaAuthenticator) {
447
- throw new camsSdk.CAMSError(camsSdk.CAMSErrorType.API_VALIDATION_ERROR, "MFA Authenticator not initialized");
448
- }
586
+ }); }, [
587
+ instance,
588
+ scopes,
589
+ prompt,
590
+ appCode,
591
+ ValidateUserEndpoint,
592
+ storageKey,
593
+ inProgress,
594
+ ]);
595
+ var completeMFA = React.useCallback(function (data) { return __awaiter$1(_this, void 0, void 0, function () {
596
+ return __generator$1(this, function (_a) {
449
597
  camsSdk.Logger.info("Completed MFA.. Setting State");
450
598
  try {
451
599
  // Update storage with complete authentication BEFORE setting state
@@ -456,7 +604,11 @@ function useCAMSMSALAuth(options) {
456
604
  accessToken: accessToken,
457
605
  idToken: idToken,
458
606
  }));
459
- setCookie$1("CAMS-MSAL-AUTH-SDK-PROFILE", JSON.stringify({ type: "AUTH_SUCCESS", userProfile: __assign({}, data) }), 1);
607
+ setCookie("CAMS-MSAL-AUTH-SDK-PROFILE", JSON.stringify({
608
+ state: "AUTH_SUCCESS",
609
+ role: data.userInfo.role,
610
+ profile: __assign({}, data),
611
+ }), activeCookiePeriod);
460
612
  setRequiresMFA(false);
461
613
  // Set requiresMFA to false after storage update
462
614
  camsSdk.Logger.debug("MFA completed successfully, storage updated", {
@@ -475,38 +627,36 @@ function useCAMSMSALAuth(options) {
475
627
  }
476
628
  return [2 /*return*/];
477
629
  });
478
- }); }, [mfaAuthenticator, accessToken, idToken, storageKey]);
479
- var sendEmailOTP = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
480
- return __generator(this, function (_a) {
630
+ }); }, [accessToken, idToken, storageKey, activeCookiePeriod]);
631
+ var LoginADCredentials = React.useCallback(function (credentials, appCode, CredentialsAuthEndpoint) { return __awaiter$1(_this, void 0, void 0, function () {
632
+ var authenticator;
633
+ return __generator$1(this, function (_a) {
481
634
  switch (_a.label) {
482
635
  case 0:
483
- if (!mfaAuthenticator) {
484
- return [2 /*return*/, false];
485
- }
486
- return [4 /*yield*/, mfaAuthenticator.sendEmailOTP()];
636
+ authenticator = new camsSdk.CAMSMFAAuthenticator();
637
+ return [4 /*yield*/, authenticator.LoginADCredentials(credentials, CredentialsAuthEndpoint)];
487
638
  case 1: return [2 /*return*/, _a.sent()];
488
639
  }
489
640
  });
490
- }); }, [mfaAuthenticator]);
491
- var logout = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
641
+ }); }, []);
642
+ var logout = React.useCallback(function () { return __awaiter$1(_this, void 0, void 0, function () {
492
643
  var err_2, camsError;
493
- return __generator(this, function (_a) {
644
+ return __generator$1(this, function (_a) {
494
645
  switch (_a.label) {
495
646
  case 0:
496
647
  _a.trys.push([0, 2, , 3]);
497
648
  camsSdk.Logger.info("Logging User Out");
498
- return [4 /*yield*/, instance.logoutRedirect()];
499
- case 1:
500
- _a.sent();
501
649
  setAccessToken("");
502
650
  setIdToken("");
503
651
  setError(null);
504
- setMfaAuthenticator(null);
505
652
  setRequiresMFA(false);
506
653
  if (typeof window !== "undefined") {
507
654
  localStorage.removeItem(storageKey);
508
- // deleteCookie("CAMS-MSAL-AUTH-SDK-PROFILE");
655
+ deleteCookie(storageKey + "-PROFILE");
509
656
  }
657
+ return [4 /*yield*/, instance.logoutRedirect()];
658
+ case 1:
659
+ _a.sent();
510
660
  return [3 /*break*/, 3];
511
661
  case 2:
512
662
  err_2 = _a.sent();
@@ -524,14 +674,15 @@ function useCAMSMSALAuth(options) {
524
674
  isAuthenticated: isAuthenticated,
525
675
  isLoading: isLoading,
526
676
  error: error,
677
+ email: email,
527
678
  idToken: idToken,
528
679
  accessToken: accessToken,
529
- appCode: options.appCode,
530
- mfaAuthenticator: mfaAuthenticator,
680
+ appCode: appCode,
531
681
  requiresMFA: requiresMFA,
532
682
  completeMFA: completeMFA,
533
- sendEmailOTP: sendEmailOTP,
683
+ LoginADCredentials: LoginADCredentials,
534
684
  setRequiresMFA: setRequiresMFA,
685
+ activeCookiePeriod: activeCookiePeriod,
535
686
  };
536
687
  }
537
688
 
@@ -574,29 +725,21 @@ function arrayBufferToBase64url(buffer) {
574
725
  * @returns A promise that resolves to a JSON-serializable representation of the PublicKeyCredential.
575
726
  */
576
727
  function register(options) {
577
- return __awaiter(this, void 0, void 0, function () {
728
+ return __awaiter$1(this, void 0, void 0, function () {
578
729
  var createOptions, credential, publicKeyCredential, attestationResponse, transports, err_1;
579
730
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
580
- return __generator(this, function (_k) {
731
+ return __generator$1(this, function (_k) {
581
732
  switch (_k.label) {
582
733
  case 0:
583
734
  _k.trys.push([0, 2, , 3]);
584
735
  createOptions = __assign(__assign({}, options), { challenge: base64urlToArrayBuffer(options.challenge), user: __assign(__assign({}, options.user), { id: base64urlToArrayBuffer(options.user.id) }) });
585
- console.log("Creating credential with options:", createOptions, "...\n\n\n", options);
586
736
  return [4 /*yield*/, navigator.credentials.create({
587
- publicKey: __assign(__assign({}, options), { pubKeyCredParams: (_a = options.pubKeyCredParams) === null || _a === void 0 ? void 0 : _a.map(function (param) { return ({
737
+ publicKey: __assign(__assign({}, createOptions), { pubKeyCredParams: (_a = options.pubKeyCredParams) === null || _a === void 0 ? void 0 : _a.map(function (param) { return ({
588
738
  type: "public-key",
589
739
  alg: param.alg,
590
- }); }), attestation: (((_b = options.attestation) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || "none"), authenticatorSelection: __assign(__assign({}, options.authenticatorSelection), {
591
- // authenticatorAttachment:
592
- // (options.authenticatorSelection?.authenticatorAttachment?.toLowerCase() ||
593
- // "platform") as AuthenticatorAttachment,
594
- // requireResidentKey:
595
- // (options.authenticatorSelection?.requireResidentKey?.toLowerCase() ||
596
- // "false") === "true",
597
- residentKey: (((_d = (_c = options.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.residentKey) === null || _d === void 0 ? void 0 : _d.toLowerCase()) ||
740
+ }); }), attestation: (((_b = options.attestation) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || "none"), authenticatorSelection: __assign(__assign({}, options.authenticatorSelection), { residentKey: (((_d = (_c = options.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.residentKey) === null || _d === void 0 ? void 0 : _d.toLowerCase()) ||
598
741
  "discouraged"), userVerification: (((_f = (_e = options.authenticatorSelection) === null || _e === void 0 ? void 0 : _e.userVerification) === null || _f === void 0 ? void 0 : _f.toLowerCase()) ||
599
- "preferred") }) }),
742
+ "discouraged") }) }),
600
743
  })];
601
744
  case 1:
602
745
  credential = _k.sent();
@@ -617,12 +760,16 @@ function register(options) {
617
760
  }];
618
761
  case 2:
619
762
  err_1 = _k.sent();
763
+ console.error("Error during registration:", err_1);
620
764
  if (err_1.name === "NotAllowedError") {
621
- throw new Error("Registration cancelled by user.");
765
+ throw new Error("Face ID/Touch ID cancelled or failed. Please try again.");
622
766
  }
623
767
  if (err_1.name === "InvalidStateError") {
624
768
  throw new Error("Passkey already registered for this user.");
625
769
  }
770
+ if (err_1.name === "NotSupportedError") {
771
+ throw new Error("Passkeys not supported on this device.");
772
+ }
626
773
  throw err_1;
627
774
  case 3: return [2 /*return*/];
628
775
  }
@@ -639,10 +786,10 @@ function register(options) {
639
786
  * @returns A promise that resolves to a JSON-serializable representation of the PublicKeyCredential.
640
787
  */
641
788
  function authenticate(options) {
642
- return __awaiter(this, void 0, void 0, function () {
789
+ return __awaiter$1(this, void 0, void 0, function () {
643
790
  var getOptions, credential, publicKeyCredential, assertionResponse;
644
791
  var _a;
645
- return __generator(this, function (_b) {
792
+ return __generator$1(this, function (_b) {
646
793
  switch (_b.label) {
647
794
  case 0:
648
795
  getOptions = __assign(__assign({}, options), { challenge: base64urlToArrayBuffer(options.challenge), allowCredentials: (_a = options.allowCredentials) === null || _a === void 0 ? void 0 : _a.map(function (cred) { return (__assign(__assign({}, cred), { id: base64urlToArrayBuffer(cred.id) })); }) });
@@ -683,425 +830,6 @@ var useWebAuthn = function () {
683
830
  };
684
831
  };
685
832
 
686
- var jsxRuntime = {exports: {}};
687
-
688
- var reactJsxRuntime_production = {};
689
-
690
- /**
691
- * @license React
692
- * react-jsx-runtime.production.js
693
- *
694
- * Copyright (c) Meta Platforms, Inc. and affiliates.
695
- *
696
- * This source code is licensed under the MIT license found in the
697
- * LICENSE file in the root directory of this source tree.
698
- */
699
-
700
- var hasRequiredReactJsxRuntime_production;
701
-
702
- function requireReactJsxRuntime_production () {
703
- if (hasRequiredReactJsxRuntime_production) return reactJsxRuntime_production;
704
- hasRequiredReactJsxRuntime_production = 1;
705
- var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
706
- REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
707
- function jsxProd(type, config, maybeKey) {
708
- var key = null;
709
- void 0 !== maybeKey && (key = "" + maybeKey);
710
- void 0 !== config.key && (key = "" + config.key);
711
- if ("key" in config) {
712
- maybeKey = {};
713
- for (var propName in config)
714
- "key" !== propName && (maybeKey[propName] = config[propName]);
715
- } else maybeKey = config;
716
- config = maybeKey.ref;
717
- return {
718
- $$typeof: REACT_ELEMENT_TYPE,
719
- type: type,
720
- key: key,
721
- ref: void 0 !== config ? config : null,
722
- props: maybeKey
723
- };
724
- }
725
- reactJsxRuntime_production.Fragment = REACT_FRAGMENT_TYPE;
726
- reactJsxRuntime_production.jsx = jsxProd;
727
- reactJsxRuntime_production.jsxs = jsxProd;
728
- return reactJsxRuntime_production;
729
- }
730
-
731
- var reactJsxRuntime_development = {};
732
-
733
- /**
734
- * @license React
735
- * react-jsx-runtime.development.js
736
- *
737
- * Copyright (c) Meta Platforms, Inc. and affiliates.
738
- *
739
- * This source code is licensed under the MIT license found in the
740
- * LICENSE file in the root directory of this source tree.
741
- */
742
-
743
- var hasRequiredReactJsxRuntime_development;
744
-
745
- function requireReactJsxRuntime_development () {
746
- if (hasRequiredReactJsxRuntime_development) return reactJsxRuntime_development;
747
- hasRequiredReactJsxRuntime_development = 1;
748
- "production" !== process.env.NODE_ENV &&
749
- (function () {
750
- function getComponentNameFromType(type) {
751
- if (null == type) return null;
752
- if ("function" === typeof type)
753
- return type.$$typeof === REACT_CLIENT_REFERENCE
754
- ? null
755
- : type.displayName || type.name || null;
756
- if ("string" === typeof type) return type;
757
- switch (type) {
758
- case REACT_FRAGMENT_TYPE:
759
- return "Fragment";
760
- case REACT_PROFILER_TYPE:
761
- return "Profiler";
762
- case REACT_STRICT_MODE_TYPE:
763
- return "StrictMode";
764
- case REACT_SUSPENSE_TYPE:
765
- return "Suspense";
766
- case REACT_SUSPENSE_LIST_TYPE:
767
- return "SuspenseList";
768
- case REACT_ACTIVITY_TYPE:
769
- return "Activity";
770
- }
771
- if ("object" === typeof type)
772
- switch (
773
- ("number" === typeof type.tag &&
774
- console.error(
775
- "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
776
- ),
777
- type.$$typeof)
778
- ) {
779
- case REACT_PORTAL_TYPE:
780
- return "Portal";
781
- case REACT_CONTEXT_TYPE:
782
- return (type.displayName || "Context") + ".Provider";
783
- case REACT_CONSUMER_TYPE:
784
- return (type._context.displayName || "Context") + ".Consumer";
785
- case REACT_FORWARD_REF_TYPE:
786
- var innerType = type.render;
787
- type = type.displayName;
788
- type ||
789
- ((type = innerType.displayName || innerType.name || ""),
790
- (type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"));
791
- return type;
792
- case REACT_MEMO_TYPE:
793
- return (
794
- (innerType = type.displayName || null),
795
- null !== innerType
796
- ? innerType
797
- : getComponentNameFromType(type.type) || "Memo"
798
- );
799
- case REACT_LAZY_TYPE:
800
- innerType = type._payload;
801
- type = type._init;
802
- try {
803
- return getComponentNameFromType(type(innerType));
804
- } catch (x) {}
805
- }
806
- return null;
807
- }
808
- function testStringCoercion(value) {
809
- return "" + value;
810
- }
811
- function checkKeyStringCoercion(value) {
812
- try {
813
- testStringCoercion(value);
814
- var JSCompiler_inline_result = !1;
815
- } catch (e) {
816
- JSCompiler_inline_result = true;
817
- }
818
- if (JSCompiler_inline_result) {
819
- JSCompiler_inline_result = console;
820
- var JSCompiler_temp_const = JSCompiler_inline_result.error;
821
- var JSCompiler_inline_result$jscomp$0 =
822
- ("function" === typeof Symbol &&
823
- Symbol.toStringTag &&
824
- value[Symbol.toStringTag]) ||
825
- value.constructor.name ||
826
- "Object";
827
- JSCompiler_temp_const.call(
828
- JSCompiler_inline_result,
829
- "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
830
- JSCompiler_inline_result$jscomp$0
831
- );
832
- return testStringCoercion(value);
833
- }
834
- }
835
- function getTaskName(type) {
836
- if (type === REACT_FRAGMENT_TYPE) return "<>";
837
- if (
838
- "object" === typeof type &&
839
- null !== type &&
840
- type.$$typeof === REACT_LAZY_TYPE
841
- )
842
- return "<...>";
843
- try {
844
- var name = getComponentNameFromType(type);
845
- return name ? "<" + name + ">" : "<...>";
846
- } catch (x) {
847
- return "<...>";
848
- }
849
- }
850
- function getOwner() {
851
- var dispatcher = ReactSharedInternals.A;
852
- return null === dispatcher ? null : dispatcher.getOwner();
853
- }
854
- function UnknownOwner() {
855
- return Error("react-stack-top-frame");
856
- }
857
- function hasValidKey(config) {
858
- if (hasOwnProperty.call(config, "key")) {
859
- var getter = Object.getOwnPropertyDescriptor(config, "key").get;
860
- if (getter && getter.isReactWarning) return false;
861
- }
862
- return void 0 !== config.key;
863
- }
864
- function defineKeyPropWarningGetter(props, displayName) {
865
- function warnAboutAccessingKey() {
866
- specialPropKeyWarningShown ||
867
- ((specialPropKeyWarningShown = true),
868
- console.error(
869
- "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
870
- displayName
871
- ));
872
- }
873
- warnAboutAccessingKey.isReactWarning = true;
874
- Object.defineProperty(props, "key", {
875
- get: warnAboutAccessingKey,
876
- configurable: true
877
- });
878
- }
879
- function elementRefGetterWithDeprecationWarning() {
880
- var componentName = getComponentNameFromType(this.type);
881
- didWarnAboutElementRef[componentName] ||
882
- ((didWarnAboutElementRef[componentName] = true),
883
- console.error(
884
- "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
885
- ));
886
- componentName = this.props.ref;
887
- return void 0 !== componentName ? componentName : null;
888
- }
889
- function ReactElement(
890
- type,
891
- key,
892
- self,
893
- source,
894
- owner,
895
- props,
896
- debugStack,
897
- debugTask
898
- ) {
899
- self = props.ref;
900
- type = {
901
- $$typeof: REACT_ELEMENT_TYPE,
902
- type: type,
903
- key: key,
904
- props: props,
905
- _owner: owner
906
- };
907
- null !== (void 0 !== self ? self : null)
908
- ? Object.defineProperty(type, "ref", {
909
- enumerable: false,
910
- get: elementRefGetterWithDeprecationWarning
911
- })
912
- : Object.defineProperty(type, "ref", { enumerable: false, value: null });
913
- type._store = {};
914
- Object.defineProperty(type._store, "validated", {
915
- configurable: false,
916
- enumerable: false,
917
- writable: true,
918
- value: 0
919
- });
920
- Object.defineProperty(type, "_debugInfo", {
921
- configurable: false,
922
- enumerable: false,
923
- writable: true,
924
- value: null
925
- });
926
- Object.defineProperty(type, "_debugStack", {
927
- configurable: false,
928
- enumerable: false,
929
- writable: true,
930
- value: debugStack
931
- });
932
- Object.defineProperty(type, "_debugTask", {
933
- configurable: false,
934
- enumerable: false,
935
- writable: true,
936
- value: debugTask
937
- });
938
- Object.freeze && (Object.freeze(type.props), Object.freeze(type));
939
- return type;
940
- }
941
- function jsxDEVImpl(
942
- type,
943
- config,
944
- maybeKey,
945
- isStaticChildren,
946
- source,
947
- self,
948
- debugStack,
949
- debugTask
950
- ) {
951
- var children = config.children;
952
- if (void 0 !== children)
953
- if (isStaticChildren)
954
- if (isArrayImpl(children)) {
955
- for (
956
- isStaticChildren = 0;
957
- isStaticChildren < children.length;
958
- isStaticChildren++
959
- )
960
- validateChildKeys(children[isStaticChildren]);
961
- Object.freeze && Object.freeze(children);
962
- } else
963
- console.error(
964
- "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
965
- );
966
- else validateChildKeys(children);
967
- if (hasOwnProperty.call(config, "key")) {
968
- children = getComponentNameFromType(type);
969
- var keys = Object.keys(config).filter(function (k) {
970
- return "key" !== k;
971
- });
972
- isStaticChildren =
973
- 0 < keys.length
974
- ? "{key: someKey, " + keys.join(": ..., ") + ": ...}"
975
- : "{key: someKey}";
976
- didWarnAboutKeySpread[children + isStaticChildren] ||
977
- ((keys =
978
- 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}"),
979
- console.error(
980
- 'A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />',
981
- isStaticChildren,
982
- children,
983
- keys,
984
- children
985
- ),
986
- (didWarnAboutKeySpread[children + isStaticChildren] = true));
987
- }
988
- children = null;
989
- void 0 !== maybeKey &&
990
- (checkKeyStringCoercion(maybeKey), (children = "" + maybeKey));
991
- hasValidKey(config) &&
992
- (checkKeyStringCoercion(config.key), (children = "" + config.key));
993
- if ("key" in config) {
994
- maybeKey = {};
995
- for (var propName in config)
996
- "key" !== propName && (maybeKey[propName] = config[propName]);
997
- } else maybeKey = config;
998
- children &&
999
- defineKeyPropWarningGetter(
1000
- maybeKey,
1001
- "function" === typeof type
1002
- ? type.displayName || type.name || "Unknown"
1003
- : type
1004
- );
1005
- return ReactElement(
1006
- type,
1007
- children,
1008
- self,
1009
- source,
1010
- getOwner(),
1011
- maybeKey,
1012
- debugStack,
1013
- debugTask
1014
- );
1015
- }
1016
- function validateChildKeys(node) {
1017
- "object" === typeof node &&
1018
- null !== node &&
1019
- node.$$typeof === REACT_ELEMENT_TYPE &&
1020
- node._store &&
1021
- (node._store.validated = 1);
1022
- }
1023
- var React$1 = React,
1024
- REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"),
1025
- REACT_PORTAL_TYPE = Symbol.for("react.portal"),
1026
- REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
1027
- REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
1028
- REACT_PROFILER_TYPE = Symbol.for("react.profiler");
1029
- var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"),
1030
- REACT_CONTEXT_TYPE = Symbol.for("react.context"),
1031
- REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"),
1032
- REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"),
1033
- REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
1034
- REACT_MEMO_TYPE = Symbol.for("react.memo"),
1035
- REACT_LAZY_TYPE = Symbol.for("react.lazy"),
1036
- REACT_ACTIVITY_TYPE = Symbol.for("react.activity"),
1037
- REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"),
1038
- ReactSharedInternals =
1039
- React$1.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,
1040
- hasOwnProperty = Object.prototype.hasOwnProperty,
1041
- isArrayImpl = Array.isArray,
1042
- createTask = console.createTask
1043
- ? console.createTask
1044
- : function () {
1045
- return null;
1046
- };
1047
- React$1 = {
1048
- react_stack_bottom_frame: function (callStackForError) {
1049
- return callStackForError();
1050
- }
1051
- };
1052
- var specialPropKeyWarningShown;
1053
- var didWarnAboutElementRef = {};
1054
- var unknownOwnerDebugStack = React$1.react_stack_bottom_frame.bind(
1055
- React$1,
1056
- UnknownOwner
1057
- )();
1058
- var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
1059
- var didWarnAboutKeySpread = {};
1060
- reactJsxRuntime_development.Fragment = REACT_FRAGMENT_TYPE;
1061
- reactJsxRuntime_development.jsx = function (type, config, maybeKey, source, self) {
1062
- var trackActualOwner =
1063
- 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
1064
- return jsxDEVImpl(
1065
- type,
1066
- config,
1067
- maybeKey,
1068
- false,
1069
- source,
1070
- self,
1071
- trackActualOwner
1072
- ? Error("react-stack-top-frame")
1073
- : unknownOwnerDebugStack,
1074
- trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
1075
- );
1076
- };
1077
- reactJsxRuntime_development.jsxs = function (type, config, maybeKey, source, self) {
1078
- var trackActualOwner =
1079
- 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
1080
- return jsxDEVImpl(
1081
- type,
1082
- config,
1083
- maybeKey,
1084
- true,
1085
- source,
1086
- self,
1087
- trackActualOwner
1088
- ? Error("react-stack-top-frame")
1089
- : unknownOwnerDebugStack,
1090
- trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask
1091
- );
1092
- };
1093
- })();
1094
- return reactJsxRuntime_development;
1095
- }
1096
-
1097
- if (process.env.NODE_ENV === 'production') {
1098
- jsxRuntime.exports = requireReactJsxRuntime_production();
1099
- } else {
1100
- jsxRuntime.exports = requireReactJsxRuntime_development();
1101
- }
1102
-
1103
- var jsxRuntimeExports = jsxRuntime.exports;
1104
-
1105
833
  var CAMSContext$1 = React.createContext(null);
1106
834
  function useCAMSContext$1() {
1107
835
  var context = React.useContext(CAMSContext$1);
@@ -1115,37 +843,19 @@ function ProtectedRoute(_a) {
1115
843
  var children = _a.children, fallback = _a.fallback, redirectTo = _a.redirectTo;
1116
844
  var _b = useCAMSContext$1(), isAuthenticated = _b.isAuthenticated, isLoading = _b.isLoading;
1117
845
  if (isLoading) {
1118
- return fallback || jsxRuntimeExports.jsx("div", { children: "Loading..." });
846
+ return fallback || jsxRuntime.jsx("div", { className: 'h-screen flex items-center justify-center', children: "Loading..." });
1119
847
  }
1120
848
  if (!isAuthenticated) {
1121
849
  if (redirectTo && typeof window !== 'undefined') {
1122
850
  window.location.href = redirectTo;
1123
851
  return null;
1124
852
  }
1125
- return fallback || jsxRuntimeExports.jsx("div", { children: "Access denied. Please log in." });
853
+ return fallback || jsxRuntime.jsx("div", { children: "Access denied. Please log in." });
1126
854
  }
1127
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
855
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
1128
856
  }
1129
857
 
1130
858
  var CAMSMSALContext = React.createContext(null);
1131
- var setCookie = function (name, value, days) {
1132
- var expires = new Date(Date.now() + days * 864e5).toUTCString();
1133
- document.cookie = "".concat(name, "=").concat(encodeURIComponent(value), "; expires=").concat(expires, "; path=/; samesite=Lax");
1134
- };
1135
- var getCookie = function (name) {
1136
- var _a;
1137
- return ((_a = document.cookie
1138
- .split("; ")
1139
- .find(function (row) { return row.startsWith(name + "="); })) === null || _a === void 0 ? void 0 : _a.split("=")[1])
1140
- ? decodeURIComponent(document.cookie
1141
- .split("; ")
1142
- .find(function (row) { return row.startsWith(name + "="); })
1143
- .split("=")[1])
1144
- : null;
1145
- };
1146
- var deleteCookie = function (name) {
1147
- document.cookie = name + "=; Max-Age=-99999999; path=/";
1148
- };
1149
859
  var isTokenValid = function (token) {
1150
860
  try {
1151
861
  var payload = JSON.parse(atob(token.split(".")[1]));
@@ -1194,7 +904,7 @@ function CAMSMSALProviderInner(_a) {
1194
904
  localStorage.setItem(auth.storageKey, JSON.stringify({
1195
905
  accessToken: auth.accessToken,
1196
906
  idToken: auth.idToken,
1197
- appCode: auth.appCode
907
+ appCode: auth.appCode,
1198
908
  }));
1199
909
  }
1200
910
  }, [auth.accessToken, auth.idToken, auth.storageKey]);
@@ -1210,8 +920,8 @@ function CAMSMSALProviderInner(_a) {
1210
920
  }
1211
921
  }, [userProfile, profileStorageKey]);
1212
922
  // Enhanced logout that also clears profile
1213
- var enhancedLogout = function () { return __awaiter(_this, void 0, void 0, function () {
1214
- return __generator(this, function (_a) {
923
+ var enhancedLogout = function () { return __awaiter$1(_this, void 0, void 0, function () {
924
+ return __generator$1(this, function (_a) {
1215
925
  switch (_a.label) {
1216
926
  case 0: return [4 /*yield*/, auth.logout()];
1217
927
  case 1:
@@ -1225,12 +935,17 @@ function CAMSMSALProviderInner(_a) {
1225
935
  });
1226
936
  }); };
1227
937
  var value = React.useMemo(function () { return (__assign(__assign({}, auth), { logout: enhancedLogout, userProfile: userProfile, setUserProfile: setUserProfile })); }, [auth, userProfile]);
1228
- return (jsxRuntimeExports.jsx(CAMSMSALContext.Provider, { value: value, children: children }));
938
+ return (jsxRuntime.jsx(CAMSMSALContext.Provider, { value: value, children: children }));
1229
939
  }
1230
940
  function CAMSMSALProvider(props) {
941
+ var _a;
1231
942
  var msalConfig = props.msalConfig, msalInstance = props.msalInstance;
943
+ // Ensure crypto is available before creating MSAL instance
944
+ if (typeof window !== "undefined" && !((_a = window.crypto) === null || _a === void 0 ? void 0 : _a.subtle)) {
945
+ throw new Error("Crypto API not available. Polyfill failed to load.");
946
+ }
1232
947
  var instance = msalInstance || new msalBrowser.PublicClientApplication(msalConfig);
1233
- return (jsxRuntimeExports.jsx(msalReact.MsalProvider, { instance: instance, children: jsxRuntimeExports.jsx(CAMSMSALProviderInner, __assign({}, props)) }));
948
+ return (jsxRuntime.jsx(msalReact.MsalProvider, { instance: instance, children: jsxRuntime.jsx(CAMSMSALProviderInner, __assign({}, props)) }));
1234
949
  }
1235
950
  function useCAMSMSALContext() {
1236
951
  var context = React.useContext(CAMSMSALContext);
@@ -1247,9 +962,9 @@ var ClientOnly = function (_a) {
1247
962
  setHasMounted(true);
1248
963
  }, []);
1249
964
  if (!hasMounted) {
1250
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: fallback });
965
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
1251
966
  }
1252
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
967
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
1253
968
  };
1254
969
 
1255
970
  var CAMSContext = React.createContext(null);
@@ -1270,15 +985,15 @@ function CAMSProviderCore(props) {
1270
985
  ? __assign(__assign({}, props), { appCode: appCode })
1271
986
  : { appCode: "" });
1272
987
  var msalAuth = useCAMSMSALAuth(mode === "MSAL"
1273
- ? __assign(__assign({}, props), { appCode: appCode })
1274
- : { appCode: "" });
988
+ ? __assign(__assign({}, props), { appCode: appCode, ValidateUserEndpoint: props.ValidateUserEndpoint, activeCookiePeriod: 1 })
989
+ : { appCode: "", ValidateUserEndpoint: "" });
1275
990
  var auth = mode === "REGULAR" ? regularAuth : msalAuth;
1276
991
  var profileStorageKey = "".concat(auth.storageKey, "-PROFILE");
1277
992
  var getInitialProfile = function () {
1278
993
  if (typeof window === "undefined")
1279
994
  return null;
1280
995
  try {
1281
- var storedProfile = getCookie$1(profileStorageKey);
996
+ var storedProfile = getCookie(profileStorageKey);
1282
997
  return storedProfile ? JSON.parse(storedProfile) : null;
1283
998
  }
1284
999
  catch (_a) {
@@ -1288,7 +1003,7 @@ function CAMSProviderCore(props) {
1288
1003
  var _a = React.useState(getInitialProfile), userProfile = _a[0], setUserProfile = _a[1];
1289
1004
  React.useEffect(function () {
1290
1005
  if (typeof window !== "undefined") {
1291
- var storedProfile = getCookie$1(profileStorageKey);
1006
+ var storedProfile = getCookie(profileStorageKey);
1292
1007
  if (storedProfile) {
1293
1008
  try {
1294
1009
  setUserProfile(JSON.parse(storedProfile));
@@ -1300,47 +1015,40 @@ function CAMSProviderCore(props) {
1300
1015
  React.useEffect(function () {
1301
1016
  if (typeof window !== "undefined") {
1302
1017
  if (userProfile) {
1303
- setCookie$1(profileStorageKey, JSON.stringify(userProfile), 1);
1018
+ setCookie(profileStorageKey, JSON.stringify(userProfile), 1);
1304
1019
  }
1305
1020
  else {
1306
- deleteCookie$1(profileStorageKey);
1021
+ deleteCookie(profileStorageKey);
1307
1022
  }
1308
1023
  }
1309
1024
  }, [userProfile, profileStorageKey]);
1310
- var enhancedLogout = function () { return __awaiter(_this, void 0, void 0, function () {
1311
- return __generator(this, function (_a) {
1025
+ var enhancedLogout = function () { return __awaiter$1(_this, void 0, void 0, function () {
1026
+ return __generator$1(this, function (_a) {
1312
1027
  switch (_a.label) {
1313
1028
  case 0: return [4 /*yield*/, auth.logout()];
1314
1029
  case 1:
1315
1030
  _a.sent();
1316
1031
  setUserProfile(null);
1317
1032
  if (typeof window !== "undefined") {
1318
- deleteCookie$1(profileStorageKey);
1033
+ deleteCookie(profileStorageKey);
1319
1034
  }
1320
1035
  return [2 /*return*/];
1321
1036
  }
1322
1037
  });
1323
1038
  }); };
1324
- // Handle MFA completion for MSAL mode
1325
1039
  React.useEffect(function () {
1326
- if (mode === "MSAL" &&
1327
- "requiresMFA" in auth &&
1040
+ if ("requiresMFA" in auth &&
1328
1041
  !auth.requiresMFA &&
1329
1042
  auth.isAuthenticated) {
1330
- // MFA completed, extract profile from localStorage
1331
1043
  var storedData = localStorage.getItem(auth.storageKey);
1332
1044
  if (storedData) {
1333
1045
  try {
1334
1046
  var parsed = JSON.parse(storedData);
1335
- console.log("Parsed storage data:", parsed);
1336
1047
  if (parsed.userProfile) {
1337
- console.log("Setting user profile:", parsed.userProfile);
1338
1048
  setUserProfile(parsed.userProfile);
1339
1049
  }
1340
1050
  }
1341
- catch (e) {
1342
- console.error("Error parsing stored data:", e);
1343
- }
1051
+ catch (_a) { }
1344
1052
  }
1345
1053
  }
1346
1054
  }, [
@@ -1351,25 +1059,32 @@ function CAMSProviderCore(props) {
1351
1059
  userProfile,
1352
1060
  ]);
1353
1061
  var value = React.useMemo(function () {
1354
- return (__assign(__assign({}, auth), { logout: enhancedLogout, userProfile: userProfile, setUserProfile: setUserProfile, authMode: mode }));
1355
- }, [auth, userProfile, mode]);
1356
- return jsxRuntimeExports.jsx(CAMSContext.Provider, { value: value, children: children });
1062
+ auth.logout; var authRest = __rest(auth, ["logout"]);
1063
+ return __assign(__assign({}, authRest), { logout: enhancedLogout, user: userProfile, setUserProfile: setUserProfile, authMode: mode, onAuthSuccess: mode === "MSAL"
1064
+ ? (props).onAuthSuccess
1065
+ : undefined, onAuthError: mode === "MSAL" ? (props).onAuthError : undefined });
1066
+ }, [auth, userProfile, mode, props]);
1067
+ return jsxRuntime.jsx(CAMSContext.Provider, { value: value, children: children });
1357
1068
  }
1358
1069
  function UnifiedCAMSProvider(props) {
1070
+ var _a;
1359
1071
  // Validate appCode is a valid GUID
1360
1072
  var appCodeValidation = GuidSchema.safeParse(props.appCode);
1361
1073
  if (!appCodeValidation.success) {
1362
- throw new Error("Invalid appCode: ".concat(appCodeValidation.error.issues[0].message));
1074
+ throw new Error("Invalid CAS APP CODE: ".concat(appCodeValidation.error.issues[0].message));
1363
1075
  }
1364
1076
  if (props.mode === "MSAL") {
1365
1077
  var msalConfig = props.msalConfig, msalInstance = props.msalInstance;
1078
+ if (typeof window !== "undefined" && !((_a = window.crypto) === null || _a === void 0 ? void 0 : _a.subtle)) {
1079
+ throw new Error("Crypto API not available. Polyfill failed to load.");
1080
+ }
1366
1081
  var instance = msalInstance || new msalBrowser.PublicClientApplication(msalConfig);
1367
- return (jsxRuntimeExports.jsx(msalReact.MsalProvider, { instance: instance, children: jsxRuntimeExports.jsx(CAMSProviderCore, __assign({}, props)) }));
1082
+ return (jsxRuntime.jsx(msalReact.MsalProvider, { instance: instance, children: jsxRuntime.jsx(CAMSProviderCore, __assign({}, props)) }));
1368
1083
  }
1369
- return (jsxRuntimeExports.jsx(ClientOnly, { fallback: jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: jsxRuntimeExports.jsx(CAMSProviderCore, __assign({}, props)) }));
1084
+ return (jsxRuntime.jsx(ClientOnly, { fallback: jsxRuntime.jsx("div", { className: "h-screen flex items-center justify-center", children: "Loading..." }), children: jsxRuntime.jsx(CAMSProviderCore, __assign({}, props)) }));
1370
1085
  }
1371
1086
  // Backward compatibility exports
1372
- var CAMSProvider = function (props) { return (jsxRuntimeExports.jsx(UnifiedCAMSProvider, __assign({}, props, { mode: "REGULAR" }))); };
1087
+ var CAMSProvider = function (props) { return (jsxRuntime.jsx(UnifiedCAMSProvider, __assign({}, props, { mode: "REGULAR" }))); };
1373
1088
 
1374
1089
  /** A special constant with type `never` */
1375
1090
  function $constructor(name, initializer, params) {
@@ -1515,30 +1230,30 @@ function cn() {
1515
1230
 
1516
1231
  function InputOTP(_a) {
1517
1232
  var className = _a.className, containerClassName = _a.containerClassName, props = __rest(_a, ["className", "containerClassName"]);
1518
- return (jsxRuntimeExports.jsx(inputOtp.OTPInput, __assign({ "data-slot": "input-otp", containerClassName: cn("flex items-center gap-2 has-disabled:opacity-50", containerClassName), className: cn("disabled:cursor-not-allowed", className) }, props)));
1233
+ return (jsxRuntime.jsx(inputOtp.OTPInput, __assign({ "data-slot": "input-otp", containerClassName: cn("flex items-center gap-2 has-disabled:opacity-50", containerClassName), className: cn("disabled:cursor-not-allowed", className) }, props)));
1519
1234
  }
1520
1235
  function InputOTPGroup(_a) {
1521
1236
  var className = _a.className, props = __rest(_a, ["className"]);
1522
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "input-otp-group", className: cn("flex items-center", className) }, props)));
1237
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "input-otp-group", className: cn("flex items-center", className) }, props)));
1523
1238
  }
1524
1239
  function InputOTPSlot(_a) {
1525
1240
  var _b;
1526
1241
  var index = _a.index, className = _a.className, props = __rest(_a, ["index", "className"]);
1527
1242
  var inputOTPContext = React__namespace.useContext(inputOtp.OTPInputContext);
1528
1243
  var _c = (_b = inputOTPContext === null || inputOTPContext === void 0 ? void 0 : inputOTPContext.slots[index]) !== null && _b !== void 0 ? _b : {}, char = _c.char, hasFakeCaret = _c.hasFakeCaret, isActive = _c.isActive;
1529
- return (jsxRuntimeExports.jsxs("div", __assign({ "data-slot": "input-otp-slot", "data-active": isActive, className: cn("data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-12 w-12 items-center justify-center border-y border-r text-lg font-semibold shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]", className) }, props, { children: [char, hasFakeCaret && (jsxRuntimeExports.jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: jsxRuntimeExports.jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) }))] })));
1244
+ return (jsxRuntime.jsxs("div", __assign({ "data-slot": "input-otp-slot", "data-active": isActive, className: cn("data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-12 w-12 items-center justify-center border-y border-r text-lg font-semibold shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]", className) }, props, { children: [char, hasFakeCaret && (jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: jsxRuntime.jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) }))] })));
1530
1245
  }
1531
1246
 
1532
1247
  function Label(_a) {
1533
1248
  var className = _a.className, props = __rest(_a, ["className"]);
1534
- return (jsxRuntimeExports.jsx(LabelPrimitive__namespace.Root, __assign({ "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className) }, props)));
1249
+ return (jsxRuntime.jsx(LabelPrimitive__namespace.Root, __assign({ "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className) }, props)));
1535
1250
  }
1536
1251
 
1537
1252
  var Form = reactHookForm.FormProvider;
1538
1253
  var FormFieldContext = React__namespace.createContext({});
1539
1254
  var FormField = function (_a) {
1540
1255
  var props = __rest(_a, []);
1541
- return (jsxRuntimeExports.jsx(FormFieldContext.Provider, { value: { name: props.name }, children: jsxRuntimeExports.jsx(reactHookForm.Controller, __assign({}, props)) }));
1256
+ return (jsxRuntime.jsx(FormFieldContext.Provider, { value: { name: props.name }, children: jsxRuntime.jsx(reactHookForm.Controller, __assign({}, props)) }));
1542
1257
  };
1543
1258
  var useFormField = function () {
1544
1259
  var fieldContext = React__namespace.useContext(FormFieldContext);
@@ -1556,17 +1271,17 @@ var FormItemContext = React__namespace.createContext({});
1556
1271
  function FormItem(_a) {
1557
1272
  var className = _a.className, props = __rest(_a, ["className"]);
1558
1273
  var id = React__namespace.useId();
1559
- return (jsxRuntimeExports.jsx(FormItemContext.Provider, { value: { id: id }, children: jsxRuntimeExports.jsx("div", __assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props)) }));
1274
+ return (jsxRuntime.jsx(FormItemContext.Provider, { value: { id: id }, children: jsxRuntime.jsx("div", __assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props)) }));
1560
1275
  }
1561
1276
  function FormLabel(_a) {
1562
1277
  var className = _a.className, props = __rest(_a, ["className"]);
1563
1278
  var _b = useFormField(), error = _b.error, formItemId = _b.formItemId;
1564
- return (jsxRuntimeExports.jsx(Label, __assign({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive", className), htmlFor: formItemId }, props)));
1279
+ return (jsxRuntime.jsx(Label, __assign({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive", className), htmlFor: formItemId }, props)));
1565
1280
  }
1566
1281
  function FormControl(_a) {
1567
1282
  var props = __rest(_a, []);
1568
1283
  var _b = useFormField(), error = _b.error, formItemId = _b.formItemId, formDescriptionId = _b.formDescriptionId, formMessageId = _b.formMessageId;
1569
- return (jsxRuntimeExports.jsx(reactSlot.Slot, __assign({ "data-slot": "form-control", id: formItemId, "aria-describedby": !error
1284
+ return (jsxRuntime.jsx(reactSlot.Slot, __assign({ "data-slot": "form-control", id: formItemId, "aria-describedby": !error
1570
1285
  ? "".concat(formDescriptionId)
1571
1286
  : "".concat(formDescriptionId, " ").concat(formMessageId), "aria-invalid": !!error }, props)));
1572
1287
  }
@@ -1578,36 +1293,36 @@ function FormMessage(_a) {
1578
1293
  if (!body) {
1579
1294
  return null;
1580
1295
  }
1581
- return (jsxRuntimeExports.jsx("p", __assign({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive text-sm", className) }, props, { children: body })));
1296
+ return (jsxRuntime.jsx("p", __assign({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive text-sm", className) }, props, { children: body })));
1582
1297
  }
1583
1298
 
1584
1299
  function Card(_a) {
1585
1300
  var className = _a.className, props = __rest(_a, ["className"]);
1586
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card", className: cn("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", className) }, props)));
1301
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card", className: cn("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", className) }, props)));
1587
1302
  }
1588
1303
  function CardHeader(_a) {
1589
1304
  var className = _a.className, props = __rest(_a, ["className"]);
1590
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card-header", className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", className) }, props)));
1305
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card-header", className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", className) }, props)));
1591
1306
  }
1592
1307
  function CardTitle(_a) {
1593
1308
  var className = _a.className, props = __rest(_a, ["className"]);
1594
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card-title", className: cn("leading-none font-semibold", className) }, props)));
1309
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card-title", className: cn("leading-none font-semibold", className) }, props)));
1595
1310
  }
1596
1311
  function CardDescription(_a) {
1597
1312
  var className = _a.className, props = __rest(_a, ["className"]);
1598
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card-description", className: cn("text-muted-foreground text-sm", className) }, props)));
1313
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card-description", className: cn("text-muted-foreground text-sm", className) }, props)));
1599
1314
  }
1600
1315
  function CardAction(_a) {
1601
1316
  var className = _a.className, props = __rest(_a, ["className"]);
1602
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card-action", className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className) }, props)));
1317
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card-action", className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className) }, props)));
1603
1318
  }
1604
1319
  function CardContent(_a) {
1605
1320
  var className = _a.className, props = __rest(_a, ["className"]);
1606
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card-content", className: cn("px-6", className) }, props)));
1321
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card-content", className: cn("px-6", className) }, props)));
1607
1322
  }
1608
1323
  function CardFooter(_a) {
1609
1324
  var className = _a.className, props = __rest(_a, ["className"]);
1610
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "card-footer", className: cn("flex items-center px-6 [.border-t]:pt-6", className) }, props)));
1325
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "card-footer", className: cn("flex items-center px-6 [.border-t]:pt-6", className) }, props)));
1611
1326
  }
1612
1327
 
1613
1328
  var GenericOTPVerifier = function (_a) {
@@ -1622,18 +1337,18 @@ var GenericOTPVerifier = function (_a) {
1622
1337
  resolver: a$1(Schema),
1623
1338
  defaultValues: (_c = {}, _c[fieldName] = "", _c),
1624
1339
  });
1625
- return (jsxRuntimeExports.jsxs(Card, { className: "relative rounded space-y-4 p-0 m-0 py-8 space-x-6", children: [jsxRuntimeExports.jsxs(CardHeader, { className: "flex items-center justify-center flex-col gap-2 mt-2 text-center mb-8", children: [jsxRuntimeExports.jsx("div", { className: "w-16 h-16 bg-gradient-to-br from-lime-400 via-green-500 to-emerald-600 rounded-xl flex items-center justify-center text-white text-2xl mb-6 group-hover:scale-110 transition-transform duration-300", children: jsxRuntimeExports.jsx(lucideReact.RectangleEllipsis, {}) }), jsxRuntimeExports.jsx(CardTitle, { className: "font-bold text-emerald-700 text-2xl", children: "One-Time-Password (OTP)" }), attemptCount > 0 && (jsxRuntimeExports.jsx("div", { className: "text-sm mt-2 ".concat(isMaxAttemptsReached ? "text-red-600" : "text-orange-600"), children: isMaxAttemptsReached
1340
+ return (jsxRuntime.jsxs(Card, { className: "relative rounded space-y-4 p-0 m-0 py-8 space-x-6", children: [jsxRuntime.jsxs(CardHeader, { className: "flex items-center justify-center flex-col gap-2 mt-2 text-center mb-8", children: [jsxRuntime.jsx("div", { className: "w-16 h-16 bg-gradient-to-br from-lime-400 via-green-500 to-emerald-600 rounded-xl flex items-center justify-center text-white text-2xl mb-6 group-hover:scale-110 transition-transform duration-300", children: jsxRuntime.jsx(lucideReact.RectangleEllipsis, {}) }), jsxRuntime.jsx(CardTitle, { className: "font-bold text-emerald-700 text-2xl", children: "One-Time-Password (OTP)" }), attemptCount > 0 && (jsxRuntime.jsx("div", { className: "text-sm mt-2 ".concat(isMaxAttemptsReached ? "text-red-600" : "text-orange-600"), children: isMaxAttemptsReached
1626
1341
  ? "Maximum attempts reached. Please try again later."
1627
- : "Attempt ".concat(attemptCount, "/3 - ").concat(remainingAttempts, " attempts remaining") }))] }), jsxRuntimeExports.jsx(CardContent, { className: "space-y-6", children: jsxRuntimeExports.jsx("form", { className: "flex items-center justify-center my-4 ", children: jsxRuntimeExports.jsx(Form, __assign({}, form, { children: jsxRuntimeExports.jsx(FormField, { control: form.control, name: fieldName, render: function () { return (jsxRuntimeExports.jsxs(FormItem, { className: "flex items-center justify-center flex-col gap-y-1 space-y-4", children: [jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(InputOTP, { maxLength: 6, value: value, disabled: isMaxAttemptsReached, onChange: function (authenticationValue) {
1342
+ : "Attempt ".concat(attemptCount, "/3 - ").concat(remainingAttempts, " attempts remaining") }))] }), jsxRuntime.jsx(CardContent, { className: "space-y-6", children: jsxRuntime.jsx("form", { className: "flex items-center justify-center my-4 ", children: jsxRuntime.jsx(Form, __assign({}, form, { children: jsxRuntime.jsx(FormField, { control: form.control, name: fieldName, render: function () { return (jsxRuntime.jsxs(FormItem, { className: "flex items-center justify-center flex-col gap-y-1 space-y-4", children: [jsxRuntime.jsx(FormControl, { children: jsxRuntime.jsx(InputOTP, { maxLength: 6, value: value, disabled: isMaxAttemptsReached, onChange: function (authenticationValue) {
1628
1343
  setValue(authenticationValue);
1629
1344
  if (authenticationValue.length === 6 &&
1630
1345
  !isMaxAttemptsReached) {
1631
1346
  setLoading === null || setLoading === void 0 ? void 0 : setLoading(true);
1632
1347
  onChangeOTP(authenticationValue);
1633
1348
  }
1634
- }, pattern: inputOtp.REGEXP_ONLY_DIGITS, children: jsxRuntimeExports.jsx(InputOTPGroup, { className: "gap-3", children: __spreadArray([], Array(6), true).map(function (_, idx) { return (jsxRuntimeExports.jsx(InputOTPSlot, { className: "border border-l-2 ".concat(isMaxAttemptsReached
1349
+ }, pattern: inputOtp.REGEXP_ONLY_DIGITS, children: jsxRuntime.jsx(InputOTPGroup, { className: "gap-3", children: __spreadArray([], Array(6), true).map(function (_, idx) { return (jsxRuntime.jsx(InputOTPSlot, { className: "border border-l-2 ".concat(isMaxAttemptsReached
1635
1350
  ? "opacity-50 cursor-not-allowed"
1636
- : ""), index: idx }, idx + 1)); }) }) }) }), jsxRuntimeExports.jsx(FormMessage, {})] })); } }) })) }) })] }));
1351
+ : ""), index: idx }, idx + 1)); }) }) }) }), jsxRuntime.jsx(FormMessage, {})] })); } }) })) }) })] }));
1637
1352
  };
1638
1353
 
1639
1354
  var OTPAuthenticationImg = "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20500%20500%22%3E%3Cg%20id%3D%22freepik--Floor--inject-87%22%3E%3Cellipse%20id%3D%22freepik--floor--inject-87%22%20cx%3D%22252.61%22%20cy%3D%22347.39%22%20rx%3D%22236.94%22%20ry%3D%22140.58%22%20style%3D%22fill%3A%23f5f5f5%22%3E%3C%2Fellipse%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Shadows--inject-87%22%3E%3Cellipse%20id%3D%22freepik--Shadow--inject-87%22%20cx%3D%22435.94%22%20cy%3D%22370.25%22%20rx%3D%2241.53%22%20ry%3D%2223.98%22%20style%3D%22fill%3A%23e0e0e0%22%3E%3C%2Fellipse%3E%3Cpath%20id%3D%22freepik--shadow--inject-87%22%20d%3D%22M200.57%2C451.64%2C49.4%2C364.36c-5.74-3.32-5.74-8.74%2C0-12.06L278.92%2C219.81a9.51%2C9.51%2C0%2C0%2C1%2C8.6%2C0L447.9%2C312.4c.68.4.68%2C1%2C0%2C1.42L209.17%2C451.64A9.57%2C9.57%2C0%2C0%2C1%2C200.57%2C451.64Z%22%20style%3D%22fill%3A%23e0e0e0%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Clouds--inject-87%22%3E%3Cg%20id%3D%22freepik--clouds--inject-87%22%3E%3Cpath%20d%3D%22M103.23%2C53.2l-9.41%2C5.43c0-.42.08-.84.08-1.25V54.66c0-4.86-3.41-6.82-7.61-4.4a14.77%2C14.77%2C0%2C0%2C0-4.54%2C4.36c-.69-6.1-5.48-8.37-11.29-5-6.29%2C3.63-11.39%2C12.46-11.39%2C19.72v4.08a10.65%2C10.65%2C0%2C0%2C0%2C1%2C4.72l-7.82%2C4.52A9.32%2C9.32%2C0%2C0%2C0%2C48%2C90c0%2C2.69%2C1.89%2C3.78%2C4.22%2C2.44l51-29.46a9.32%2C9.32%2C0%2C0%2C0%2C4.22-7.31C107.45%2C52.94%2C105.56%2C51.85%2C103.23%2C53.2Z%22%20style%3D%22fill%3A%23ebebeb%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M160.23%2C63.12l-7.11%2C4.1a7.42%2C7.42%2C0%2C0%2C0%2C.06-.94v-2c0-3.67-2.57-5.15-5.74-3.32A11.14%2C11.14%2C0%2C0%2C0%2C144%2C64.2c-.52-4.6-4.13-6.32-8.52-3.79-4.74%2C2.74-8.59%2C9.41-8.59%2C14.89v3.08a8%2C8%2C0%2C0%2C0%2C.73%2C3.56l-5.9%2C3.41a7.06%2C7.06%2C0%2C0%2C0-3.19%2C5.52c0%2C2%2C1.43%2C2.85%2C3.19%2C1.84l38.5-22.23A7.07%2C7.07%2C0%2C0%2C0%2C163.41%2C65C163.41%2C62.93%2C162%2C62.11%2C160.23%2C63.12Z%22%20style%3D%22fill%3A%23ebebeb%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Plants--inject-87%22%3E%3Cg%20id%3D%22freepik--plants--inject-87%22%3E%3Cpath%20d%3D%22M66.33%2C325.21s.74-17.56-5.74-32.3-17-24.94-27.83-27.53-21.34%2C6.13-10.66%2C14.93%2C30.49%2C19.17%2C36%2C46.68Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M66.33%2C325.21s.74-17.56-5.74-32.3-17-24.94-27.83-27.53-21.34%2C6.13-10.66%2C14.93%2C30.49%2C19.17%2C36%2C46.68Z%22%20style%3D%22opacity%3A0.15%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M63.81%2C320.22h.12a.6.6%2C0%2C0%2C0%2C.44-.72C57.24%2C289.08%2C37%2C273.67%2C27.3%2C269.78a.58.58%2C0%2C0%2C0-.77.33.6.6%2C0%2C0%2C0%2C.33.77c9.51%2C3.82%2C29.34%2C18.95%2C36.35%2C48.88A.6.6%2C0%2C0%2C0%2C63.81%2C320.22Z%22%20style%3D%22fill%3A%23fff%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M46%2C352.16c1.65%2C5.32%2C5.67%2C8.22%2C11.12%2C9.28%2C3.47.67%2C9%2C0%2C12-2.17%2C4.08-3%2C5.46-5.2%2C6.31-8.15a49.38%2C49.38%2C0%2C0%2C0%2C1.77-12.06c.1-3-1.52-5.62-2.74-7.35a22.6%2C22.6%2C0%2C0%2C0-2.12-2.35c-.83-.89-1.76-1.66-2.64-2.49a9.56%2C9.56%2C0%2C0%2C1-2.8-4c-.68-2.21%2C0-4.59%2C0-6.9A10.56%2C10.56%2C0%2C0%2C0%2C58.77%2C306a48.74%2C48.74%2C0%2C0%2C0-6.91-1.22c-3.47-.32-7.21.69-10.59-.37s-6.31-2.78-9.77-3.44c-3.62-.69-7.64-.14-10.47%2C2.37a6.52%2C6.52%2C0%2C0%2C0-2.41%2C5.63c.38%2C2.32%2C2.36%2C4%2C4.24%2C5.4s3.93%2C2.92%2C4.55%2C5.18c1.24%2C4.56-4%2C9.14-2.55%2C13.64a7.38%2C7.38%2C0%2C0%2C0%2C4.1%2C4.09%2C47.72%2C47.72%2C0%2C0%2C0%2C4.65%2C1.68%2C18.69%2C18.69%2C0%2C0%2C0%2C2.31.42c2.27.26%2C4.66.78%2C6.37%2C2.43C45%2C344.36%2C44.89%2C348.59%2C46%2C352.16Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M57.31%2C325a.68.68%2C0%2C0%2C0-.17-.21c-10.25-12.92-25.5-18.47-30.59-19.31a.54.54%2C0%2C0%2C0-.61.44.54.54%2C0%2C0%2C0%2C.44.61c4.82.79%2C19%2C5.91%2C29%2C17.71a29%2C29%2C0%2C0%2C0-23%2C3.35.52.52%2C0%2C0%2C0-.12.73.53.53%2C0%2C0%2C0%2C.44.22.57.57%2C0%2C0%2C0%2C.3-.1%2C28.12%2C28.12%2C0%2C0%2C1%2C23.58-2.77c.41.13%2C1.05%2C1.4%2C1.3%2C1.75.48.68.94%2C1.37%2C1.38%2C2.06a44.7%2C44.7%2C0%2C0%2C1%2C2.4%2C4.34%2C43.78%2C43.78%2C0%2C0%2C1%2C1.95%2C4.77c.22.63%2C1%2C4.51%2C1.48%2C4.55a.63.63%2C0%2C0%2C0%2C.59-.51c.32-1.36-.77-3.53-1.22-4.8a44.12%2C44.12%2C0%2C0%2C0-2-4.77A46.14%2C46.14%2C0%2C0%2C0%2C60%2C328.85c-.42-.67-.86-1.32-1.32-2A13.72%2C13.72%2C0%2C0%2C1%2C57.31%2C325Z%22%20style%3D%22fill%3A%23fff%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Device--inject-87%22%3E%3Cg%20id%3D%22freepik--Laptop--inject-87%22%3E%3Cpath%20d%3D%22M62.88%2C357.26c0%2C3.49%2C2.6%2C7.82%2C5.82%2C9.68l126.85%2C73.25a12.88%2C12.88%2C0%2C0%2C0%2C11.66%2C0l223.37-129c3.22-1.85%2C5.83-6.19%2C5.83-9.67s-2.61-7.82-5.83-9.68L303.73%2C218.62a12.86%2C12.86%2C0%2C0%2C0-11.65%2C0L68.7%2C347.58C65.48%2C349.44%2C62.87%2C353.77%2C62.88%2C357.26Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M68.7%2C354.31l126.85%2C73.26a12.94%2C12.94%2C0%2C0%2C0%2C11.66%2C0l223.37-129c3.22-1.86%2C3.22-4.87%2C0-6.73L303.73%2C218.62a12.86%2C12.86%2C0%2C0%2C0-11.65%2C0L68.7%2C347.58C65.48%2C349.44%2C65.48%2C352.45%2C68.7%2C354.31Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M201.38%2C429v12.61a11.84%2C11.84%2C0%2C0%2C1-5.82-1.39L68.7%2C366.94c-3.22-1.86-5.83-6.19-5.83-9.68%2C0-3.27%2C2.3-7.28%2C5.24-9.3-2.61%2C1.87-2.41%2C4.62.59%2C6.35l126.86%2C73.26A11.85%2C11.85%2C0%2C0%2C0%2C201.38%2C429Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M57.41%2C347.79c-3-1.74-2.85-4.68-2.85-8.4V164.18a12.89%2C12.89%2C0%2C0%2C1%2C5.83-10.1l223.37-129c3.22-1.86%2C8.28-1.95%2C11.3-.21s2.85%2C4.69%2C2.85%2C8.4V208.53a12.9%2C12.9%2C0%2C0%2C1-5.82%2C10.09L68.7%2C347.58C65.48%2C349.44%2C60.43%2C349.54%2C57.41%2C347.79Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M297.9%2C33.31c0-3.71-2.61-5.21-5.82-3.37L68.7%2C158.92a11.85%2C11.85%2C0%2C0%2C0-4.12%2C4.35l-8.31-4.83h0a11.88%2C11.88%2C0%2C0%2C1%2C4.12-4.36l223.37-129C287%2C23.26%2C292%2C23.17%2C295%2C24.91S297.9%2C29.6%2C297.9%2C33.31Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M68%2C347.94c-3.21%2C1.5-7.79%2C1.48-10.6-.15-3-1.74-2.85-4.68-2.85-8.4V164.17a11.68%2C11.68%2C0%2C0%2C1%2C1.71-5.73l8.31%2C4.81v0A11.92%2C11.92%2C0%2C0%2C0%2C62.87%2C169V344.22C62.87%2C347.67%2C65.12%2C349.21%2C68%2C347.94Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M71.84%2C165.63%2C287.2%2C41.33c1.93-1.12%2C3.49-.21%2C3.49%2C2v158a7.71%2C7.71%2C0%2C0%2C1-3.49%2C6L71.84%2C331.66c-1.94%2C1.11-3.5.21-3.5-2V171.69A7.72%2C7.72%2C0%2C0%2C1%2C71.84%2C165.63Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M71.84%2C165.63%2C287.2%2C41.33c1.93-1.12%2C3.49-.21%2C3.49%2C2v158a7.71%2C7.71%2C0%2C0%2C1-3.49%2C6L71.84%2C331.66c-1.94%2C1.11-3.5.21-3.5-2V171.69A7.72%2C7.72%2C0%2C0%2C1%2C71.84%2C165.63Z%22%20style%3D%22opacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M84.82%2C347.93%2C292.16%2C228.22a6.44%2C6.44%2C0%2C0%2C1%2C5.83%2C0l3.45%2C1.9c1.61.93%2C1.61%2C2.43%2C0%2C3.36L94.07%2C353.17a6.42%2C6.42%2C0%2C0%2C1-5.82%2C0l-3.42-1.88C83.22%2C350.36%2C83.22%2C348.86%2C84.82%2C347.93Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M101.09%2C357.6%2C308.42%2C237.89a6%2C6%2C0%2C0%2C1%2C5.33-.29l54%2C31.16c1.33.77%2C1.1%2C2.15-.51%2C3.07L160.12%2C391.38a6%2C6%2C0%2C0%2C1-5.33.3l-54.2-31C99.26%2C359.9%2C99.48%2C358.53%2C101.09%2C357.6Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M280.75%2C288.17l6.49-3.75c.28-.16.3-.4.06-.54l-6.22-3.59a1.07%2C1.07%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.41-.06.55l6.21%2C3.58A1.06%2C1.06%2C0%2C0%2C0%2C280.75%2C288.17Zm-9.48-13L264.78%2C279c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.4.05-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C271.27%2C275.2Zm-21%2C12.11-11%2C6.34c-.28.16-.3.41-.06.55l6.22%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l11-6.34c.28-.16.3-.4.06-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C250.3%2C287.31Zm11.48-6.63-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.28-.16.3-.4.06-.55l-6.22-3.58A1%2C1%2C0%2C0%2C0%2C261.78%2C280.68Zm-25.47%2C14.7-6.49%2C3.75c-.27.16-.3.4%2C0%2C.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C236.31%2C295.38Zm-9.48%2C5.48-6.5%2C3.75c-.27.16-.3.4-.05.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C226.83%2C300.86Zm24.34%2C14.63%2C6.49-3.75c.28-.15.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.74c-.27.16-.3.41%2C0%2C.55l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C251.17%2C315.49ZM241.68%2C321l6.49-3.75c.28-.16.3-.4.06-.54L242%2C313.09a1.07%2C1.07%2C0%2C0%2C0-.94%2C0l-6.5%2C3.75c-.27.16-.3.41-.05.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C241.68%2C321Zm-9.49%2C5.48%2C6.49-3.75c.28-.16.31-.4.06-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.31.4-.06.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C232.19%2C326.45Zm-9.48%2C5.48%2C6.49-3.75c.27-.16.3-.4.05-.55L223%2C324.05a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59A1.06%2C1.06%2C0%2C0%2C0%2C222.71%2C331.93Zm48.55-38.28%2C6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-6.49%2C3.75c-.27.16-.3.4-.05.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C271.26%2C293.65ZM260.66%2C310l14.48-8.37c.27-.16.3-.4.05-.54l-15.08-8.71a1%2C1%2C0%2C0%2C0-.94%2C0l-7.49%2C4.33c-.28.16-.3.4-.06.54l8%2C4.61c.24.14.22.39-.06.55l-6%2C3.46c-.28.16-.3.4-.06.54l6.21%2C3.59A1.1%2C1.1%2C0%2C0%2C0%2C260.66%2C310Zm-43.32-3.68-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1.07%2C1.07%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.41.05-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C217.34%2C306.34Zm-9.49%2C5.48-6.49%2C3.75c-.28.15-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l6.49-3.74c.27-.16.3-.41.05-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C207.85%2C311.82Zm-52.5%2C58.48a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.74c-.27.16-.3.41-.05.55ZM132%2C355.64l-6.5%2C3.75c-.27.16-.3.4%2C0%2C.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C132%2C355.64Zm12%2C11a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.1%2C1.1%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.27.16-.3.41%2C0%2C.55Zm26.18%2C5.89%2C6.49-3.75c.27-.16.3-.4%2C0-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.74c-.28.16-.3.41-.06.55l6.21%2C3.58A1.06%2C1.06%2C0%2C0%2C0%2C170.16%2C372.51ZM159.72%2C378a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.4.06-.54L161%2C370.11a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.55Zm-18.29-27.86-6.49%2C3.75c-.27.16-.3.4-.05.55L141.1%2C358a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C141.43%2C350.16Zm47.44-27.39-6.49%2C3.75c-.27.16-.3.4%2C0%2C.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C188.87%2C322.77Zm-38%2C21.92-6.49%2C3.74c-.28.16-.3.41-.06.55l6.22%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C150.92%2C344.69Zm47.44-27.39L191.87%2C321c-.28.16-.3.41-.06.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C198.36%2C317.3Zm-19%2C10.95-6.5%2C3.75c-.27.16-.3.4%2C0%2C.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.31-.4.06-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C179.39%2C328.25Zm-9.49%2C5.48-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.74c.27-.16.3-.41.05-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C169.9%2C333.73Zm-9.49%2C5.48L153.92%2C343c-.28.16-.3.41-.06.55l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l6.49-3.75c.27-.15.3-.4.05-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C160.41%2C339.21Zm43.32%2C3.67%2C6.49-3.75c.28-.15.3-.4.06-.54L204.07%2C335a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.74c-.27.16-.3.41%2C0%2C.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C203.73%2C342.88Zm88.51-79.79-6.49%2C3.75c-.27.16-.3.4-.05.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C292.24%2C263.09Zm-11.48%2C6.63-6.49%2C3.75c-.28.16-.3.41-.06.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.4.05-.54l-6.21-3.59A1.07%2C1.07%2C0%2C0%2C0%2C280.76%2C269.72Zm21-12.1-6.49%2C3.74c-.28.16-.3.41-.06.55l6.21%2C3.58a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.4.05-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C301.73%2C257.62Zm-52.44%2C48.71%2C6.49-3.74c.28-.16.3-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59A1.06%2C1.06%2C0%2C0%2C0%2C249.29%2C306.33Zm62.87-54.22a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.15-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.74c.27-.16.3-.41.05-.55ZM213.22%2C337.4l6.49-3.74c.27-.16.3-.41%2C0-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59A1.06%2C1.06%2C0%2C0%2C0%2C213.22%2C337.4Zm116.35-67.17%2C6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-6.49%2C3.75c-.27.16-.3.4-.05.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C329.57%2C270.23Zm-18.36.35%2C6.49-3.74c.28-.16.3-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.27.16-.3.4-.05.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C311.21%2C270.58ZM321%2C257.23a1%2C1%2C0%2C0%2C0-.94%2C0L313.6%2C261c-.28.16-.3.4-.06.54l6.21%2C3.59a1.1%2C1.1%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.41.05-.55Zm2-1.16%2C15.08%2C8.71a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-15.09-8.71a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75C322.81%2C255.69%2C322.79%2C255.93%2C323%2C256.07Zm-21.91%2C12.15-6.5%2C3.74c-.27.16-.3.41-.05.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C301.12%2C268.22Zm-71.41%2C41.22-6.5%2C3.75c-.27.16-.3.41-.05.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C229.71%2C309.44Zm89.43-33.7a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.5%2C3.75c-.27.16-.3.4-.05.54ZM239.19%2C304l-6.49%2C3.74c-.27.16-.3.41%2C0%2C.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C239.19%2C304Zm-74.36%2C60.86a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.74c.27-.16.3-.41%2C0-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54Zm-11-11.56L147.31%2C357c-.28.15-.3.4-.06.54l6.22%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.74c.28-.16.3-.41.06-.55l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C153.8%2C353.27Zm21.47%2C6.05%2C6.49-3.75c.27-.16.3-.41.05-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59A1.06%2C1.06%2C0%2C0%2C0%2C175.27%2C359.32Zm9.48-5.48%2C6.49-3.75c.28-.16.31-.4.06-.54L185.09%2C346a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.31.4-.06.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C184.75%2C353.84Zm9.49-5.48%2C6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-6.49%2C3.75c-.27.16-.3.41%2C0%2C.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C194.24%2C348.36Zm-31-.57-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l6.49-3.74c.27-.16.3-.41.05-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C163.29%2C347.79Zm9.49-5.48-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.4.05-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C172.78%2C342.31Zm37.95-21.91-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1.1%2C1.1%2C0%2C0%2C0%2C1%2C0l6.49-3.75c.27-.16.3-.41%2C0-.55l-6.21-3.58A1%2C1%2C0%2C0%2C0%2C210.73%2C320.4Zm-9.49%2C5.48-6.49%2C3.75c-.28.15-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.74c.28-.16.3-.41.06-.55l-6.22-3.58A1%2C1%2C0%2C0%2C0%2C201.24%2C325.88Zm19-11-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.4.05-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C220.22%2C314.92Zm-37.95%2C21.91-6.5%2C3.75c-.27.16-.3.4-.05.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1%2C1%2C0%2C0%2C0%2C182.27%2C336.83Zm9.48-5.47-6.49%2C3.74c-.27.16-.3.41%2C0%2C.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59A1.06%2C1.06%2C0%2C0%2C0%2C191.75%2C331.36ZM179.64%2C367l6.5-3.74c.27-.16.3-.41.05-.55L180%2C359.16a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.15-.31.4-.06.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C179.64%2C367Zm-50-2.36-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0L116%2C364.87c-.28.16-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.74C129.83%2C365.06%2C129.86%2C364.81%2C129.61%2C364.67ZM142%2C367.78l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-10%2C5.77c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l10-5.77C142.2%2C368.16%2C142.22%2C367.92%2C142%2C367.78Zm-21.64-10.19L114.13%2C354a1%2C1%2C0%2C0%2C0-.94%2C0l-8%2C4.61c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l8-4.62C120.56%2C358%2C120.59%2C357.73%2C120.34%2C357.59Zm6.13-3.54a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-6.49%2C3.74c-.27.16-.3.41%2C0%2C.55Zm26.88%2C17.41-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-12.49%2C7.21c-.27.16-.3.4-.05.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0L153.29%2C372C153.57%2C371.84%2C153.59%2C371.6%2C153.35%2C371.46Zm4.38%2C7.71-6.21-3.58a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-8%2C4.61c-.27.16-.3.41-.05.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l8-4.61C158%2C379.56%2C158%2C379.32%2C157.73%2C379.17ZM197%2C313.33a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.15.3-.4.05-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.74c-.28.16-.3.41-.06.55Zm-19%2C10.95a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.55ZM136%2C348.58a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l6.49-3.74c.28-.16.3-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-1%2C0l-6.49%2C3.75c-.28.15-.3.4-.06.54Zm51.57-29.78a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0L195%2C315c.27-.16.3-.4%2C0-.54l-6.21-3.59a1.07%2C1.07%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.41-.06.55Zm-19%2C11a1%2C1%2C0%2C0%2C0%2C.94%2C0L176%2C326c.28-.16.3-.4.06-.55l-6.21-3.58a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-6.49%2C3.75c-.27.16-.3.4%2C0%2C.54Zm-6.16%2C49.8a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-10%2C5.77c-.28.16-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l10-5.76c.28-.16.3-.41.06-.55Zm-7.46-41.94a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.4%2C0-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54Zm-9.49%2C5.48a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.41.05-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0L139.29%2C339c-.28.16-.3.4-.06.54Zm192.72-65a1%2C1%2C0%2C0%2C0-.94%2C0l-16%2C9.22c-.28.16-.3.4-.06.55l6.22%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l16-9.23c.27-.16.3-.4.05-.54Zm-21%2C12.11a1%2C1%2C0%2C0%2C0-.94%2C0L309.76%2C294c-.28.16-.31.41-.06.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.31-.4.06-.54ZM189.13%2C361.56l6.49-3.75c.28-.16.3-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.5%2C3.75c-.27.16-.3.4-.05.54l6.21%2C3.59A1.07%2C1.07%2C0%2C0%2C0%2C189.13%2C361.56Zm109.08-60.42a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.41.05-.55Zm49.44-28.54a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.15-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.74c.27-.16.3-.41.05-.55Zm15.7-1.9L348.27%2C262a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.27.15-.3.4-.05.54L355.86%2C275a1.07%2C1.07%2C0%2C0%2C0%2C.94%2C0l6.49-3.75C363.57%2C271.09%2C363.59%2C270.84%2C363.35%2C270.7ZM262.76%2C321.61a1%2C1%2C0%2C0%2C0-.94%2C0l-8%2C4.61c-.28.16-.3.41-.06.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l8-4.61c.28-.16.3-.41.06-.55Zm24-13.84a1%2C1%2C0%2C0%2C0-.94%2C0l-10%2C5.77c-.28.16-.3.4-.06.54L282%2C317.7a1.1%2C1.1%2C0%2C0%2C0%2C.95%2C0l10-5.77c.28-.16.3-.4.06-.55Zm-45.94%2C26.52a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-53.43%2C30.84c-.27.16-.3.41%2C0%2C.55l6.21%2C3.58a1%2C1%2C0%2C0%2C0%2C.94%2C0l53.43-30.85c.28-.16.3-.4.06-.54Zm-56.43%2C32.58a1.07%2C1.07%2C0%2C0%2C0-.94%2C0l-8%2C4.62c-.28.16-.31.4-.06.54l6.21%2C3.59a1.07%2C1.07%2C0%2C0%2C0%2C.94%2C0l8-4.62c.28-.16.3-.4.06-.54ZM251.77%2C328a1%2C1%2C0%2C0%2C0-.94%2C0l-8%2C4.62c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l8-4.61c.27-.16.3-.4.05-.54Zm-78.4%2C45.26a1%2C1%2C0%2C0%2C0-.94%2C0l-8%2C4.61c-.28.16-.3.4-.06.54l6.21%2C3.59a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l8-4.61c.27-.16.3-.41.05-.55Zm100.37-57.94a1%2C1%2C0%2C0%2C0-.94%2C0l-8%2C4.61c-.27.16-.3.4-.05.54L271%2C324a1%2C1%2C0%2C0%2C0%2C.94%2C0l8-4.61c.28-.16.3-.41.06-.55Zm34-19.61a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54l6.21%2C3.59a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.4.05-.54ZM329%2C280.83l6.5-3.75c.27-.16.3-.4.05-.54L329.29%2C273a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C329%2C280.83Zm-38.71%2C1.86%2C6.49-3.75c.27-.15.3-.4%2C0-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.74c-.28.16-.3.41-.06.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C290.24%2C282.69Zm-25.21%2C35%2C19-11c.28-.16.3-.41.06-.55l-6.21-3.58a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-19%2C10.95c-.28.16-.3.41-.06.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C265%2C317.73Zm53.49-31.39a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l6.49-3.75c.27-.16.3-.4.05-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54Zm-7.93-5.16%2C6.5-3.74c.27-.16.3-.41.05-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.31.4-.06.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C310.59%2C281.18Zm-55%2C42%2C6.49-3.75c.27-.16.3-.4%2C0-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.41-.06.55l6.21%2C3.58A1.06%2C1.06%2C0%2C0%2C0%2C255.55%2C323.21Zm42-24.76a1.07%2C1.07%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.5%2C3.75c-.27.16-.3.4-.05.54ZM208.11%2C350.6l6.49-3.75c.27-.16.3-.4.05-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0L201%2C346.5c-.28.16-.3.4-.06.55l6.21%2C3.58A1.06%2C1.06%2C0%2C0%2C0%2C208.11%2C350.6Zm9.49-5.48%2C6.49-3.75c.27-.16.3-.4%2C0-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0L210.5%2C341c-.28.16-.3.41-.06.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C217.6%2C345.12Zm-19%2C11%2C6.49-3.75c.28-.16.3-.4.06-.55L199%2C348.2a1.06%2C1.06%2C0%2C0%2C0-1%2C0L191.52%2C352c-.27.16-.3.4-.05.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C198.62%2C356.08Zm37.95-21.91%2C6.49-3.75c.28-.16.3-.41.06-.55l-6.21-3.58a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.27.16-.3.4-.05.54l6.21%2C3.59A1.07%2C1.07%2C0%2C0%2C0%2C236.57%2C334.17Zm-9.49%2C5.47%2C6.49-3.74c.28-.16.31-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0L220%2C335.55c-.28.16-.31.4-.06.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C227.08%2C339.64Zm19-10.95%2C6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-1%2C0L239%2C324.59c-.27.16-.3.4-.05.54l6.21%2C3.59A1%2C1%2C0%2C0%2C0%2C246.06%2C328.69Zm51.77-76.21a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-1.66-1a1%2C1%2C0%2C0%2C0-.94%2C0L296.24%2C251c-.28.16-.3.41-.06.55Zm-47.15%2C29.86a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54L252%2C274.43a1.06%2C1.06%2C0%2C0%2C0-1%2C0l-6.49%2C3.75c-.27.16-.3.4-.05.55Zm19-10.95a1.06%2C1.06%2C0%2C0%2C0%2C1%2C0l6.49-3.74c.27-.16.3-.41.05-.55l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.15-.3.4-.06.54ZM239.09%2C289a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.5-3.75c.27-.16.3-.4.05-.54l-6.21-3.59a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54Zm21.07-12.17a1%2C1%2C0%2C0%2C0%2C.95%2C0l6.49-3.75c.27-.16.3-.4%2C0-.54L261.44%2C269a1%2C1%2C0%2C0%2C0-.94%2C0L254%2C272.73c-.28.16-.3.41-.06.55ZM220.11%2C300a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.74c.28-.16.3-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-1%2C0L214%2C295.86c-.28.16-.3.4-.06.54Zm9.49-5.48a1.1%2C1.1%2C0%2C0%2C0%2C1%2C0l6.49-3.75c.27-.16.3-.4.05-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.4-.06.54Zm49.26-31.07a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.55l-1.65-.95a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.75c-.27.16-.3.4-.05.54ZM307.32%2C247a1.06%2C1.06%2C0%2C0%2C0%2C.95%2C0l6.49-3.74c.27-.16.3-.41.05-.55l-1.65-1a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.31.4-.06.54Zm13.05%2C7.53a1.07%2C1.07%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.31-.41.06-.55l-6.21-3.58a1%2C1%2C0%2C0%2C0-.94%2C0l-6.5%2C3.75c-.27.16-.3.4%2C0%2C.54Zm18.07%2C20.81%2C6.49-3.75c.28-.16.31-.4.06-.54l-6.21-3.59a1.07%2C1.07%2C0%2C0%2C0-.94%2C0l-6.5%2C3.75c-.27.16-.3.41%2C0%2C.55l6.21%2C3.58A1%2C1%2C0%2C0%2C0%2C338.44%2C275.35ZM288.35%2C258a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-1.66-1a1%2C1%2C0%2C0%2C0-.94%2C0l-6.49%2C3.75c-.28.16-.3.41-.06.55Zm-77.72%2C47.5a1%2C1%2C0%2C0%2C0%2C.94%2C0l6.49-3.75c.28-.16.3-.4.06-.54l-6.21-3.59a1.06%2C1.06%2C0%2C0%2C0-.95%2C0l-6.49%2C3.74c-.27.16-.3.41-.05.55Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpolygon%20points%3D%22238.71%20354.4%20240.04%20355.17%20275.39%20375.57%20338.26%20339.27%20339.57%20338.53%20302.89%20317.35%20238.71%20354.4%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpolygon%3E%3Cpolygon%20points%3D%22240.04%20355.17%20275.39%20375.57%20338.26%20339.27%20302.89%20318.86%20240.04%20355.17%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpolygon%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Window--inject-87%22%3E%3Cg%20id%3D%22freepik--window--inject-87%22%3E%3Cg%20id%3D%22freepik--window--inject-87%22%3E%3Cpath%20d%3D%22M90.55%2C340.63a4.12%2C4.12%2C0%2C0%2C1-1.83.56%2C4.63%2C4.63%2C0%2C0%2C1-2.68-.47%2C5%2C5%2C0%2C0%2C1-2.19-4V207.37l4.38%2C2.53V339.28c0%2C1.06.53%2C1.67%2C1.29%2C1.67A2.25%2C2.25%2C0%2C0%2C0%2C90.55%2C340.63Z%22%20style%3D%22fill%3A%23f0f0f0%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M309%2C211.68a5.16%2C5.16%2C0%2C0%2C1-2.32%2C4L90.55%2C340.63c-1.28.74-2.33.14-2.33-1.35V194.74l6.42-3.7c1.28-.74%2C3.37-12%2C4.66-12.79l55.59-32.1c1.3-.74%2C4.33%2C7.6%2C5.61%2C6.86L309%2C67.13V211.68Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M307.9%2C69V211.68a4.1%2C4.1%2C0%2C0%2C1-1.79%2C3.1L90%2C339.7a1%2C1%2C0%2C0%2C1-.5.17c-.21%2C0-.21-.56-.21-.59V195.36L95.18%2C192c.93-.54%2C1.51-2.35%2C2.81-7a34.61%2C34.61%2C0%2C0%2C1%2C1.93-5.82L155%2C147.32a25.13%2C25.13%2C0%2C0%2C1%2C1.75%2C2.8c1.5%2C2.64%2C2.34%2C4%2C3.56%2C4a1.38%2C1.38%2C0%2C0%2C0%2C.71-.19L307.9%2C69M155.43%2C147.08h0M100%2C179.1h0m209-112L160.5%2C153a.34.34%2C0%2C0%2C1-.17.05c-1.31%2C0-4-7-5.26-7a.41.41%2C0%2C0%2C0-.18.05L99.3%2C178.25C98%2C179%2C95.92%2C190.3%2C94.64%2C191l-6.42%2C3.7V339.28c0%2C1.06.53%2C1.67%2C1.29%2C1.67a2.1%2C2.1%2C0%2C0%2C0%2C1-.32l216.1-124.91a5.16%2C5.16%2C0%2C0%2C0%2C2.32-4V67.13Z%22%20style%3D%22fill%3A%23e0e0e0%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M86%2C201.91A5%2C5%2C0%2C0%2C1%2C83.85%2C198V179.77a5.15%2C5.15%2C0%2C0%2C1%2C2.34-4L302.27%2C50.81a4.38%2C4.38%2C0%2C0%2C1%2C6.7%2C3.87v18.2a5.13%2C5.13%2C0%2C0%2C1-2.32%2C4L90.55%2C201.83A5%2C5%2C0%2C0%2C1%2C86%2C201.91Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M309%2C54.3c-.16-1.2-1.14-1.64-2.3-1L90.55%2C178.25A4.89%2C4.89%2C0%2C0%2C0%2C88.9%2C180l-4.37-2.53a4.78%2C4.78%2C0%2C0%2C1%2C1.65-1.74L302.28%2C50.82A4.34%2C4.34%2C0%2C0%2C1%2C309%2C54.3Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.4%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M88.9%2C180a4.73%2C4.73%2C0%2C0%2C0-.68%2C2.29V209.9l-4.38-2.53v-27.6c0-.1%2C0-.19%2C0-.28a4.71%2C4.71%2C0%2C0%2C1%2C.09-.58%2C5.15%2C5.15%2C0%2C0%2C1%2C.59-1.44Z%22%20style%3D%22opacity%3A0.1%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M309%2C54.68V67.13L160.5%2C153c-1.28.74-2.32.14-2.32-1.35V147c0-1.49-1.05-2.09-2.34-1.35L99.3%2C178.25a5.15%2C5.15%2C0%2C0%2C0-2.34%2C4V187a5.15%2C5.15%2C0%2C0%2C1-2.32%2C4l-6.42%2C3.7V182.29a5.17%2C5.17%2C0%2C0%2C1%2C2.33-4L306.65%2C53.33C307.93%2C52.59%2C309%2C53.19%2C309%2C54.68Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M298.05%2C62.49c1.62-.94%2C2.93-.18%2C2.93%2C1.69a6.47%2C6.47%2C0%2C0%2C1-2.93%2C5.08c-1.62.94-2.94.18-2.94-1.69A6.48%2C6.48%2C0%2C0%2C1%2C298.05%2C62.49Z%22%20style%3D%22fill%3A%23fff%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M287.49%2C68.58c1.62-.94%2C2.93-.18%2C2.93%2C1.69a6.49%2C6.49%2C0%2C0%2C1-2.93%2C5.08c-1.62.93-2.93.18-2.93-1.69A6.47%2C6.47%2C0%2C0%2C1%2C287.49%2C68.58Z%22%20style%3D%22fill%3A%23fff%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M276.93%2C74.66c1.62-.93%2C2.93-.17%2C2.93%2C1.7a6.49%2C6.49%2C0%2C0%2C1-2.93%2C5.08c-1.62.93-2.93.17-2.93-1.7A6.49%2C6.49%2C0%2C0%2C1%2C276.93%2C74.66Z%22%20style%3D%22fill%3A%23fff%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M309%2C67.13V82.29L88.22%2C209.9V194.74L93%2C192c1.28-.75%2C1.71-1.88%2C2.33-4L97%2C182.29c.51-2%2C1.05-3.3%2C2.34-4l55.59-32.1c1.3-.74%2C2.3-.82%2C3.29.8l2%2C3.62c.73%2C1.26%2C1.1%2C2%2C2.38%2C1.26Z%22%20style%3D%22fill%3A%23e6e6e6%22%3E%3C%2Fpath%3E%3Cpolygon%20points%3D%2288.22%20194.74%2088.22%20209.9%2083.84%20207.37%2083.84%20192.22%2088.22%20194.74%22%20style%3D%22fill%3A%23e0e0e0%22%3E%3C%2Fpolygon%3E%3Cpath%20d%3D%22M98.91%2C195.83%2C95.25%2C198l1.4-2.69a.65.65%2C0%2C0%2C0%2C0-.65c-.1-.13-.29%2C0-.41.2l-2%2C3.81v0a.58.58%2C0%2C0%2C0%2C0%2C.14.08.08%2C0%2C0%2C0%2C0%2C0%2C.75.75%2C0%2C0%2C0%2C0%2C.2.43.43%2C0%2C0%2C0%2C0%2C.17l0%2C0a.22.22%2C0%2C0%2C0%2C0%2C.08h0l2%2C1.52a.17.17%2C0%2C0%2C0%2C.19%2C0%2C.53.53%2C0%2C0%2C0%2C.22-.28c.11-.25.1-.53%2C0-.62l-1.4-1.08%2C3.66-2.11a.78.78%2C0%2C0%2C0%2C.3-.62C99.21%2C195.87%2C99.07%2C195.74%2C98.91%2C195.83Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M102%2C194.07l3.66-2.11-1.4-1.07a.61.61%2C0%2C0%2C1%2C0-.63c.11-.25.3-.37.42-.28l2%2C1.53h0a.22.22%2C0%2C0%2C1%2C0%2C.08l0%2C0a.79.79%2C0%2C0%2C1%2C0%2C.17%2C1.5%2C1.5%2C0%2C0%2C1%2C0%2C.2s0%2C0%2C0%2C0a.58.58%2C0%2C0%2C1%2C0%2C.14v0l-2%2C3.82a.62.62%2C0%2C0%2C1-.2.22.16.16%2C0%2C0%2C1-.22%2C0%2C.69.69%2C0%2C0%2C1%2C0-.65l1.4-2.69L102%2C195c-.17.09-.3%2C0-.3-.29A.75.75%2C0%2C0%2C1%2C102%2C194.07Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M114%2C183.53c0-.22-.22-.19-.31.05l-.51%2C1.23c-.85-.1-1.89.74-2.58%2C2.22-.91%2C1.92-.91%2C4.19%2C0%2C5.06a1.3%2C1.3%2C0%2C0%2C0%2C1.64.1%2C4.54%2C4.54%2C0%2C0%2C0%2C1.64-2%2C.6.6%2C0%2C0%2C0%2C0-.64c-.11-.11-.3%2C0-.41.24-.68%2C1.43-1.78%2C2.07-2.46%2C1.42s-.67-2.35%2C0-3.78c.48-1%2C1.18-1.62%2C1.78-1.66l-.38.92c-.1.24%2C0%2C.47.15.37l1.49-1a.52.52%2C0%2C0%2C0%2C.17-.41Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M153.29%2C153.07l1.33-2.82a.85.85%2C0%2C0%2C0%2C0-.88c-.15-.16-.41%2C0-.57.33l-1.33%2C2.82-1.33-1.28c-.16-.16-.42%2C0-.58.33a.88.88%2C0%2C0%2C0%2C0%2C.87l1.34%2C1.29-1.34%2C2.82a.9.9%2C0%2C0%2C0%2C0%2C.88.23.23%2C0%2C0%2C0%2C.29%2C0%2C.81.81%2C0%2C0%2C0%2C.29-.35l1.33-2.82%2C1.33%2C1.28a.22.22%2C0%2C0%2C0%2C.29%2C0%2C.8.8%2C0%2C0%2C0%2C.28-.35.85.85%2C0%2C0%2C0%2C0-.88Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M118.82%2C187v-4.72a5.18%2C5.18%2C0%2C0%2C1%2C2.33-4L293.53%2C78.63c1.29-.74%2C2.33-.14%2C2.33%2C1.35v4.71a5.14%2C5.14%2C0%2C0%2C1-2.33%2C4L121.15%2C188.35C119.87%2C189.09%2C118.82%2C188.49%2C118.82%2C187Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M290.36%2C89.09a.46.46%2C0%2C0%2C1-.21%2C0%2C.62.62%2C0%2C0%2C1-.35-.7l.23-1.92-.9-.64a.69.69%2C0%2C0%2C1-.25-.52%2C1.06%2C1.06%2C0%2C0%2C1%2C.39-.82l1.37-1a.32.32%2C0%2C0%2C0%2C.06-.11l.61-2a.86.86%2C0%2C0%2C1%2C.69-.65.56.56%2C0%2C0%2C1%2C.54.32h0l.51%2C1.1%2C1.16-.45a.54.54%2C0%2C0%2C1%2C.61.14.84.84%2C0%2C0%2C1%2C0%2C1l-1%2C1.86a.36.36%2C0%2C0%2C0%2C0%2C.11l.23%2C1.68a1%2C1%2C0%2C0%2C1-.29.84.64.64%2C0%2C0%2C1-.54.21l-1.12-.14-1.21%2C1.54A.69.69%2C0%2C0%2C1%2C290.36%2C89.09Zm-.66-3.89.89.65a.63.63%2C0%2C0%2C1%2C.24.64l-.15%2C1.27.81-1a.7.7%2C0%2C0%2C1%2C.62-.29l1.11.14a.27.27%2C0%2C0%2C0%2C0-.13L293%2C84.77a1%2C1%2C0%2C0%2C1%2C.12-.6l.87-1.63-.89.34a.55.55%2C0%2C0%2C1-.71-.28l-.41-.86-.54%2C1.78a1%2C1%2C0%2C0%2C1-.34.51l-1.37%2C1.06A.29.29%2C0%2C0%2C0%2C289.7%2C85.2Zm2.31%2C2Zm-1.89-.74Zm1.69-5.2Z%22%20style%3D%22fill%3A%23e0e0e0%22%3E%3C%2Fpath%3E%3Cg%20style%3D%22opacity%3A0.5%22%3E%3Cpath%20d%3D%22M298.61%2C78.06a.81.81%2C0%2C0%2C1-.7-.41.8.8%2C0%2C0%2C1%2C.29-1.1l6.56-3.78a.8.8%2C0%2C1%2C1%2C.81%2C1.39L299%2C78A.86.86%2C0%2C0%2C1%2C298.61%2C78.06Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M298.61%2C81.85a.81.81%2C0%2C0%2C1-.7-.41.8.8%2C0%2C0%2C1%2C.29-1.1l6.56-3.79a.81.81%2C0%2C0%2C1%2C.81%2C1.4L299%2C81.74A.86.86%2C0%2C0%2C1%2C298.61%2C81.85Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M298.61%2C85.63a.8.8%2C0%2C0%2C1-.41-1.5l6.56-3.79a.81.81%2C0%2C0%2C1%2C.81%2C1.4L299%2C85.53A.85.85%2C0%2C0%2C1%2C298.61%2C85.63Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Shield--inject-87%22%3E%3Cg%20id%3D%22freepik--shield--inject-87%22%3E%3Cpath%20d%3D%22M208.38%2C156.24c-4.59%2C4.12-8.55%2C3.9-11%2C2-2.48%2C4.76-6.44%2C9.55-11%2C10.73L183.72%2C176s1.4%2C1.62%2C1.4%2C5.48a19.26%2C19.26%2C0%2C0%2C1-.64%2C4.8%2C25.41%2C25.41%2C0%2C0%2C0-1.1%2C7.18%2C12.54%2C12.54%2C0%2C0%2C0%2C1.43%2C6.39%2C7.74%2C7.74%2C0%2C0%2C0%2C2.87%2C2.87l-4-2.29a8%2C8%2C0%2C0%2C1-3-3%2C12.54%2C12.54%2C0%2C0%2C1-1.43-6.39%2C25.35%2C25.35%2C0%2C0%2C1%2C1.1-7.18%2C19.32%2C19.32%2C0%2C0%2C0%2C.65-4.8c0-3.87-1.41-5.49-1.41-5.49l2.62-7.07c4.58-1.17%2C8.54-6%2C11-10.73%2C2.47%2C1.91%2C6.43%2C2.13%2C11-2Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M194.68%2C156.69l-1.45-.84A6.31%2C6.31%2C0%2C0%2C0%2C194.68%2C156.69Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.8%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M204.25%2C153.86c-3.77%2C3.39-7.12%2C3.84-9.57%2C2.83l2.68%2C1.55c2.47%2C1.9%2C6.43%2C2.12%2C11-2Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.85%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M193.23%2C155.85c-2.48%2C4.77-6.44%2C9.56-11%2C10.73l4.13%2C2.39c4.58-1.18%2C8.54-6%2C11-10.73Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.65%22%3E%3C%2Fpath%3E%3Cpolygon%20points%3D%22182.21%20166.58%20179.59%20173.65%20183.72%20176.04%20186.34%20168.97%20182.21%20166.58%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.55%22%3E%3C%2Fpolygon%3E%3Cpath%20d%3D%22M184.81%2C199.89a12.54%2C12.54%2C0%2C0%2C1-1.43-6.39%2C25.41%2C25.41%2C0%2C0%2C1%2C1.1-7.18%2C19.26%2C19.26%2C0%2C0%2C0%2C.64-4.8c0-3.86-1.4-5.48-1.4-5.48l-4.13-2.39s1.41%2C1.62%2C1.41%2C5.49a19.32%2C19.32%2C0%2C0%2C1-.65%2C4.8%2C25.35%2C25.35%2C0%2C0%2C0-1.1%2C7.18%2C12.54%2C12.54%2C0%2C0%2C0%2C1.43%2C6.39%2C8%2C8%2C0%2C0%2C0%2C3%2C3l4%2C2.29A7.74%2C7.74%2C0%2C0%2C1%2C184.81%2C199.89Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.4%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M184.81%2C199.89a12.54%2C12.54%2C0%2C0%2C1-1.43-6.39%2C25.41%2C25.41%2C0%2C0%2C1%2C1.1-7.18%2C19.26%2C19.26%2C0%2C0%2C0%2C.64-4.8c0-3.86-1.4-5.48-1.4-5.48l-4.13-2.39s1.41%2C1.62%2C1.41%2C5.49a19.32%2C19.32%2C0%2C0%2C1-.65%2C4.8%2C25.35%2C25.35%2C0%2C0%2C0-1.1%2C7.18%2C12.54%2C12.54%2C0%2C0%2C0%2C1.43%2C6.39%2C8%2C8%2C0%2C0%2C0%2C3%2C3l4%2C2.29A7.74%2C7.74%2C0%2C0%2C1%2C184.81%2C199.89Z%22%20style%3D%22opacity%3A0.05%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M197.36%2C204.74c-6.85.07-10.77-1.74-12.55-4.85a12.54%2C12.54%2C0%2C0%2C1-1.43-6.39%2C25.41%2C25.41%2C0%2C0%2C1%2C1.1-7.18%2C19.24%2C19.24%2C0%2C0%2C0%2C.65-4.79c0-3.87-1.41-5.49-1.41-5.49l2.62-7.07c4.58-1.18%2C8.54-6%2C11-10.73%2C2.47%2C1.91%2C6.43%2C2.12%2C11-2l2.62%2C4a19.87%2C19.87%2C0%2C0%2C0-1.41%2C7.11%2C11.69%2C11.69%2C0%2C0%2C0%2C.65%2C4%2C14%2C14%2C0%2C0%2C1%2C1.09%2C5.92%2C23.71%2C23.71%2C0%2C0%2C1-1.42%2C8C208.13%2C190.57%2C204.21%2C196.9%2C197.36%2C204.74Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M197.36%2C204.74c-6.85.07-10.77-1.74-12.55-4.85a12.54%2C12.54%2C0%2C0%2C1-1.43-6.39%2C25.41%2C25.41%2C0%2C0%2C1%2C1.1-7.18%2C19.24%2C19.24%2C0%2C0%2C0%2C.65-4.79c0-3.87-1.41-5.49-1.41-5.49l2.62-7.07c4.58-1.18%2C8.54-6%2C11-10.73%2C2.47%2C1.91%2C6.43%2C2.12%2C11-2l2.62%2C4a19.87%2C19.87%2C0%2C0%2C0-1.41%2C7.11%2C11.69%2C11.69%2C0%2C0%2C0%2C.65%2C4%2C14%2C14%2C0%2C0%2C1%2C1.09%2C5.92%2C23.71%2C23.71%2C0%2C0%2C1-1.42%2C8C208.13%2C190.57%2C204.21%2C196.9%2C197.36%2C204.74Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.75%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M196.55%2C203c-5.31-.07-8.74-1.39-10.2-4a10.7%2C10.7%2C0%2C0%2C1-1.19-5.51%2C21.92%2C21.92%2C0%2C0%2C1%2C.88-6.1c.05-.22.11-.43.16-.65a20.6%2C20.6%2C0%2C0%2C0%2C.7-5.22%2C12.12%2C12.12%2C0%2C0%2C0-1.21-5.69l2-5.43c4.91-1.7%2C8.46-6.55%2C10.34-9.73a8%2C8%2C0%2C0%2C0%2C3.2.65%2C11.47%2C11.47%2C0%2C0%2C0%2C6.72-2.46l1%2C1.64a22%2C22%2C0%2C0%2C0-1.2%2C6.89%2C13.41%2C13.41%2C0%2C0%2C0%2C.75%2C4.64c.06.15.12.31.17.47a11.72%2C11.72%2C0%2C0%2C1%2C.82%2C4.86%2C22%2C22%2C0%2C0%2C1-1.32%2C7.45C206.48%2C189.91%2C202.55%2C196%2C196.55%2C203Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M196.55%2C203c-5.31-.07-8.74-1.39-10.2-4a10.7%2C10.7%2C0%2C0%2C1-1.19-5.51%2C21.92%2C21.92%2C0%2C0%2C1%2C.88-6.1c.05-.22.11-.43.16-.65a20.6%2C20.6%2C0%2C0%2C0%2C.7-5.22%2C12.12%2C12.12%2C0%2C0%2C0-1.21-5.69l2-5.43c4.91-1.7%2C8.46-6.55%2C10.34-9.73a8%2C8%2C0%2C0%2C0%2C3.2.65%2C11.47%2C11.47%2C0%2C0%2C0%2C6.72-2.46l1%2C1.64a22%2C22%2C0%2C0%2C0-1.2%2C6.89%2C13.41%2C13.41%2C0%2C0%2C0%2C.75%2C4.64c.06.15.12.31.17.47a11.72%2C11.72%2C0%2C0%2C1%2C.82%2C4.86%2C22%2C22%2C0%2C0%2C1-1.32%2C7.45C206.48%2C189.91%2C202.55%2C196%2C196.55%2C203Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.4%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M196.55%2C203c-5.31-.07-8.74-1.39-10.2-4a10.7%2C10.7%2C0%2C0%2C1-1.19-5.51%2C21.92%2C21.92%2C0%2C0%2C1%2C.88-6.1c.05-.22.11-.43.16-.65a20.6%2C20.6%2C0%2C0%2C0%2C.7-5.22%2C12.12%2C12.12%2C0%2C0%2C0-1.21-5.69l2-5.43c4.91-1.7%2C8.46-6.55%2C10.34-9.73a8%2C8%2C0%2C0%2C0%2C3.2.65%2C11.47%2C11.47%2C0%2C0%2C0%2C6.72-2.46l1%2C1.64a22%2C22%2C0%2C0%2C0-1.2%2C6.89%2C13.41%2C13.41%2C0%2C0%2C0%2C.75%2C4.64c.06.15.12.31.17.47a11.72%2C11.72%2C0%2C0%2C1%2C.82%2C4.86%2C22%2C22%2C0%2C0%2C1-1.32%2C7.45C206.48%2C189.91%2C202.55%2C196%2C196.55%2C203Z%22%20style%3D%22opacity%3A0.15%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M187.57%2C200.48c1.81%2C1.59%2C4.81%2C2.43%2C9%2C2.48l-2.66-1.52A19.35%2C19.35%2C0%2C0%2C1%2C187.57%2C200.48Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.8%22%3E%3C%2Fpath%3E%3Cpolygon%20points%3D%22207.63%20159.71%20209.01%20160.5%20207.96%20158.87%20207.36%20159.29%20207.63%20159.71%22%20style%3D%22opacity%3A0.15%22%3E%3C%2Fpolygon%3E%3Cpath%20d%3D%22M207.18%2C171.24a13.41%2C13.41%2C0%2C0%2C1-.75-4.64%2C21.74%2C21.74%2C0%2C0%2C1%2C1.2-6.89l-.27-.42a11.12%2C11.12%2C0%2C0%2C1-6.12%2C2%2C8%2C8%2C0%2C0%2C1-3.2-.65c-1.88%2C3.18-5.43%2C8-10.34%2C9.73l-2%2C5.43a12.12%2C12.12%2C0%2C0%2C1%2C1.21%2C5.69%2C20.6%2C20.6%2C0%2C0%2C1-.7%2C5.22c0%2C.22-.11.43-.16.65a21.92%2C21.92%2C0%2C0%2C0-.88%2C6.1%2C10.7%2C10.7%2C0%2C0%2C0%2C1.19%2C5.51%2C6.05%2C6.05%2C0%2C0%2C0%2C1.73%2C1.88%2C17.87%2C17.87%2C0%2C0%2C0%2C7.08%2C1.27c6-6.95%2C9.93-13%2C11.68-18.14a22%2C22%2C0%2C0%2C0%2C1.33-7.45%2C11.89%2C11.89%2C0%2C0%2C0-.82-4.86C207.29%2C171.55%2C207.23%2C171.39%2C207.18%2C171.24Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M187.7%2C170.41l-2%2C5.43a12.12%2C12.12%2C0%2C0%2C1%2C1.21%2C5.69%2C20.6%2C20.6%2C0%2C0%2C1-.7%2C5.22c0%2C.22-.11.43-.16.65a21.92%2C21.92%2C0%2C0%2C0-.88%2C6.1%2C10.7%2C10.7%2C0%2C0%2C0%2C1.19%2C5.51%2C6.05%2C6.05%2C0%2C0%2C0%2C1.73%2C1.88%2C17.87%2C17.87%2C0%2C0%2C0%2C7.08%2C1.27v-20l2.88-.87V160.68a32.06%2C32.06%2C0%2C0%2C1-2.88%2C4.11A17.6%2C17.6%2C0%2C0%2C1%2C187.7%2C170.41Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20id%3D%22freepik--shadow--inject-87%22%20d%3D%22M202.1%2C174.77a.91.91%2C0%2C0%2C0-.11-.16l0%2C0a1.18%2C1.18%2C0%2C0%2C0-.29-.23l-1-.56a2.25%2C2.25%2C0%2C0%2C0-.55-.21l-.35-.05v-2.85a3.4%2C3.4%2C0%2C0%2C0-1.48-3.1%2C3%2C3%2C0%2C0%2C0-3.13.2%2C8.22%2C8.22%2C0%2C0%2C0-3.66%2C6.59v3.36l-1.92%2C1.1-.16.11-.05%2C0h0a.71.71%2C0%2C0%2C0-.27.53v11.52a.77.77%2C0%2C0%2C0%2C0%2C.15.89.89%2C0%2C0%2C0%2C.37.47l.1.07.47.27.5.28a1.78%2C1.78%2C0%2C0%2C0%2C.61.22%2C2.59%2C2.59%2C0%2C0%2C0%2C1.75-.22l8.73-5a.84.84%2C0%2C0%2C0%2C.49-.68V175A.68.68%2C0%2C0%2C0%2C202.1%2C174.77Zm-8.68-.39a6.37%2C6.37%2C0%2C0%2C1%2C2.72-5%2C1.33%2C1.33%2C0%2C0%2C1%2C1.24-.2%2C1.67%2C1.67%2C0%2C0%2C1%2C.54%2C1.47v3.36l-2.48%2C1.43-2%2C1.17Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--Padlock--inject-87%22%3E%3Cpath%20d%3D%22M203.18%2C175.55a.82.82%2C0%2C0%2C0-.49-.68l-1-.56a2.65%2C2.65%2C0%2C0%2C0-2.36%2C0l-8.73%2C5a.83.83%2C0%2C0%2C0-.49.68h0v11.53h0a.82.82%2C0%2C0%2C0%2C.49.68l1%2C.56a2.61%2C2.61%2C0%2C0%2C0%2C2.37%2C0l8.72-5a.82.82%2C0%2C0%2C0%2C.49-.68h0V175.55Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M191.6%2C181.27l-1-.55a.73.73%2C0%2C0%2C1%2C0-1.37l8.73-5a2.65%2C2.65%2C0%2C0%2C1%2C2.36%2C0l1%2C.56a.71.71%2C0%2C0%2C1%2C0%2C1.36l-8.72%2C5A2.61%2C2.61%2C0%2C0%2C1%2C191.6%2C181.27Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.4%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M192.79%2C181.55v11.53a2.43%2C2.43%2C0%2C0%2C1-1.19-.28l-1-.56a.81.81%2C0%2C0%2C1-.49-.68V180a.83.83%2C0%2C0%2C0%2C.49.69l1%2C.55A2.43%2C2.43%2C0%2C0%2C0%2C192.79%2C181.55Z%22%20style%3D%22opacity%3A0.1%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M199.14%2C187.26l-2.09%2C1.2.32-3.77a1%2C1%2C0%2C0%2C1-.4-.92%2C2.71%2C2.71%2C0%2C0%2C1%2C1.12-2.16c.63-.35%2C1.13%2C0%2C1.13.86a2.83%2C2.83%2C0%2C0%2C1-.41%2C1.39Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpolygon%20points%3D%22199.14%20187.26%20197.25%20186.17%20197.05%20188.46%20199.14%20187.26%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpolygon%3E%3Cpath%20d%3D%22M198.09%2C181.61a2.52%2C2.52%2C0%2C0%2C0-1%2C1.28l1.68%2C1h0a2.83%2C2.83%2C0%2C0%2C0%2C.41-1.39C199.22%2C181.64%2C198.72%2C181.26%2C198.09%2C181.61Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M200.82%2C175.81h0V171.2a3.38%2C3.38%2C0%2C0%2C0-1.48-3.1%2C3%2C3%2C0%2C0%2C0-3.12.19%2C8.22%2C8.22%2C0%2C0%2C0-3.67%2C6.59v4.64h0a.47.47%2C0%2C0%2C0%2C.28.38%2C1.48%2C1.48%2C0%2C0%2C0%2C1.33%2C0%2C.45.45%2C0%2C0%2C0%2C.28-.38h0v-4.64a6.37%2C6.37%2C0%2C0%2C1%2C2.72-4.95%2C1.33%2C1.33%2C0%2C0%2C1%2C1.24-.2%2C1.66%2C1.66%2C0%2C0%2C1%2C.54%2C1.47v4.61h0a.45.45%2C0%2C0%2C0%2C.28.38%2C1.48%2C1.48%2C0%2C0%2C0%2C1.33%2C0%2C.45.45%2C0%2C0%2C0%2C.27-.38Z%22%20style%3D%22fill%3A%23e0e0e0%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cpath%20d%3D%22M129.34%2C253c.13-.07.23-.08.3%2C0a.69.69%2C0%2C0%2C1%2C.14.25l2.12%2C8.23a.58.58%2C0%2C0%2C1%2C0%2C.2.66.66%2C0%2C0%2C1-.06.27.35.35%2C0%2C0%2C1-.15.18l-1.23.71c-.13.08-.22.09-.28%2C0a.32.32%2C0%2C0%2C1-.1-.18l-.27-1.09L127.26%2C263l-.28%2C1.41a.81.81%2C0%2C0%2C1-.1.3.6.6%2C0%2C0%2C1-.28.29l-1.22.71a.13.13%2C0%2C0%2C1-.16%2C0%2C.28.28%2C0%2C0%2C1-.06-.2%2C1%2C1%2C0%2C0%2C1%2C0-.24l2.12-10.68a2.07%2C2.07%2C0%2C0%2C1%2C.15-.41.69.69%2C0%2C0%2C1%2C.29-.34Zm-1.58%2C7.47%2C1.58-.91-.79-3.15Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M133%2C254a.8.8%2C0%2C0%2C1%2C.08-.33.5.5%2C0%2C0%2C1%2C.19-.23l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v3.79a1.81%2C1.81%2C0%2C0%2C0%2C.18.93c.13.19.33.2.62%2C0a1.37%2C1.37%2C0%2C0%2C0%2C.61-.74%2C3.33%2C3.33%2C0%2C0%2C0%2C.18-1.14V252a.78.78%2C0%2C0%2C1%2C.07-.33.57.57%2C0%2C0%2C1%2C.19-.23l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v7a.8.8%2C0%2C0%2C1-.08.33.46.46%2C0%2C0%2C1-.18.22l-1.13.65a.14.14%2C0%2C0%2C1-.19%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-.34a3.15%2C3.15%2C0%2C0%2C1-.19.43%2C2.27%2C2.27%2C0%2C0%2C1-.27.44%2C3.16%2C3.16%2C0%2C0%2C1-.39.44%2C2.69%2C2.69%2C0%2C0%2C1-.52.38c-.63.36-1.13.38-1.5%2C0a3.12%2C3.12%2C0%2C0%2C1-.57-2.27Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M142%2C253.1a.85.85%2C0%2C0%2C0%2C.09.47c.07.09.18.09.33%2C0l.77-.45a.14.14%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v1.51a.8.8%2C0%2C0%2C1-.08.33.45.45%2C0%2C0%2C1-.19.23l-.92.53a1.81%2C1.81%2C0%2C0%2C1-.83.28.89.89%2C0%2C0%2C1-.64-.21%2C1.53%2C1.53%2C0%2C0%2C1-.41-.7%2C3.73%2C3.73%2C0%2C0%2C1-.15-1.15v-2.52l-.72.42a.14.14%2C0%2C0%2C1-.18%2C0%2C.29.29%2C0%2C0%2C1-.08-.24v-1.51a.67.67%2C0%2C0%2C1%2C.08-.33.49.49%2C0%2C0%2C1%2C.18-.23l.72-.41v-2.45a.8.8%2C0%2C0%2C1%2C.08-.33.45.45%2C0%2C0%2C1%2C.19-.23l1.22-.71a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v2.44l1.1-.63a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v1.51a.73.73%2C0%2C0%2C1-.08.33.44.44%2C0%2C0%2C1-.18.23l-1.1.64Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M150%2C251.14a.8.8%2C0%2C0%2C1-.08.33.47.47%2C0%2C0%2C1-.19.22l-1.22.71c-.08%2C0-.14%2C0-.19%2C0a.33.33%2C0%2C0%2C1-.08-.24v-3.8a1.59%2C1.59%2C0%2C0%2C0-.2-.91c-.14-.18-.35-.19-.65%2C0a1.44%2C1.44%2C0%2C0%2C0-.63.76%2C3%2C3%2C0%2C0%2C0-.2%2C1.15v3.79a.8.8%2C0%2C0%2C1-.08.33.5.5%2C0%2C0%2C1-.19.23l-1.22.71a.16.16%2C0%2C0%2C1-.19%2C0%2C.36.36%2C0%2C0%2C1-.08-.24V244.3a.76.76%2C0%2C0%2C1%2C.08-.33.41.41%2C0%2C0%2C1%2C.19-.23l1.22-.71a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v3.2a4.51%2C4.51%2C0%2C0%2C1%2C.51-.91%2C2.76%2C2.76%2C0%2C0%2C1%2C.81-.76%2C1.91%2C1.91%2C0%2C0%2C1%2C.86-.29.87.87%2C0%2C0%2C1%2C.67.24%2C1.71%2C1.71%2C0%2C0%2C1%2C.43.81A5.62%2C5.62%2C0%2C0%2C1%2C150%2C247Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M153.07%2C246.71a1.23%2C1.23%2C0%2C0%2C0%2C.09.53.43.43%2C0%2C0%2C0%2C.21.23.38.38%2C0%2C0%2C0%2C.28%2C0%2C1.88%2C1.88%2C0%2C0%2C0%2C.3-.12%2C2%2C2%2C0%2C0%2C0%2C.46-.36%2C2%2C2%2C0%2C0%2C0%2C.29-.42%2C1.37%2C1.37%2C0%2C0%2C1%2C.16-.26.46.46%2C0%2C0%2C1%2C.16-.14l1.27-.73q.21-.12.21.21a2.26%2C2.26%2C0%2C0%2C1-.14.63%2C5.76%2C5.76%2C0%2C0%2C1-.46%2C1%2C6.85%2C6.85%2C0%2C0%2C1-.79%2C1.13%2C4.5%2C4.5%2C0%2C0%2C1-1.16%2C1%2C2.26%2C2.26%2C0%2C0%2C1-1.12.37%2C1.09%2C1.09%2C0%2C0%2C1-.83-.32%2C2%2C2%2C0%2C0%2C1-.51-1%2C6.65%2C6.65%2C0%2C0%2C1-.17-1.6%2C8.85%2C8.85%2C0%2C0%2C1%2C.17-1.71%2C6.57%2C6.57%2C0%2C0%2C1%2C.51-1.57%2C5.63%2C5.63%2C0%2C0%2C1%2C.83-1.33%2C4.26%2C4.26%2C0%2C0%2C1%2C1.12-1%2C2%2C2%2C0%2C0%2C1%2C1.21-.33%2C1.23%2C1.23%2C0%2C0%2C1%2C.82.48%2C2.54%2C2.54%2C0%2C0%2C1%2C.46%2C1.05%2C6.6%2C6.6%2C0%2C0%2C1%2C.14%2C1.36v.42a.67.67%2C0%2C0%2C1-.08.33.49.49%2C0%2C0%2C1-.18.23Zm.88-3.38a1.46%2C1.46%2C0%2C0%2C0-.62.73%2C3%2C3%2C0%2C0%2C0-.26%2C1l1.76-1a1.2%2C1.2%2C0%2C0%2C0-.26-.7C154.43%2C243.18%2C154.22%2C243.17%2C154%2C243.33Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M163.15%2C243.54a.8.8%2C0%2C0%2C1-.08.33.42.42%2C0%2C0%2C1-.19.22l-1.22.71a.15.15%2C0%2C0%2C1-.19%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-3.8a1.51%2C1.51%2C0%2C0%2C0-.2-.91c-.14-.18-.35-.19-.64%2C0a1.42%2C1.42%2C0%2C0%2C0-.64.76%2C3%2C3%2C0%2C0%2C0-.2%2C1.15v3.79a.8.8%2C0%2C0%2C1-.08.33.49.49%2C0%2C0%2C1-.18.23l-1.23.71a.15.15%2C0%2C0%2C1-.19%2C0%2C.35.35%2C0%2C0%2C1-.08-.24v-7a.8.8%2C0%2C0%2C1%2C.08-.33.57.57%2C0%2C0%2C1%2C.19-.23l1.18-.68a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v.35c.05-.13.12-.28.19-.43a3.21%2C3.21%2C0%2C0%2C1%2C.29-.46%2C4.88%2C4.88%2C0%2C0%2C1%2C.38-.43%2C3.38%2C3.38%2C0%2C0%2C1%2C.51-.38%2C2%2C2%2C0%2C0%2C1%2C.86-.29.87.87%2C0%2C0%2C1%2C.67.24%2C1.71%2C1.71%2C0%2C0%2C1%2C.43.81%2C5.2%2C5.2%2C0%2C0%2C1%2C.16%2C1.44Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M167%2C238.67a.92.92%2C0%2C0%2C0%2C.09.48q.1.12.33%2C0l.77-.45c.08%2C0%2C.14%2C0%2C.19%2C0a.33.33%2C0%2C0%2C1%2C.08.24v1.52a.8.8%2C0%2C0%2C1-.08.33.42.42%2C0%2C0%2C1-.19.22l-.92.54a1.94%2C1.94%2C0%2C0%2C1-.83.28.94.94%2C0%2C0%2C1-.64-.22%2C1.49%2C1.49%2C0%2C0%2C1-.41-.69%2C3.84%2C3.84%2C0%2C0%2C1-.15-1.16v-2.52l-.72.42a.14.14%2C0%2C0%2C1-.18%2C0%2C.29.29%2C0%2C0%2C1-.08-.24V235.9a.67.67%2C0%2C0%2C1%2C.08-.33.54.54%2C0%2C0%2C1%2C.18-.23l.72-.41v-2.45a.8.8%2C0%2C0%2C1%2C.08-.33.42.42%2C0%2C0%2C1%2C.19-.22l1.22-.71a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v2.45l1.1-.64a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v1.52a.8.8%2C0%2C0%2C1-.08.33.46.46%2C0%2C0%2C1-.18.22l-1.1.64Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M171.54%2C230.07a.8.8%2C0%2C0%2C1-.08.33.5.5%2C0%2C0%2C1-.19.23l-1.22.71a.15.15%2C0%2C0%2C1-.19%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-1.51a.8.8%2C0%2C0%2C1%2C.08-.33.45.45%2C0%2C0%2C1%2C.19-.23l1.22-.71a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24Zm0%2C8.62a.8.8%2C0%2C0%2C1-.08.33.45.45%2C0%2C0%2C1-.19.23l-1.22.71c-.08%2C0-.14%2C0-.19%2C0a.33.33%2C0%2C0%2C1-.08-.24v-7a.8.8%2C0%2C0%2C1%2C.08-.33.45.45%2C0%2C0%2C1%2C.19-.23l1.22-.71a.14.14%2C0%2C0%2C1%2C.19%2C0%2C.3.3%2C0%2C0%2C1%2C.08.24Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M174.7%2C232.85c0%2C.15%2C0%2C.33%2C0%2C.53s0%2C.37%2C0%2C.52a.94.94%2C0%2C0%2C0%2C.27.71c.15.13.36.12.62%2C0a1.47%2C1.47%2C0%2C0%2C0%2C.49-.42%2C2.26%2C2.26%2C0%2C0%2C0%2C.28-.56%2C1.69%2C1.69%2C0%2C0%2C1%2C.11-.27.4.4%2C0%2C0%2C1%2C.17-.19l1.28-.74a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.29.29%2C0%2C0%2C1%2C.07.24%2C5.12%2C5.12%2C0%2C0%2C1-.13.78%2C4.92%2C4.92%2C0%2C0%2C1-.41%2C1.16%2C5.85%2C5.85%2C0%2C0%2C1-.78%2C1.25%2C4.6%2C4.6%2C0%2C0%2C1-1.27%2C1.07%2C2.39%2C2.39%2C0%2C0%2C1-1%2C.35%2C1.31%2C1.31%2C0%2C0%2C1-.83-.21%2C1.72%2C1.72%2C0%2C0%2C1-.56-.77A3.61%2C3.61%2C0%2C0%2C1%2C173%2C235c0-.14%2C0-.34%2C0-.59s0-.45%2C0-.61a6.26%2C6.26%2C0%2C0%2C1%2C.23-1.56%2C6.8%2C6.8%2C0%2C0%2C1%2C.56-1.41%2C6%2C6%2C0%2C0%2C1%2C.83-1.17%2C4.38%2C4.38%2C0%2C0%2C1%2C1-.83%2C2.15%2C2.15%2C0%2C0%2C1%2C1.27-.39%2C1.18%2C1.18%2C0%2C0%2C1%2C.78.34%2C1.45%2C1.45%2C0%2C0%2C1%2C.41.68%2C3%2C3%2C0%2C0%2C1%2C.13.63.66.66%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.28.74a.15.15%2C0%2C0%2C1-.17%2C0%2C.58.58%2C0%2C0%2C1-.11-.15.46.46%2C0%2C0%2C0-.28-.24.7.7%2C0%2C0%2C0-.49.15%2C1.48%2C1.48%2C0%2C0%2C0-.62.68A2.49%2C2.49%2C0%2C0%2C0%2C174.7%2C232.85Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M179.17%2C232.47a4%2C4%2C0%2C0%2C1%2C.5-1.92%2C6.47%2C6.47%2C0%2C0%2C1%2C1.6-1.87l1.14-1a.81.81%2C0%2C0%2C0-.13-.52c-.08-.1-.23-.1-.44%2C0a1.12%2C1.12%2C0%2C0%2C0-.34.3%2C2.1%2C2.1%2C0%2C0%2C0-.18.28%2C1.07%2C1.07%2C0%2C0%2C1-.17.24.86.86%2C0%2C0%2C1-.18.14l-1.24.71c-.07%2C0-.12%2C0-.16%2C0a.25.25%2C0%2C0%2C1%2C0-.21%2C2.75%2C2.75%2C0%2C0%2C1%2C.19-.84%2C6.14%2C6.14%2C0%2C0%2C1%2C.48-1%2C6.5%2C6.5%2C0%2C0%2C1%2C.73-.95%2C4.21%2C4.21%2C0%2C0%2C1%2C.92-.74%2C2.47%2C2.47%2C0%2C0%2C1%2C1-.37%2C1%2C1%2C0%2C0%2C1%2C.72.2%2C1.36%2C1.36%2C0%2C0%2C1%2C.43.7%2C4.13%2C4.13%2C0%2C0%2C1%2C.13%2C1.13v4.54a.78.78%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.23.71a.14.14%2C0%2C0%2C1-.18%2C0%2C.29.29%2C0%2C0%2C1-.08-.24V232a4.52%2C4.52%2C0%2C0%2C1-.58%2C1%2C2.81%2C2.81%2C0%2C0%2C1-.91.79%2C1.58%2C1.58%2C0%2C0%2C1-.75.25.73.73%2C0%2C0%2C1-.54-.18%2C1.15%2C1.15%2C0%2C0%2C1-.34-.55A2.88%2C2.88%2C0%2C0%2C1%2C179.17%2C232.47Zm2.23-.94a1.54%2C1.54%2C0%2C0%2C0%2C.4-.34%2C2.76%2C2.76%2C0%2C0%2C0%2C.32-.49%2C3%2C3%2C0%2C0%2C0%2C.21-.59%2C2.47%2C2.47%2C0%2C0%2C0%2C.08-.6l-.9.72a2.43%2C2.43%2C0%2C0%2C0-.42.5%2C1.09%2C1.09%2C0%2C0%2C0-.16.56q0%2C.28.12.33A.44.44%2C0%2C0%2C0%2C181.4%2C231.53Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M188.06%2C226.51a.8.8%2C0%2C0%2C0%2C.1.48c.06.09.17.09.32%2C0l.78-.45a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.29.29%2C0%2C0%2C1%2C.08.24v1.51a.67.67%2C0%2C0%2C1-.08.33.49.49%2C0%2C0%2C1-.18.23l-.93.53a1.78%2C1.78%2C0%2C0%2C1-.83.28.9.9%2C0%2C0%2C1-.64-.21%2C1.62%2C1.62%2C0%2C0%2C1-.41-.7%2C3.8%2C3.8%2C0%2C0%2C1-.14-1.15V225.1l-.73.41a.14.14%2C0%2C0%2C1-.18%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-1.51a.8.8%2C0%2C0%2C1%2C.08-.33.44.44%2C0%2C0%2C1%2C.18-.23l.73-.42v-2.44a.78.78%2C0%2C0%2C1%2C.07-.33.57.57%2C0%2C0%2C1%2C.19-.23l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.35.35%2C0%2C0%2C1%2C.08.24v2.45l1.1-.64a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.07.24v1.51a.78.78%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.1.64Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M192.36%2C224a1.25%2C1.25%2C0%2C0%2C0%2C.08.53.5.5%2C0%2C0%2C0%2C.21.24.44.44%2C0%2C0%2C0%2C.28%2C0%2C1.34%2C1.34%2C0%2C0%2C0%2C.3-.12%2C1.82%2C1.82%2C0%2C0%2C0%2C.47-.36%2C1.92%2C1.92%2C0%2C0%2C0%2C.28-.42%2C2.24%2C2.24%2C0%2C0%2C1%2C.16-.26.57.57%2C0%2C0%2C1%2C.16-.14l1.27-.73c.15-.08.22%2C0%2C.22.21a2.39%2C2.39%2C0%2C0%2C1-.15.63%2C6.46%2C6.46%2C0%2C0%2C1-.45%2C1%2C6.94%2C6.94%2C0%2C0%2C1-.8%2C1.13%2C4.5%2C4.5%2C0%2C0%2C1-1.16.95%2C2.23%2C2.23%2C0%2C0%2C1-1.12.37%2C1.09%2C1.09%2C0%2C0%2C1-.83-.32%2C2.21%2C2.21%2C0%2C0%2C1-.51-1%2C6.65%2C6.65%2C0%2C0%2C1-.17-1.6%2C8.85%2C8.85%2C0%2C0%2C1%2C.17-1.71%2C7.6%2C7.6%2C0%2C0%2C1%2C.51-1.57%2C5.63%2C5.63%2C0%2C0%2C1%2C.83-1.33%2C4.43%2C4.43%2C0%2C0%2C1%2C1.12-1%2C2%2C2%2C0%2C0%2C1%2C1.22-.33%2C1.23%2C1.23%2C0%2C0%2C1%2C.81.48%2C2.42%2C2.42%2C0%2C0%2C1%2C.46%2C1%2C6%2C6%2C0%2C0%2C1%2C.14%2C1.36v.42a.78.78%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23Zm.87-3.38a1.46%2C1.46%2C0%2C0%2C0-.62.73%2C3.07%2C3.07%2C0%2C0%2C0-.25%2C1l1.75-1a1.27%2C1.27%2C0%2C0%2C0-.25-.7C193.71%2C220.5%2C193.51%2C220.49%2C193.23%2C220.65Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M202.18%2C223.9a2.63%2C2.63%2C0%2C0%2C1-.1.3.46.46%2C0%2C0%2C1-.19.22l-1.27.74a.13.13%2C0%2C0%2C1-.17%2C0%2C.32.32%2C0%2C0%2C1-.07-.22s0-.07%2C0-.11l.74-3.11-2-5.9a.28.28%2C0%2C0%2C1%2C0-.1.59.59%2C0%2C0%2C1%2C.07-.29.42.42%2C0%2C0%2C1%2C.16-.2l1.28-.74c.08%2C0%2C.14%2C0%2C.18%2C0a.5.5%2C0%2C0%2C1%2C.1.19L202%2C218l1.07-4.52a1.25%2C1.25%2C0%2C0%2C1%2C.1-.29.54.54%2C0%2C0%2C1%2C.18-.23l1.29-.74a.13.13%2C0%2C0%2C1%2C.17%2C0%2C.29.29%2C0%2C0%2C1%2C.07.21.36.36%2C0%2C0%2C1%2C0%2C.11Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M211%2C211.86c0%2C.15%2C0%2C.34%2C0%2C.57s0%2C.43%2C0%2C.58a6.37%2C6.37%2C0%2C0%2C1-.21%2C1.48%2C7.08%2C7.08%2C0%2C0%2C1-.54%2C1.41%2C5.67%2C5.67%2C0%2C0%2C1-.82%2C1.22%2C4.35%2C4.35%2C0%2C0%2C1-1.08.89%2C2.17%2C2.17%2C0%2C0%2C1-1.07.35%2C1.16%2C1.16%2C0%2C0%2C1-.82-.27%2C1.74%2C1.74%2C0%2C0%2C1-.54-.79%2C3.67%2C3.67%2C0%2C0%2C1-.21-1.23c0-.14%2C0-.33%2C0-.57s0-.43%2C0-.58a5.84%2C5.84%2C0%2C0%2C1%2C.2-1.47%2C6.85%2C6.85%2C0%2C0%2C1%2C.54-1.41%2C6.17%2C6.17%2C0%2C0%2C1%2C.83-1.23%2C4.31%2C4.31%2C0%2C0%2C1%2C1.07-.9%2C2.34%2C2.34%2C0%2C0%2C1%2C1.08-.35%2C1.32%2C1.32%2C0%2C0%2C1%2C.83.28%2C1.65%2C1.65%2C0%2C0%2C1%2C.53.79A3.76%2C3.76%2C0%2C0%2C1%2C211%2C211.86ZM207.43%2C215a.94.94%2C0%2C0%2C0%2C.27.73c.15.13.36.11.62%2C0A1.55%2C1.55%2C0%2C0%2C0%2C209%2C215a2.55%2C2.55%2C0%2C0%2C0%2C.27-1.05c0-.15%2C0-.33%2C0-.52s0-.36%2C0-.5a1%2C1%2C0%2C0%2C0-.27-.74.55.55%2C0%2C0%2C0-.63%2C0%2C1.61%2C1.61%2C0%2C0%2C0-.62.69%2C2.55%2C2.55%2C0%2C0%2C0-.27%2C1.05c0%2C.16%2C0%2C.33%2C0%2C.52S207.42%2C214.84%2C207.43%2C215Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M212.33%2C208.15a.67.67%2C0%2C0%2C1%2C.08-.33.46.46%2C0%2C0%2C1%2C.18-.22l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.29.29%2C0%2C0%2C1%2C.08.24v3.8a1.66%2C1.66%2C0%2C0%2C0%2C.19.92c.12.19.33.2.61%2C0a1.36%2C1.36%2C0%2C0%2C0%2C.61-.74%2C3.33%2C3.33%2C0%2C0%2C0%2C.18-1.14v-3.8a.8.8%2C0%2C0%2C1%2C.08-.33.46.46%2C0%2C0%2C1%2C.18-.22l1.23-.71a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.07.24v7a.78.78%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.13.65a.14.14%2C0%2C0%2C1-.18%2C0%2C.29.29%2C0%2C0%2C1-.08-.24v-.35a4%2C4%2C0%2C0%2C1-.19.43%2C3.68%2C3.68%2C0%2C0%2C1-.28.45%2C3.78%2C3.78%2C0%2C0%2C1-.38.43%2C2.8%2C2.8%2C0%2C0%2C1-.53.39c-.63.36-1.13.37-1.5%2C0a3.13%2C3.13%2C0%2C0%2C1-.56-2.27Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M222.58%2C201.83a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.29.29%2C0%2C0%2C1%2C.08.24v1.52a.67.67%2C0%2C0%2C1-.08.33.54.54%2C0%2C0%2C1-.18.23l-.89.51a2%2C2%2C0%2C0%2C0-.89%2C1.89v3.69a.8.8%2C0%2C0%2C1-.08.33.5.5%2C0%2C0%2C1-.19.23l-1.23.71a.14.14%2C0%2C0%2C1-.18%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-7a.8.8%2C0%2C0%2C1%2C.08-.33.49.49%2C0%2C0%2C1%2C.18-.23l1.14-.65a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v.35a4.78%2C4.78%2C0%2C0%2C1%2C.54-.86%2C2.71%2C2.71%2C0%2C0%2C1%2C.75-.64Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M226%2C205.42a4%2C4%2C0%2C0%2C1%2C.49-1.92%2C6.63%2C6.63%2C0%2C0%2C1%2C1.6-1.87l1.14-1a.81.81%2C0%2C0%2C0-.13-.52c-.08-.1-.23-.1-.43%2C0a1.17%2C1.17%2C0%2C0%2C0-.35.3%2C2.1%2C2.1%2C0%2C0%2C0-.18.28.83.83%2C0%2C0%2C1-.17.24.86.86%2C0%2C0%2C1-.18.14l-1.24.71a.14.14%2C0%2C0%2C1-.16%2C0%2C.25.25%2C0%2C0%2C1%2C0-.21%2C3.09%2C3.09%2C0%2C0%2C1%2C.19-.84%2C5.13%2C5.13%2C0%2C0%2C1%2C.49-1%2C5.35%2C5.35%2C0%2C0%2C1%2C.73-1%2C3.79%2C3.79%2C0%2C0%2C1%2C.92-.74%2C2.44%2C2.44%2C0%2C0%2C1%2C1-.37%2C1%2C1%2C0%2C0%2C1%2C.72.2%2C1.29%2C1.29%2C0%2C0%2C1%2C.43.7%2C4.1%2C4.1%2C0%2C0%2C1%2C.14%2C1.13v4.54a.8.8%2C0%2C0%2C1-.08.33.57.57%2C0%2C0%2C1-.19.23l-1.23.71a.14.14%2C0%2C0%2C1-.18%2C0%2C.33.33%2C0%2C0%2C1-.08-.24V205a4.18%2C4.18%2C0%2C0%2C1-.58%2C1%2C2.94%2C2.94%2C0%2C0%2C1-.91.79%2C1.58%2C1.58%2C0%2C0%2C1-.74.25.75.75%2C0%2C0%2C1-.55-.18%2C1.15%2C1.15%2C0%2C0%2C1-.34-.55A3.25%2C3.25%2C0%2C0%2C1%2C226%2C205.42Zm2.22-.94a1.54%2C1.54%2C0%2C0%2C0%2C.4-.34%2C2.76%2C2.76%2C0%2C0%2C0%2C.32-.49%2C3%2C3%2C0%2C0%2C0%2C.21-.59%2C2.06%2C2.06%2C0%2C0%2C0%2C.08-.6l-.9.72a2.43%2C2.43%2C0%2C0%2C0-.42.5%2C1.09%2C1.09%2C0%2C0%2C0-.16.56q0%2C.28.12.33A.44.44%2C0%2C0%2C0%2C228.25%2C204.48Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M234.13%2C198.53c0%2C.16%2C0%2C.34%2C0%2C.54s0%2C.37%2C0%2C.51a1%2C1%2C0%2C0%2C0%2C.27.72c.15.13.36.12.62%2C0a1.47%2C1.47%2C0%2C0%2C0%2C.49-.42%2C2.26%2C2.26%2C0%2C0%2C0%2C.28-.56%2C2.33%2C2.33%2C0%2C0%2C1%2C.11-.28.42.42%2C0%2C0%2C1%2C.17-.18l1.28-.74a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.29.29%2C0%2C0%2C1%2C.07.24%2C6.05%2C6.05%2C0%2C0%2C1-.53%2C1.94%2C6.64%2C6.64%2C0%2C0%2C1-.79%2C1.25A4.78%2C4.78%2C0%2C0%2C1%2C235%2C202.6a2.48%2C2.48%2C0%2C0%2C1-1%2C.35%2C1.26%2C1.26%2C0%2C0%2C1-.83-.22%2C1.63%2C1.63%2C0%2C0%2C1-.56-.76%2C3.65%2C3.65%2C0%2C0%2C1-.23-1.3c0-.14%2C0-.34%2C0-.59s0-.45%2C0-.61a6.19%2C6.19%2C0%2C0%2C1%2C.23-1.56%2C7.12%2C7.12%2C0%2C0%2C1%2C.56-1.42%2C6.22%2C6.22%2C0%2C0%2C1%2C.83-1.16%2C4.33%2C4.33%2C0%2C0%2C1%2C1-.83%2C2.24%2C2.24%2C0%2C0%2C1%2C1.27-.4%2C1.34%2C1.34%2C0%2C0%2C1%2C.79.34%2C1.55%2C1.55%2C0%2C0%2C1%2C.4.69%2C2.93%2C2.93%2C0%2C0%2C1%2C.13.63.66.66%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.28.73c-.07%2C0-.13%2C0-.17%2C0a.4.4%2C0%2C0%2C1-.11-.14.46.46%2C0%2C0%2C0-.28-.24.73.73%2C0%2C0%2C0-.49.14%2C1.55%2C1.55%2C0%2C0%2C0-.62.69A2.49%2C2.49%2C0%2C0%2C0%2C234.13%2C198.53Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M240.47%2C194.87c0%2C.15%2C0%2C.33%2C0%2C.53s0%2C.37%2C0%2C.52a1%2C1%2C0%2C0%2C0%2C.27.72c.15.12.36.11.62%2C0a1.37%2C1.37%2C0%2C0%2C0%2C.49-.42%2C2%2C2%2C0%2C0%2C0%2C.28-.56%2C1.69%2C1.69%2C0%2C0%2C1%2C.11-.27.46.46%2C0%2C0%2C1%2C.17-.19l1.28-.74a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.29.29%2C0%2C0%2C1%2C.07.24%2C4.81%2C4.81%2C0%2C0%2C1-.12.78%2C6%2C6%2C0%2C0%2C1-.41%2C1.16%2C6.34%2C6.34%2C0%2C0%2C1-.79%2C1.25%2C4.46%2C4.46%2C0%2C0%2C1-1.27%2C1.07%2C2.35%2C2.35%2C0%2C0%2C1-1%2C.35%2C1.31%2C1.31%2C0%2C0%2C1-.83-.21%2C1.74%2C1.74%2C0%2C0%2C1-.56-.76%2C3.71%2C3.71%2C0%2C0%2C1-.23-1.31c0-.14%2C0-.34%2C0-.59s0-.45%2C0-.61a6.26%2C6.26%2C0%2C0%2C1%2C.23-1.56%2C6.8%2C6.8%2C0%2C0%2C1%2C.56-1.41%2C6%2C6%2C0%2C0%2C1%2C.83-1.17%2C4.59%2C4.59%2C0%2C0%2C1%2C1-.83%2C2.16%2C2.16%2C0%2C0%2C1%2C1.27-.39%2C1.22%2C1.22%2C0%2C0%2C1%2C.79.34%2C1.64%2C1.64%2C0%2C0%2C1%2C.41.68%2C2.9%2C2.9%2C0%2C0%2C1%2C.12.63.66.66%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.28.74a.15.15%2C0%2C0%2C1-.17%2C0%2C.58.58%2C0%2C0%2C1-.11-.15.44.44%2C0%2C0%2C0-.28-.24.75.75%2C0%2C0%2C0-.49.14%2C1.67%2C1.67%2C0%2C0%2C0-.62.69A2.49%2C2.49%2C0%2C0%2C0%2C240.47%2C194.87Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M250.36%2C189.11c0%2C.15%2C0%2C.34%2C0%2C.57s0%2C.43%2C0%2C.59a6.28%2C6.28%2C0%2C0%2C1-.21%2C1.47%2C6.64%2C6.64%2C0%2C0%2C1-.54%2C1.41%2C5.43%2C5.43%2C0%2C0%2C1-.82%2C1.22%2C4.14%2C4.14%2C0%2C0%2C1-1.08.89%2C2.17%2C2.17%2C0%2C0%2C1-1.07.35%2C1.23%2C1.23%2C0%2C0%2C1-.83-.26%2C1.9%2C1.9%2C0%2C0%2C1-.53-.8%2C3.91%2C3.91%2C0%2C0%2C1-.22-1.22c0-.15%2C0-.34%2C0-.57s0-.43%2C0-.59a6.36%2C6.36%2C0%2C0%2C1%2C.21-1.47%2C7.08%2C7.08%2C0%2C0%2C1%2C.54-1.41%2C5.77%2C5.77%2C0%2C0%2C1%2C.83-1.23%2C4.31%2C4.31%2C0%2C0%2C1%2C1.07-.9%2C2.2%2C2.2%2C0%2C0%2C1%2C1.08-.34%2C1.31%2C1.31%2C0%2C0%2C1%2C.83.27%2C1.7%2C1.7%2C0%2C0%2C1%2C.53.79A3.76%2C3.76%2C0%2C0%2C1%2C250.36%2C189.11Zm-3.54%2C3.13a1%2C1%2C0%2C0%2C0%2C.27.74c.15.12.36.11.62%2C0a1.63%2C1.63%2C0%2C0%2C0%2C.63-.69%2C2.5%2C2.5%2C0%2C0%2C0%2C.27-1c0-.16%2C0-.34%2C0-.53s0-.35%2C0-.5a1%2C1%2C0%2C0%2C0-.27-.73c-.16-.13-.37-.11-.63%2C0a1.58%2C1.58%2C0%2C0%2C0-.62.68%2C2.55%2C2.55%2C0%2C0%2C0-.27%2C1.05%2C4.27%2C4.27%2C0%2C0%2C0%2C0%2C.52A3.78%2C3.78%2C0%2C0%2C0%2C246.82%2C192.24Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M251.72%2C185.41a.67.67%2C0%2C0%2C1%2C.08-.33.49.49%2C0%2C0%2C1%2C.18-.23l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.33.33%2C0%2C0%2C1%2C.08.24v3.8a1.7%2C1.7%2C0%2C0%2C0%2C.19.93c.12.19.32.2.61%2C0a1.33%2C1.33%2C0%2C0%2C0%2C.61-.74%2C3.33%2C3.33%2C0%2C0%2C0%2C.18-1.14v-3.79a.67.67%2C0%2C0%2C1%2C.08-.33.49.49%2C0%2C0%2C1%2C.18-.23l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.29.29%2C0%2C0%2C1%2C.08.24v7a.67.67%2C0%2C0%2C1-.08.33.49.49%2C0%2C0%2C1-.18.23l-1.13.65a.15.15%2C0%2C0%2C1-.19%2C0%2C.33.33%2C0%2C0%2C1-.07-.24v-.34l-.19.43a3.59%2C3.59%2C0%2C0%2C1-.28.44%2C3.1%2C3.1%2C0%2C0%2C1-.39.43%2C2.71%2C2.71%2C0%2C0%2C1-.52.39c-.63.36-1.13.38-1.5%2C0a3.13%2C3.13%2C0%2C0%2C1-.56-2.27Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M263.62%2C185.52a.78.78%2C0%2C0%2C1-.07.33.57.57%2C0%2C0%2C1-.19.23l-1.23.71a.14.14%2C0%2C0%2C1-.18%2C0%2C.29.29%2C0%2C0%2C1-.08-.24v-3.79a1.63%2C1.63%2C0%2C0%2C0-.2-.92c-.14-.18-.36-.18-.65%2C0a1.55%2C1.55%2C0%2C0%2C0-.64.76%2C3.19%2C3.19%2C0%2C0%2C0-.2%2C1.15v3.8a.78.78%2C0%2C0%2C1-.07.33.53.53%2C0%2C0%2C1-.19.22l-1.23.71a.14.14%2C0%2C0%2C1-.18%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-7a.8.8%2C0%2C0%2C1%2C.08-.33.49.49%2C0%2C0%2C1%2C.18-.23l1.18-.68a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.07.24v.34c.06-.13.12-.27.2-.43a3.68%2C3.68%2C0%2C0%2C1%2C.28-.45%2C3.16%2C3.16%2C0%2C0%2C1%2C.39-.44%2C2.58%2C2.58%2C0%2C0%2C1%2C.51-.37%2C2.07%2C2.07%2C0%2C0%2C1%2C.86-.3.87.87%2C0%2C0%2C1%2C.66.24%2C1.81%2C1.81%2C0%2C0%2C1%2C.44.82%2C5.67%2C5.67%2C0%2C0%2C1%2C.15%2C1.44Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M267.48%2C180.65a.8.8%2C0%2C0%2C0%2C.1.48c.06.09.17.09.32%2C0l.78-.45a.14.14%2C0%2C0%2C1%2C.18%2C0c.06%2C0%2C.08.12.08.24v1.51a.67.67%2C0%2C0%2C1-.08.33.49.49%2C0%2C0%2C1-.18.23l-.93.53a1.78%2C1.78%2C0%2C0%2C1-.83.28.87.87%2C0%2C0%2C1-.64-.22%2C1.53%2C1.53%2C0%2C0%2C1-.41-.69%2C4.15%2C4.15%2C0%2C0%2C1-.14-1.15v-2.52l-.72.41a.15.15%2C0%2C0%2C1-.19%2C0%2C.33.33%2C0%2C0%2C1-.08-.24v-1.51a.73.73%2C0%2C0%2C1%2C.08-.33.45.45%2C0%2C0%2C1%2C.19-.23l.72-.42v-2.44a.67.67%2C0%2C0%2C1%2C.08-.33.49.49%2C0%2C0%2C1%2C.18-.23l1.23-.71a.14.14%2C0%2C0%2C1%2C.18%2C0%2C.29.29%2C0%2C0%2C1%2C.08.24v2.45l1.1-.64a.15.15%2C0%2C0%2C1%2C.19%2C0%2C.33.33%2C0%2C0%2C1%2C.07.24V177a.78.78%2C0%2C0%2C1-.07.33.5.5%2C0%2C0%2C1-.19.23l-1.1.64Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Code--inject-87%22%3E%3Cg%20id%3D%22freepik--Numbers--inject-87%22%3E%3Cg%20id%3D%22freepik--speach-bubble--inject-87%22%3E%3Cpath%20d%3D%22M165.5%2C265.65a3.72%2C3.72%2C0%2C0%2C0-1.68-2.92l-1.37-.79a3.71%2C3.71%2C0%2C0%2C0-3.37%2C0l-21%2C12.15a3.75%2C3.75%2C0%2C0%2C0-1.68%2C2.92v39.13a3.75%2C3.75%2C0%2C0%2C0%2C1.68%2C2.92l1.37.79a3.71%2C3.71%2C0%2C0%2C0%2C3.37%2C0l21-12.15a3.72%2C3.72%2C0%2C0%2C0%2C1.68-2.92Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M136.39%2C316.14a3.75%2C3.75%2C0%2C0%2C0%2C1.68%2C2.92l1.37.79a3.75%2C3.75%2C0%2C0%2C0%2C3.08.13c-.79.3-1.39-.14-1.39-1.1V279.74a3.49%2C3.49%2C0%2C0%2C1%2C.49-1.66l-4.73-2.73a3.36%2C3.36%2C0%2C0%2C0-.5%2C1.66Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M165.45%2C265.17c-.2-.72-.85-.94-1.63-.5l-21%2C12.16a3.34%2C3.34%2C0%2C0%2C0-1.19%2C1.25l-4.73-2.73a3.45%2C3.45%2C0%2C0%2C1%2C1.19-1.26l21-12.15a3.77%2C3.77%2C0%2C0%2C1%2C3.37%2C0l1.37.79A3.77%2C3.77%2C0%2C0%2C1%2C165.45%2C265.17Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20d%3D%22M158.21%2C276.18a.38.38%2C0%2C0%2C1%2C.49%2C0%2C.86.86%2C0%2C0%2C1%2C.2.63v2.59a4%2C4%2C0%2C0%2C1-.1.86c-.07.31-.17.73-.31%2C1.25l-5.9%2C24.38a5.37%2C5.37%2C0%2C0%2C1-.27.8%2C1.17%2C1.17%2C0%2C0%2C1-.47.57l-2.12%2C1.22a.35.35%2C0%2C0%2C1-.48%2C0%2C.8.8%2C0%2C0%2C1-.2-.62%2C2.75%2C2.75%2C0%2C0%2C1%2C.07-.52l5.93-24.43-8%2C4.61a.36.36%2C0%2C0%2C1-.48%2C0%2C.83.83%2C0%2C0%2C1-.21-.63v-2.78a1.94%2C1.94%2C0%2C0%2C1%2C.21-.86%2C1.18%2C1.18%2C0%2C0%2C1%2C.48-.59Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--speach-bubble--inject-87%22%3E%3Cpath%20d%3D%22M199.66%2C245.92A3.74%2C3.74%2C0%2C0%2C0%2C198%2C243l-1.37-.79a3.71%2C3.71%2C0%2C0%2C0-3.37%2C0l-21%2C12.15a3.72%2C3.72%2C0%2C0%2C0-1.68%2C2.91v39.14a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.92l1.37.79a3.77%2C3.77%2C0%2C0%2C0%2C3.37%2C0L198%2C288a3.75%2C3.75%2C0%2C0%2C0%2C1.68-2.92Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M170.55%2C296.42a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.92l1.37.79a3.75%2C3.75%2C0%2C0%2C0%2C3.08.13c-.79.3-1.4-.14-1.4-1.1V260a3.4%2C3.4%2C0%2C0%2C1%2C.5-1.66L171%2C255.63a3.45%2C3.45%2C0%2C0%2C0-.49%2C1.65Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M199.6%2C245.45c-.19-.72-.85-.95-1.62-.5l-21%2C12.16a3.26%2C3.26%2C0%2C0%2C0-1.19%2C1.25l-4.73-2.73a3.42%2C3.42%2C0%2C0%2C1%2C1.18-1.26l21-12.15a3.75%2C3.75%2C0%2C0%2C1%2C3.36%2C0L198%2C243A3.72%2C3.72%2C0%2C0%2C1%2C199.6%2C245.45Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20d%3D%22M181.52%2C263.78a2%2C2%2C0%2C0%2C1%2C.21-.87%2C1.27%2C1.27%2C0%2C0%2C1%2C.48-.59l9.57-5.52a.38.38%2C0%2C0%2C1%2C.49%2C0%2C.86.86%2C0%2C0%2C1%2C.2.63v2.78a2%2C2%2C0%2C0%2C1-.2.86%2C1.33%2C1.33%2C0%2C0%2C1-.49.6l-7.15%2C4.12-.28%2C5.18a7%2C7%2C0%2C0%2C1%2C1.36-1.29q.67-.46%2C1.11-.72a6.64%2C6.64%2C0%2C0%2C1%2C2.65-.94%2C3%2C3%2C0%2C0%2C1%2C2.11.52%2C4.24%2C4.24%2C0%2C0%2C1%2C1.4%2C2%2C10.57%2C10.57%2C0%2C0%2C1%2C.51%2C3.58%2C19.32%2C19.32%2C0%2C0%2C1-.52%2C4.6%2C16.41%2C16.41%2C0%2C0%2C1-1.43%2C3.76%2C12.28%2C12.28%2C0%2C0%2C1-2.13%2C2.91%2C11.93%2C11.93%2C0%2C0%2C1-2.59%2C2%2C7.54%2C7.54%2C0%2C0%2C1-3%2C1.12%2C3.09%2C3.09%2C0%2C0%2C1-2.09-.5%2C3.65%2C3.65%2C0%2C0%2C1-1.24-1.75%2C8.46%2C8.46%2C0%2C0%2C1-.47-2.65%2C1.6%2C1.6%2C0%2C0%2C1%2C.19-.88%2C1.38%2C1.38%2C0%2C0%2C1%2C.49-.58l2.06-1.19a.43.43%2C0%2C0%2C1%2C.46%2C0%2C.77.77%2C0%2C0%2C1%2C.28.53%2C2.49%2C2.49%2C0%2C0%2C0%2C.49%2C1.19%2C1.36%2C1.36%2C0%2C0%2C0%2C.76.46%2C1.88%2C1.88%2C0%2C0%2C0%2C1-.11%2C7%2C7%2C0%2C0%2C0%2C1.12-.53%2C6%2C6%2C0%2C0%2C0%2C2.34-2.57%2C8.29%2C8.29%2C0%2C0%2C0%2C.89-3.84%2C2.86%2C2.86%2C0%2C0%2C0-.89-2.43%2C2.08%2C2.08%2C0%2C0%2C0-2.34.14%2C5.75%2C5.75%2C0%2C0%2C0-1.94%2C1.7c-.18.27-.35.5-.51.71a1.69%2C1.69%2C0%2C0%2C1-.58.51l-2.34%2C1.36a.38.38%2C0%2C0%2C1-.49%2C0%2C.85.85%2C0%2C0%2C1-.2-.62Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--speach-bubble--inject-87%22%3E%3Cpath%20d%3D%22M131.29%2C285.37a3.73%2C3.73%2C0%2C0%2C0-1.68-2.92l-1.37-.79a3.77%2C3.77%2C0%2C0%2C0-3.37%2C0l-21%2C12.15a3.73%2C3.73%2C0%2C0%2C0-1.68%2C2.92v39.14a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.91l1.37.79a3.71%2C3.71%2C0%2C0%2C0%2C3.37%2C0l21-12.15a3.72%2C3.72%2C0%2C0%2C0%2C1.68-2.91Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M102.18%2C335.87a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.91l1.37.79a3.75%2C3.75%2C0%2C0%2C0%2C3.08.14c-.79.3-1.39-.15-1.39-1.11V299.46a3.41%2C3.41%2C0%2C0%2C1%2C.49-1.66l-4.74-2.73a3.49%2C3.49%2C0%2C0%2C0-.49%2C1.66Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M131.23%2C284.89c-.19-.71-.84-.94-1.62-.49l-21%2C12.15a3.29%2C3.29%2C0%2C0%2C0-1.19%2C1.26l-4.73-2.74a3.4%2C3.4%2C0%2C0%2C1%2C1.18-1.25l21-12.16a3.77%2C3.77%2C0%2C0%2C1%2C3.37%2C0l1.37.8A3.67%2C3.67%2C0%2C0%2C1%2C131.23%2C284.89Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20d%3D%22M124%2C295.9a.36.36%2C0%2C0%2C1%2C.48%2C0%2C.86.86%2C0%2C0%2C1%2C.21.63v2.59a4.64%2C4.64%2C0%2C0%2C1-.1.86c-.07.31-.17.73-.31%2C1.26l-5.91%2C24.38a4.67%2C4.67%2C0%2C0%2C1-.26.8%2C1.15%2C1.15%2C0%2C0%2C1-.47.56l-2.12%2C1.22a.36.36%2C0%2C0%2C1-.48%2C0%2C.83.83%2C0%2C0%2C1-.21-.63%2C3.07%2C3.07%2C0%2C0%2C1%2C.08-.51l5.93-24.44-8%2C4.62a.35.35%2C0%2C0%2C1-.48%2C0%2C.8.8%2C0%2C0%2C1-.21-.62v-2.79a2%2C2%2C0%2C0%2C1%2C.21-.86%2C1.22%2C1.22%2C0%2C0%2C1%2C.48-.59Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--speach-bubble--inject-87%22%3E%3Cpath%20d%3D%22M256.58%2C213.06a3.72%2C3.72%2C0%2C0%2C0-1.68-2.92l-1.37-.79a3.75%2C3.75%2C0%2C0%2C0-3.36%2C0l-21%2C12.15a3.72%2C3.72%2C0%2C0%2C0-1.68%2C2.92v39.14a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.91l1.37.79a3.69%2C3.69%2C0%2C0%2C0%2C3.36%2C0l21-12.15a3.73%2C3.73%2C0%2C0%2C0%2C1.69-2.91Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M227.48%2C263.56a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.91l1.37.79a3.75%2C3.75%2C0%2C0%2C0%2C3.08.14c-.8.3-1.4-.15-1.4-1.11V227.15a3.52%2C3.52%2C0%2C0%2C1%2C.49-1.66L228%2C222.76a3.38%2C3.38%2C0%2C0%2C0-.49%2C1.66Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M256.53%2C212.58c-.2-.71-.85-.94-1.62-.49l-21%2C12.15a3.39%2C3.39%2C0%2C0%2C0-1.18%2C1.25L228%2C222.76a3.42%2C3.42%2C0%2C0%2C1%2C1.19-1.25l21-12.16a3.77%2C3.77%2C0%2C0%2C1%2C3.37%2C0l1.38.8A3.67%2C3.67%2C0%2C0%2C1%2C256.53%2C212.58Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20d%3D%22M245.3%2C238a8.57%2C8.57%2C0%2C0%2C0%2C1-2.49%2C10.56%2C10.56%2C0%2C0%2C0%2C.22-1.93%2C3.61%2C3.61%2C0%2C0%2C0-.64-2.35c-.42-.5-1.13-.47-2.11.1a4.83%2C4.83%2C0%2C0%2C0-2.05%2C2.24%2C12%2C12%2C0%2C0%2C0-.93%2C3.24%2C2.42%2C2.42%2C0%2C0%2C1-.31.95%2C1.42%2C1.42%2C0%2C0%2C1-.46.52l-2%2C1.16a.42.42%2C0%2C0%2C1-.49%2C0c-.15-.11-.21-.33-.19-.66a16.56%2C16.56%2C0%2C0%2C1%2C.58-3.67%2C18.21%2C18.21%2C0%2C0%2C1%2C1.36-3.52%2C15.67%2C15.67%2C0%2C0%2C1%2C2-3%2C9.61%2C9.61%2C0%2C0%2C1%2C2.47-2.11%2C4.73%2C4.73%2C0%2C0%2C1%2C2.78-.8%2C3%2C3%2C0%2C0%2C1%2C1.93%2C1%2C5.15%2C5.15%2C0%2C0%2C1%2C1.13%2C2.17%2C10.52%2C10.52%2C0%2C0%2C1%2C.37%2C2.86c0%2C.65%2C0%2C1.29-.07%2C1.91a11%2C11%2C0%2C0%2C1-.36%2C2%2C20.31%2C20.31%2C0%2C0%2C1-.81%2C2.31%2C31.73%2C31.73%2C0%2C0%2C1-1.43%2C2.88L242.55%2C250l7.08-4.08a.36.36%2C0%2C0%2C1%2C.48%2C0%2C.83.83%2C0%2C0%2C1%2C.21.63v2.78a1.91%2C1.91%2C0%2C0%2C1-.21.86%2C1.38%2C1.38%2C0%2C0%2C1-.48.6l-11.89%2C6.86a.38.38%2C0%2C0%2C1-.49%2C0%2C.86.86%2C0%2C0%2C1-.2-.63v-2.39a3.52%2C3.52%2C0%2C0%2C1%2C.26-1.31%2C6.1%2C6.1%2C0%2C0%2C1%2C.43-.93Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--speach-bubble--inject-87%22%3E%3Cpath%20d%3D%22M290.74%2C193.34a3.72%2C3.72%2C0%2C0%2C0-1.68-2.92l-1.37-.79a3.77%2C3.77%2C0%2C0%2C0-3.37%2C0l-21%2C12.15a3.73%2C3.73%2C0%2C0%2C0-1.69%2C2.92v39.14a3.73%2C3.73%2C0%2C0%2C0%2C1.69%2C2.91l1.37.79a3.69%2C3.69%2C0%2C0%2C0%2C3.36%2C0l21-12.15a3.72%2C3.72%2C0%2C0%2C0%2C1.68-2.91Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M261.63%2C243.84a3.73%2C3.73%2C0%2C0%2C0%2C1.69%2C2.91l1.37.79a3.73%2C3.73%2C0%2C0%2C0%2C3.07.14c-.79.3-1.39-.15-1.39-1.11V207.43a3.49%2C3.49%2C0%2C0%2C1%2C.49-1.66L262.13%2C203a3.4%2C3.4%2C0%2C0%2C0-.5%2C1.66Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M290.69%2C192.86c-.2-.71-.85-.94-1.63-.5l-21%2C12.16a3.42%2C3.42%2C0%2C0%2C0-1.19%2C1.25L262.13%2C203a3.34%2C3.34%2C0%2C0%2C1%2C1.19-1.25l21-12.16a3.77%2C3.77%2C0%2C0%2C1%2C3.37%2C0l1.37.8A3.72%2C3.72%2C0%2C0%2C1%2C290.69%2C192.86Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20d%3D%22M284.7%2C213.38c0%2C.49%2C0%2C1%2C0%2C1.63v3.69c0%2C.6%2C0%2C1.15%2C0%2C1.66a32.22%2C32.22%2C0%2C0%2C1-.45%2C4.47%2C17.87%2C17.87%2C0%2C0%2C1-1.17%2C4%2C13.73%2C13.73%2C0%2C0%2C1-2.08%2C3.43%2C11.53%2C11.53%2C0%2C0%2C1-3.15%2C2.62%2C5.93%2C5.93%2C0%2C0%2C1-3.15%2C1%2C2.79%2C2.79%2C0%2C0%2C1-2.08-1%2C6.37%2C6.37%2C0%2C0%2C1-1.17-2.7%2C22.3%2C22.3%2C0%2C0%2C1-.45-4c0-1-.05-2.09-.05-3.36s0-2.4.05-3.42a33.28%2C33.28%2C0%2C0%2C1%2C.45-4.51%2C18.91%2C18.91%2C0%2C0%2C1%2C1.17-4.1%2C14.4%2C14.4%2C0%2C0%2C1%2C2.08-3.49%2C11.25%2C11.25%2C0%2C0%2C1%2C3.15-2.67%2C6.1%2C6.1%2C0%2C0%2C1%2C3.15-1%2C2.74%2C2.74%2C0%2C0%2C1%2C2.08%2C1%2C6.09%2C6.09%2C0%2C0%2C1%2C1.17%2C2.69A22.41%2C22.41%2C0%2C0%2C1%2C284.7%2C213.38Zm-10.26%2C12.7a8%2C8%2C0%2C0%2C0%2C.88%2C3.87c.5.74%2C1.34.77%2C2.53.08a5.72%2C5.72%2C0%2C0%2C0%2C2.54-3%2C15.67%2C15.67%2C0%2C0%2C0%2C.87-4.87c0-1%2C.05-2.12.05-3.33s0-2.29-.05-3.26a7.89%2C7.89%2C0%2C0%2C0-.87-3.86c-.51-.74-1.35-.77-2.54-.09a5.7%2C5.7%2C0%2C0%2C0-2.53%2C3%2C16%2C16%2C0%2C0%2C0-.88%2C4.88c0%2C1-.05%2C2.12-.05%2C3.32S274.41%2C225.11%2C274.44%2C226.08Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--speach-bubble--inject-87%22%3E%3Cpath%20d%3D%22M324.9%2C173.62a3.75%2C3.75%2C0%2C0%2C0-1.68-2.92l-1.37-.79a3.77%2C3.77%2C0%2C0%2C0-3.37%2C0l-21%2C12.15a3.72%2C3.72%2C0%2C0%2C0-1.68%2C2.92v39.14a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.91l1.37.79a3.71%2C3.71%2C0%2C0%2C0%2C3.37%2C0l21-12.15a3.72%2C3.72%2C0%2C0%2C0%2C1.68-2.91Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M295.79%2C224.12a3.72%2C3.72%2C0%2C0%2C0%2C1.68%2C2.91l1.37.79a3.75%2C3.75%2C0%2C0%2C0%2C3.08.14c-.79.3-1.4-.15-1.4-1.11V187.71a3.4%2C3.4%2C0%2C0%2C1%2C.5-1.66l-4.74-2.73a3.49%2C3.49%2C0%2C0%2C0-.49%2C1.66Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M324.84%2C173.14c-.19-.71-.84-.94-1.62-.5l-21%2C12.16a3.34%2C3.34%2C0%2C0%2C0-1.19%2C1.25l-4.73-2.73a3.32%2C3.32%2C0%2C0%2C1%2C1.18-1.25l21-12.16a3.75%2C3.75%2C0%2C0%2C1%2C3.36%2C0l1.38.8A3.67%2C3.67%2C0%2C0%2C1%2C324.84%2C173.14Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20d%3D%22M206.5%2C256.14l10-5.79a2.35%2C2.35%2C0%2C0%2C1%2C2.16%2C0l1.9%2C1.1a2.37%2C2.37%2C0%2C0%2C1%2C1.08%2C1.87v2.19a2.4%2C2.4%2C0%2C0%2C1-1.08%2C1.88l-10%2C5.78a2.37%2C2.37%2C0%2C0%2C1-2.17%2C0l-1.89-1.09a2.41%2C2.41%2C0%2C0%2C1-1.09-1.88V258A2.38%2C2.38%2C0%2C0%2C1%2C206.5%2C256.14Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M210.23%2C263.3a2.31%2C2.31%2C0%2C0%2C1-1.83-.13l-1.9-1.09a2.4%2C2.4%2C0%2C0%2C1-1.08-1.88V258a2.27%2C2.27%2C0%2C0%2C1%2C.31-1.07l4.06%2C2.35a2.26%2C2.26%2C0%2C0%2C0-.31%2C1.06v2.2C209.48%2C263.11%2C209.79%2C263.39%2C210.23%2C263.3Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M209.48%2C262.55v-2.19a2.4%2C2.4%2C0%2C0%2C1%2C1.08-1.88l10-5.79c.6-.34%2C1.08-.06%2C1.08.63v2.19a2.4%2C2.4%2C0%2C0%2C1-1.08%2C1.88l-10%2C5.78C210%2C263.52%2C209.48%2C263.24%2C209.48%2C262.55Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--Character--inject-87%22%3E%3Cg%20id%3D%22freepik--character--inject-87%22%3E%3Cpath%20id%3D%22freepik--shadow--inject-87%22%20d%3D%22M435.9%2C298.69a12.82%2C12.82%2C0%2C0%2C0-5.32-6.82L400%2C274.21a31.09%2C31.09%2C0%2C0%2C0-5.7-.37c-6.73.21-13.15%2C2.82-19.18%2C5.81-13.69%2C6.81-27.68%2C11.65-40.29%2C20.42-1.6%2C1.12-6%2C3.79-3.48%2C6.53a8.12%2C8.12%2C0%2C0%2C0%2C5.43%2C2.06c4-.31%2C11.9-6.68%2C10.65-4.8a6.84%2C6.84%2C0%2C0%2C0-1.07%2C3.62%2C2.63%2C2.63%2C0%2C0%2C0%2C1.51%2C2.39c1.1.37%2C1.58-1.88%2C2.06-3.15a11.8%2C11.8%2C0%2C0%2C1%2C4.57-5.69%2C15.74%2C15.74%2C0%2C0%2C1%2C10.94-1.91%2C47.11%2C47.11%2C0%2C0%2C1%2C10.78%2C3.48c5.74%2C2.38%2C9.6%2C3.7%2C15.05%2C6.67%2C2.52%2C1.37%2C9.59%2C5.78%2C10%2C6.26.61.73.48%2C5.89.55%2C6.83l.36%2C5.27%2C28.42-16.41a12.62%2C12.62%2C0%2C0%2C0%2C4.85-5.62c0-.23.08-.47.11-.7A31.5%2C31.5%2C0%2C0%2C0%2C435.9%2C298.69Z%22%20style%3D%22opacity%3A0.15%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M414.33%2C332.12c-.8.67-1.72%2C1.46-1.73%2C2.41a9.62%2C9.62%2C0%2C0%2C0%2C2%2C5.65c1.75%2C2.37%2C2.6%2C6.6%2C2.66%2C9.42s-.46%2C9.93%2C2.76%2C13.1%2C11.6%2C5.51%2C12.17.35-7.45-26.16-7.45-26.16Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M418.7%2C336a77.21%2C77.21%2C0%2C0%2C1%2C2.23%2C11.48c.42%2C4.24%2C1.32%2C7.3%2C3.31%2C8.65s5.17%2C1.49%2C4.3-1.46-3.83-17.74-3.83-17.74Z%22%20style%3D%22fill%3A%239a4a4d%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M399.14%2C262.38s15.95%2C9.54%2C23.64%2C14.82%2C15%2C10.43%2C16.22%2C14.14c1.3%2C3.93-.11%2C12.78-1.95%2C21.24s-5.39%2C23.64-5.39%2C23.64l-20-38.48-22.29-18.52Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M409%2C294.89l-19.94-13.61%2C10.09-18.9s14.78%2C8.5%2C25.69%2C15.8c8.84%2C5.91%2C15.16%2C10.51%2C15.21%2C14.37s-1.42%2C17.12-3.63%2C22.62c0%2C0-8.72%2C2.86-16.36-.53Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M409%2C294.89l-19.94-13.61%2C10.09-18.9s14.78%2C8.5%2C25.69%2C15.8c8.84%2C5.91%2C15.16%2C10.51%2C15.21%2C14.37s-1.42%2C17.12-3.63%2C22.62c0%2C0-8.72%2C2.86-16.36-.53Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.6000000000000001%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M426.47%2C302.8c-1.76-5.75-6.94-9.27-11.44-12.78-3.57-2.8-12.17-9.08-15.68-11.67a9.31%2C9.31%2C0%2C0%2C0%2C.61-5.58c-1.88%2C4.93-3.16%2C6.08-3.16%2C6.08l22.39%2C20.89%2C13.54%2C32.05S428.23%2C308.54%2C426.47%2C302.8Z%22%20style%3D%22opacity%3A0.15%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M430.75%2C363.28c-.74.38-.83%2C2.11-.9%2C3.37s-1.16%2C2.8.45%2C4.94%2C4.66%2C2.64%2C6.85%2C5.55%2C5.47%2C8.21%2C12.26%2C9.31%2C11.81-1.37%2C13-3.43-.06-3.91-4.48-6.15c-4.69-2.39-6-3.1-6-3.1Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M437.31%2C349.11s3.69%2C8.83%2C5.86%2C12.86a47.51%2C47.51%2C0%2C0%2C0%2C9.12%2C11.26c.79.76%2C2.56%2C2.14%2C3.21%2C2.75a1.29%2C1.29%2C0%2C0%2C1%2C.05%2C2c-1.32%2C1.53-7.47%2C2.45-11.18.18s-7.57-6.88-9.84-8.77l-3-2.53a2.81%2C2.81%2C0%2C0%2C1-.95-2.6c0-.27.1-.6.15-1%2C.29-2-3.12-10-3.12-10Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M361.41%2C267c-.92%2C5.48-2.66%2C11.07.62%2C17.79%2C3.17%2C6.5%2C12.24%2C11.81%2C22.17%2C16.41%2C8.22%2C3.81%2C20.32%2C9.28%2C22.75%2C10.09s2.8%2C2.2%2C2.89%2C6.67%2C2.32%2C11.6%2C8.12%2C20.23a214.64%2C214.64%2C0%2C0%2C1%2C11.52%2C19.84s7%2C.77%2C10.14-3.58c0%2C0-14.36-47.87-16.89-53.49s-26.14-22.32-26.14-22.32a31.13%2C31.13%2C0%2C0%2C0%2C2.55-16.28Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M399.87%2C309.15s-18-7.58-28.74-14.28c-14.79-9.18-12-18-10.5-27.49l38.51-5c2.27%2C10.32-2.14%2C16.37-2.14%2C16.37l13.75%2C10.38c7.16%2C5.51%2C12%2C8.6%2C13.45%2C13.15s6.11%2C21.7%2C6.11%2C21.7a27.68%2C27.68%2C0%2C0%2C1-17%2C6.09s-3.35-5.43-3.89-9.38.33-7.07-1.29-7.93S404.37%2C311.11%2C399.87%2C309.15Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M399.87%2C309.15s-18-7.58-28.74-14.28c-14.79-9.18-12-18-10.5-27.49l38.51-5c2.27%2C10.32-2.14%2C16.37-2.14%2C16.37l13.75%2C10.38c7.16%2C5.51%2C12%2C8.6%2C13.45%2C13.15s6.11%2C21.7%2C6.11%2C21.7a27.68%2C27.68%2C0%2C0%2C1-17%2C6.09s-3.35-5.43-3.89-9.38.33-7.07-1.29-7.93S404.37%2C311.11%2C399.87%2C309.15Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.6000000000000001%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M385.49%2C212.51a43.09%2C43.09%2C0%2C0%2C1%2C8.49%2C0%2C15.37%2C15.37%2C0%2C0%2C1%2C5.81%2C2.36C404.5%2C218%2C415.5%2C227%2C422.34%2C232.15c0%2C0%2C5.76-2.89%2C9.66-5.27%2C3.49-2.13%2C5.33%2C12-1%2C15.94-6.92%2C4.31-7.83%2C4.3-12.83%2C1.75-5.26-2.68-15.76-9.38-20.09-12.1Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M422.34%2C232.15c-2.33%2C1.41-3.69%2C5.58-3.69%2C5.58s-.41-4.42%2C2.82-6.24Z%22%20style%3D%22fill%3A%239a4a4d%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M444.84%2C216.55h0l-1-.7h0a1.07%2C1.07%2C0%2C0%2C0-1%2C0l-9.92%2C4a3.78%2C3.78%2C0%2C0%2C0-2.05%2C2.42L426%2C244.39a1%2C1%2C0%2C0%2C0%2C.26%2C1.07h0l1.07.73h0a1.08%2C1.08%2C0%2C0%2C0%2C1%2C0l9.92-4a3.81%2C3.81%2C0%2C0%2C0%2C2.05-2.42c1-4.35%2C3.94-17.78%2C4.91-22.13A1%2C1%2C0%2C0%2C0%2C444.84%2C216.55Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M432.91%2C221.27a3.68%2C3.68%2C0%2C0%2C0-1%2C1.7L427%2C245.09a1%2C1%2C0%2C0%2C0%2C.22%2C1.06l-1-.68h0a1%2C1%2C0%2C0%2C1-.26-1.07l4.9-22.13a3.72%2C3.72%2C0%2C0%2C1%2C.92-1.61Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M427%2C245.1%2C431.9%2C223a3.82%2C3.82%2C0%2C0%2C1%2C2.06-2.42l9.92-4c.92-.37%2C1.49.12%2C1.28%2C1.09-1%2C4.35-3.94%2C17.78-4.91%2C22.13a3.81%2C3.81%2C0%2C0%2C1-2.05%2C2.42l-9.92%2C4C427.36%2C246.55%2C426.79%2C246.06%2C427%2C245.1Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M444.05%2C222.64c2-.71%2C3.35%2C1.36%2C3.44%2C5.15s-1.68%2C10.93-7.62%2C9.55c-2.31-.53-4.18-4.2-1.92-6a39%2C39%2C0%2C0%2C0%2C5.24-4.8Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M401.77%2C263.88%2C397.13%2C259l-1.95-5.19-1-9.61c5.36-3.47%2C7.32-10%2C5.2-15.07a33.52%2C33.52%2C0%2C0%2C0-6-9.41c-4.2-4.85-6.3-6.47-7.9-7.25-2.2-.18-3.84-.15-3.84-.15s-9.15.73-12.95%2C1.27a64.19%2C64.19%2C0%2C0%2C0-6.62%2C1.28c2.88%2C4.05%2C4.34%2C11.3%2C2.27%2C17.48a10.22%2C10.22%2C0%2C0%2C1-7.27%2C7.1s.59%2C9.22.93%2C13.84c.55%2C7.33.35%2C13.33%2C1.2%2C23.69%2C8.6%2C3.17%2C22.4.9%2C32.07-4.21C400.79%2C267.79%2C401.77%2C263.88%2C401.77%2C263.88Z%22%20style%3D%22fill%3A%2337474f%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M386%2C244.37a15.92%2C15.92%2C0%2C0%2C1-18.13-.63%2C10.89%2C10.89%2C0%2C0%2C0%2C8.9%2C5.57C384.46%2C249.59%2C386%2C244.37%2C386%2C244.37Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M386.13%2C169.17a4.87%2C4.87%2C0%2C0%2C1-1.55-.21%2C28.2%2C28.2%2C0%2C0%2C0-6.1-1.29A22%2C22%2C0%2C0%2C0%2C368.16%2C169a19.31%2C19.31%2C0%2C0%2C0-11.46%2C12.8c-1.78%2C6.62.52%2C12.8%2C4.32%2C17.71%2C2%2C2.57%2C5.64%2C5.07%2C7.09%2C6.08l1.37-1.5a15.38%2C15.38%2C0%2C0%2C0%2C7.53%2C1.63c2.52-.07%2C5%2C.26%2C7.41-.78a10.05%2C10.05%2C0%2C0%2C0%2C5.67-6.32%2C12.51%2C12.51%2C0%2C0%2C1%2C.88-2.76%2C9.73%2C9.73%2C0%2C0%2C1%2C2.24-2.29%2C16.76%2C16.76%2C0%2C0%2C0%2C5.52-10.23%2C6.24%2C6.24%2C0%2C0%2C0-.3-3.51%2C2.91%2C2.91%2C0%2C0%2C0-2.81-1.81%2C12.61%2C12.61%2C0%2C0%2C0%2C1.56-4.11%2C4.33%2C4.33%2C0%2C0%2C0-1.38-4%2C6.05%2C6.05%2C0%2C0%2C0-3.63-.91h-.31c-1.28%2C0-2.57%2C0-3.85%2C0C387.37%2C169.09%2C386.75%2C169.16%2C386.13%2C169.17Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M388.64%2C176.51c2.35%2C1.27%2C5.75%2C5.3%2C5.61%2C17.43-.12%2C10.05-3.33%2C13.26-5%2C14.05s-4.14.67-7.29.27l-.22%2C4.31c7.67%2C5.56%2C9.59%2C12.33%2C2.5%2C11.66-9-.85-16-8.7-16-9.5L368%2C201.25a4.32%2C4.32%2C0%2C0%2C1-5.06-1c-2.3-2.65-3-6.58-1.09-8.7s5.19-1.37%2C6.77.79c0%2C0%2C4.16-.1%2C10.67-4S387.28%2C181.29%2C388.64%2C176.51Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M368.66%2C192.3l-.07%2C4.85h0a3.45%2C3.45%2C0%2C0%2C0%2C3.5-3.4l.08-5.8Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M393%2C187.21l-3-1.14a1.53%2C1.53%2C0%2C0%2C1%2C2-.95A1.67%2C1.67%2C0%2C0%2C1%2C393%2C187.21Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M381.35%2C200.3l4.51.9a2.21%2C2.21%2C0%2C0%2C1-2.62%2C1.84A2.42%2C2.42%2C0%2C0%2C1%2C381.35%2C200.3Z%22%20style%3D%22fill%3A%239a4a4d%22%3E%3C%2Fpath%3E%3Cpolygon%20points%3D%22385.25%20189.42%20385.87%20197.84%20389.97%20196.57%20385.25%20189.42%22%20style%3D%22fill%3A%239a4a4d%22%3E%3C%2Fpolygon%3E%3Cpath%20d%3D%22M382%2C208.26c-3.32-.3-10.2-2-11.36-4.62a7%2C7%2C0%2C0%2C0%2C2.52%2C3.33c2.1%2C1.66%2C8.72%2C3.67%2C8.72%2C3.67Z%22%20style%3D%22fill%3A%239a4a4d%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M381.81%2C192.38a1.38%2C1.38%2C0%2C1%2C1-1.37-1.37A1.37%2C1.37%2C0%2C0%2C1%2C381.81%2C192.38Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Ccircle%20cx%3D%22390.88%22%20cy%3D%22191.3%22%20r%3D%221.37%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fcircle%3E%3Cpath%20d%3D%22M363.52%2C171.67c-4.75%2C3.3-8%2C7.55-8.95%2C18.69-.72%2C8.51%2C1.21%2C14%2C3.28%2C16.24s10.89%2C7.74%2C14.9%2C4.41a5.86%2C5.86%2C0%2C0%2C1-3.48-3.12%2C18.55%2C18.55%2C0%2C0%2C1-1.21-5.77s-4.08.06-5.72-1.73-3.33-9.42-3-13.18C359.77%2C182.8%2C363.52%2C171.67%2C363.52%2C171.67Z%22%20style%3D%22fill%3A%23263238%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M368.66%2C192.3s-.9-7.6%2C2.46-13%2C9.72-10%2C15-10.14c0%2C0-3.72-2.59-10.16-1.62%2C0%2C0-12.39%2C4.5-9.6%2C23A5.85%2C5.85%2C0%2C0%2C1%2C368.66%2C192.3Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M362.08%2C214.91c-5.49%2C1.41-9.89%2C2.83-11.72%2C8.21-1%2C2.8-2.58%2C32.31-2.77%2C37s-.24%2C29.77-.58%2C30.59c-.7%2C1.7-7.73%2C4.72-10.17%2C6.23a19.74%2C19.74%2C0%2C0%2C0-5.72%2C5.35c-1.09%2C1.68%2C2.7%2C4.38%2C6.15%2C4.15%2C2-.14%2C9.36-5.09%2C12-5.33%2C1.7-.15-1.12%2C2.94-1.22%2C5.37-.08%2C1.76%2C1.52%2C2.3%2C1.93%2C1.31.52-1.24%2C4-5.44%2C5-6.72%2C1.48-1.76%2C3.93-5.42%2C3.93-8.89%2C0-4.48.59-14.91%2C2-29.79%2C1.17-12.48%2C2.14-21.86%2C2.14-21.86A37%2C37%2C0%2C0%2C0%2C366%2C227%2C17.67%2C17.67%2C0%2C0%2C0%2C362.08%2C214.91Z%22%20style%3D%22fill%3A%23b16668%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20id%3D%22freepik--speech-bubbles--inject-87%22%3E%3Cg%20id%3D%22freepik--speech-bubble--inject-87%22%3E%3Cg%20id%3D%22freepik--speech-bubble--inject-87%22%3E%3Cpath%20d%3D%22M433.88%2C166.3a.52.52%2C0%2C0%2C1-.22-.22L430.89%2C156v-2.64l8.14-3.18v2.63l-1%2C2.85%2C4.84-2.79.29%2C1.63-2.88%2C14.71a.62.62%2C0%2C0%2C1-.88.33Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M433.88%2C166.3a.52.52%2C0%2C0%2C1-.22-.22L430.89%2C156v-2.64l8.14-3.18v2.63l-1%2C2.85%2C4.84-2.79.29%2C1.63-2.88%2C14.71a.62.62%2C0%2C0%2C1-.88.33Z%22%20style%3D%22opacity%3A0.30000000000000004%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M442.89%2C152.87l.29%2C1.63-2.88%2C14.71a.6.6%2C0%2C0%2C1-1.09.1l-3.13-10.71.36-2Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M460.76%2C98.78a5.83%2C5.83%2C0%2C0%2C0-2.63-4.56h0a5.83%2C5.83%2C0%2C0%2C0-5.27%2C0l-38.28%2C21.87a5.83%2C5.83%2C0%2C0%2C0-2.63%2C4.56v42.88a5.83%2C5.83%2C0%2C0%2C0%2C2.63%2C4.57h0a5.83%2C5.83%2C0%2C0%2C0%2C5.27%2C0l38.52-22c2.37-1.35%2C2.39-2.71%2C2.39-4.39Z%22%20style%3D%22fill%3A%234A9453%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M412%2C163.53a5.83%2C5.83%2C0%2C0%2C0%2C2.63%2C4.57h0a5.9%2C5.9%2C0%2C0%2C0%2C4.82.22c-1.24.47-2.18-.24-2.18-1.75V123.69a5.31%2C5.31%2C0%2C0%2C1%2C.77-2.59l-5.27-3a5.31%2C5.31%2C0%2C0%2C0-.77%2C2.59Z%22%20style%3D%22opacity%3A0.2%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M460.68%2C98c-.31-1.12-1.33-1.47-2.55-.77l-38.28%2C21.87a5.21%2C5.21%2C0%2C0%2C0-1.86%2C2l-5.26-3a5.42%2C5.42%2C0%2C0%2C1%2C1.85-2l38.27-21.87a5.91%2C5.91%2C0%2C0%2C1%2C5.28%2C0h0A5.82%2C5.82%2C0%2C0%2C1%2C460.68%2C98Z%22%20style%3D%22fill%3A%23fff%3Bopacity%3A0.5%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3Cpath%20id%3D%22freepik--Key--inject-87%22%20d%3D%22M427.36%2C129.76a4.51%2C4.51%2C0%2C0%2C1%2C1.7-3.61c.95-.54%2C1.71.19%2C1.71%2C1.64a4.47%2C4.47%2C0%2C0%2C1-1.71%2C3.61C428.12%2C131.94%2C427.36%2C131.21%2C427.36%2C129.76Zm-2.56%2C1.56c0%2C2.84.86%2C4.87%2C2.21%2C5.72l0%2C0%2C.08%2C0%2C.15.09.17.07.17.07.21.06.16%2C0a3%2C3%2C0%2C0%2C0%2C1.12%2C0%2C2.33%2C2.33%2C0%2C0%2C0%2C.36-.08%2C3%2C3%2C0%2C0%2C0%2C.39-.13%2C5.17%2C5.17%2C0%2C0%2C0%2C.72-.34c1.89-1.1%2C3.57-3.47%2C4.63-6.25%2C0-.07.05-.14.07-.21a16.59%2C16.59%2C0%2C0%2C0%2C.6-2l3.18-1.83.63-2.63%2C1.9-1.1%2C1.54%2C1.37%2C1.23-.71%2C1.12-1.91%2C1.95-1.17.74.89%2C2.2-1.28%2C2.24-4.72v-2.47l-16.47%2C9.51a7.32%2C7.32%2C0%2C0%2C0-.58-1.8l-.15-.28c-.11-.19-.22-.36-.34-.53s-.12-.15-.19-.22l-.16-.18-.06%2C0a2.06%2C2.06%2C0%2C0%2C0-.4-.33c-.07-.06-.15-.1-.22-.15l-.1%2C0a3.38%2C3.38%2C0%2C0%2C0-3.36.27c-2.71%2C1.57-5%2C5.76-5.61%2C10A15.6%2C15.6%2C0%2C0%2C0%2C424.8%2C131.32Z%22%20style%3D%22fill%3A%23fafafa%22%3E%3C%2Fpath%3E%3Cg%20id%3D%22freepik--numbers--inject-87%22%3E%3Cpath%20d%3D%22M420.74%2C160a2.9%2C2.9%2C0%2C0%2C1%2C.06-.4l2.37-10.81-2.41%2C1.39c-.12.07-.21%2C0-.26-.05a1.69%2C1.69%2C0%2C0%2C1-.08-.62v-.29a2.62%2C2.62%2C0%2C0%2C1%2C.08-.71.6.6%2C0%2C0%2C1%2C.26-.35l3.88-2.24c.06%2C0%2C.13.11.21.44a3.57%2C3.57%2C0%2C0%2C1%2C.13.92%2C1%2C1%2C0%2C0%2C1%2C0%2C.24L422.44%2C159a.83.83%2C0%2C0%2C1-.21.39%2C2%2C2%2C0%2C0%2C1-.44.33l-.41.24C421%2C160.24%2C420.74%2C160.25%2C420.74%2C160Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M426.46%2C156.72a2.3%2C2.3%2C0%2C0%2C1%2C.07-.4l2.36-10.8-2.41%2C1.39c-.11.07-.2.05-.25-.06a1.44%2C1.44%2C0%2C0%2C1-.08-.61v-.3a2.2%2C2.2%2C0%2C0%2C1%2C.08-.7.62.62%2C0%2C0%2C1%2C.25-.36l3.89-2.24q.09%2C0%2C.21.45a3.93%2C3.93%2C0%2C0%2C1%2C.12.91.9.9%2C0%2C0%2C1%2C0%2C.24l-2.52%2C11.49a.83.83%2C0%2C0%2C1-.21.39%2C1.92%2C1.92%2C0%2C0%2C1-.43.32l-.42.24C426.68%2C156.93%2C426.46%2C156.94%2C426.46%2C156.72Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M432.34%2C153.4c-.38%2C0-.57-.21-.57-.56a2.56%2C2.56%2C0%2C0%2C1%2C.1-.55%2C5.35%2C5.35%2C0%2C0%2C1%2C.25-.74.8.8%2C0%2C0%2C1%2C.26-.42.86.86%2C0%2C0%2C1%2C.24%2C0%2C1.49%2C1.49%2C0%2C0%2C0%2C.48%2C0%2C1.62%2C1.62%2C0%2C0%2C0%2C.61-.22%2C1.71%2C1.71%2C0%2C0%2C0%2C.69-.88%2C3.8%2C3.8%2C0%2C0%2C0%2C.25-1.45%2C2.18%2C2.18%2C0%2C0%2C0-.26-1.29c-.17-.22-.46-.22-.86%2C0l-1.06.61q-.24.14-.33%2C0a.84.84%2C0%2C0%2C1-.09-.49l.22-5.26a1.42%2C1.42%2C0%2C0%2C1%2C.13-.61.79.79%2C0%2C0%2C1%2C.34-.36l3-1.73c.12-.07.21%2C0%2C.26.05a1.69%2C1.69%2C0%2C0%2C1%2C.08.62v.46a1.75%2C1.75%2C0%2C0%2C1-.08.58.57.57%2C0%2C0%2C1-.26.31l-2%2C1.13-.11%2C2.54.17-.09c.81-.47%2C1.43-.53%2C1.86-.19s.64%2C1.22.64%2C2.62A7.5%2C7.5%2C0%2C0%2C1%2C436%2C150a5.89%2C5.89%2C0%2C0%2C1-1%2C1.8%2C4.52%2C4.52%2C0%2C0%2C1-1.25%2C1.1A2.7%2C2.7%2C0%2C0%2C1%2C432.34%2C153.4Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M437.5%2C146.77a1.66%2C1.66%2C0%2C0%2C1-.08-.62V146a2.54%2C2.54%2C0%2C0%2C1%2C.08-.7.53.53%2C0%2C0%2C1%2C.25-.35l1.92-1.11c.11-.07.2-.05.25.06a1.69%2C1.69%2C0%2C0%2C1%2C.08.62v.12a2.54%2C2.54%2C0%2C0%2C1-.08.7.56.56%2C0%2C0%2C1-.25.35l-1.92%2C1.11C437.63%2C146.9%2C437.55%2C146.88%2C437.5%2C146.77Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M441%2C148.09a5.07%2C5.07%2C0%2C0%2C1-.1-.92.69.69%2C0%2C0%2C1%2C0-.28l2.45-6.9a10.11%2C10.11%2C0%2C0%2C0%2C.34-1.14%2C3.84%2C3.84%2C0%2C0%2C0%2C.1-.85c0-.4-.08-.66-.24-.77s-.38-.08-.65.07a2%2C2%2C0%2C0%2C0-.52.45%2C6.48%2C6.48%2C0%2C0%2C0-.49.67%2C1.61%2C1.61%2C0%2C0%2C1-.29.38c-.17.1-.32%2C0-.45-.16a1.19%2C1.19%2C0%2C0%2C1-.2-.66%2C2.5%2C2.5%2C0%2C0%2C1%2C.69-1.56%2C5.64%2C5.64%2C0%2C0%2C1%2C1.52-1.31q1.11-.65%2C1.71-.12a2.55%2C2.55%2C0%2C0%2C1%2C.61%2C1.95%2C8.87%2C8.87%2C0%2C0%2C1-.6%2C3l-1.95%2C5.54%2C2.26-1.31c.13-.07.21%2C0%2C.26.06a1.44%2C1.44%2C0%2C0%2C1%2C.08.61v.3a2.2%2C2.2%2C0%2C0%2C1-.08.7.55.55%2C0%2C0%2C1-.26.36l-4%2C2.32C441.11%2C148.56%2C441%2C148.42%2C441%2C148.09Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M447.28%2C143.54a11.44%2C11.44%2C0%2C0%2C1-.57-4.28%2C17.77%2C17.77%2C0%2C0%2C1%2C.57-4.92%2C4.17%2C4.17%2C0%2C0%2C1%2C1.73-2.6c.77-.45%2C1.35-.24%2C1.73.61a11.36%2C11.36%2C0%2C0%2C1%2C.57%2C4.26%2C17.82%2C17.82%2C0%2C0%2C1-.57%2C4.92%2C4.21%2C4.21%2C0%2C0%2C1-1.73%2C2.61C448.23%2C144.59%2C447.66%2C144.39%2C447.28%2C143.54Zm2.06-1.95a5.89%2C5.89%2C0%2C0%2C0%2C.19-1.34c0-.62.06-1.5.06-2.65s0-2-.06-2.58a3.49%2C3.49%2C0%2C0%2C0-.19-1.12c-.08-.17-.19-.22-.33-.13a.85.85%2C0%2C0%2C0-.34.52%2C7.34%2C7.34%2C0%2C0%2C0-.19%2C1.34c0%2C.62-.06%2C1.51-.06%2C2.65s0%2C2%2C.06%2C2.58a4.18%2C4.18%2C0%2C0%2C0%2C.19%2C1.12c.08.17.2.22.34.14A.9.9%2C0%2C0%2C0%2C449.34%2C141.59Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3Cpath%20d%3D%22M453.61%2C141.34a1.83%2C1.83%2C0%2C0%2C1-.91.06c-.25-.06-.37-.26-.37-.6a2.66%2C2.66%2C0%2C0%2C1%2C.09-.54%2C6.41%2C6.41%2C0%2C0%2C1%2C.21-.7.74.74%2C0%2C0%2C1%2C.25-.39.38.38%2C0%2C0%2C1%2C.24%2C0%2C2%2C2%2C0%2C0%2C0%2C.52.1%2C1.23%2C1.23%2C0%2C0%2C0%2C.57-.19%2C1.9%2C1.9%2C0%2C0%2C0%2C.76-.88%2C3.24%2C3.24%2C0%2C0%2C0%2C.28-1.4%2C1.67%2C1.67%2C0%2C0%2C0-.29-1.16c-.2-.18-.51-.14-.95.11l-.39.22c-.12.07-.21.05-.26-.05a1.69%2C1.69%2C0%2C0%2C1-.08-.62V135a2.54%2C2.54%2C0%2C0%2C1%2C.08-.7.59.59%2C0%2C0%2C1%2C.26-.36l.29-.17a2%2C2%2C0%2C0%2C0%2C.79-.85%2C2.49%2C2.49%2C0%2C0%2C0%2C.29-1.21%2C1.46%2C1.46%2C0%2C0%2C0-.21-.91c-.14-.16-.35-.17-.62%2C0a1.58%2C1.58%2C0%2C0%2C0-.48.39%2C3.9%2C3.9%2C0%2C0%2C0-.34.46%2C1%2C1%2C0%2C0%2C1-.22.28c-.11.07-.23%2C0-.36-.26a1.54%2C1.54%2C0%2C0%2C1-.2-.73%2C2%2C2%2C0%2C0%2C1%2C.59-1.27%2C5.5%2C5.5%2C0%2C0%2C1%2C1.41-1.15c.65-.37%2C1.16-.39%2C1.55-.07a2.44%2C2.44%2C0%2C0%2C1%2C.57%2C1.88%2C5.2%2C5.2%2C0%2C0%2C1-.28%2C1.71%2C4.29%2C4.29%2C0%2C0%2C1-.77%2C1.42v.07a1.08%2C1.08%2C0%2C0%2C1%2C1%2C.63%2C3.73%2C3.73%2C0%2C0%2C1%2C.33%2C1.72%2C7.08%2C7.08%2C0%2C0%2C1-.65%2C3.06%2C4.34%2C4.34%2C0%2C0%2C1-1.7%2C2A5.08%2C5.08%2C0%2C0%2C1%2C453.61%2C141.34Z%22%20style%3D%22fill%3A%23455a64%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E";
@@ -1665,156 +1380,147 @@ var buttonVariants = classVarianceAuthority.cva("inline-flex items-center justif
1665
1380
  function Button(_a) {
1666
1381
  var className = _a.className, variant = _a.variant, size = _a.size, _b = _a.asChild, asChild = _b === void 0 ? false : _b, props = __rest(_a, ["className", "variant", "size", "asChild"]);
1667
1382
  var Comp = asChild ? reactSlot.Slot : "button";
1668
- return (jsxRuntimeExports.jsx(Comp, __assign({ "data-slot": "button", className: cn(buttonVariants({ variant: variant, size: size, className: className })) }, props)));
1383
+ return (jsxRuntime.jsx(Comp, __assign({ "data-slot": "button", className: cn(buttonVariants({ variant: variant, size: size, className: className })) }, props)));
1669
1384
  }
1670
1385
 
1671
1386
  function Dialog(_a) {
1672
1387
  var props = __rest(_a, []);
1673
- return jsxRuntimeExports.jsx(DialogPrimitive__namespace.Root, __assign({ "data-slot": "dialog" }, props));
1388
+ return jsxRuntime.jsx(DialogPrimitive__namespace.Root, __assign({ "data-slot": "dialog" }, props));
1674
1389
  }
1675
1390
  function DialogPortal(_a) {
1676
1391
  var props = __rest(_a, []);
1677
- return jsxRuntimeExports.jsx(DialogPrimitive__namespace.Portal, __assign({ "data-slot": "dialog-portal" }, props));
1392
+ return jsxRuntime.jsx(DialogPrimitive__namespace.Portal, __assign({ "data-slot": "dialog-portal" }, props));
1678
1393
  }
1679
1394
  function DialogOverlay(_a) {
1680
1395
  var className = _a.className, props = __rest(_a, ["className"]);
1681
- return (jsxRuntimeExports.jsx(DialogPrimitive__namespace.Overlay, __assign({ "data-slot": "dialog-overlay", className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className) }, props)));
1396
+ return (jsxRuntime.jsx(DialogPrimitive__namespace.Overlay, __assign({ "data-slot": "dialog-overlay", className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className) }, props)));
1682
1397
  }
1683
1398
  function DialogContent(_a) {
1684
1399
  var className = _a.className, children = _a.children, _b = _a.showCloseButton, showCloseButton = _b === void 0 ? true : _b, props = __rest(_a, ["className", "children", "showCloseButton"]);
1685
- return (jsxRuntimeExports.jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [jsxRuntimeExports.jsx(DialogOverlay, {}), jsxRuntimeExports.jsxs(DialogPrimitive__namespace.Content, __assign({ "data-slot": "dialog-content", className: cn("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className) }, props, { children: [children, showCloseButton && (jsxRuntimeExports.jsxs(DialogPrimitive__namespace.Close, { "data-slot": "dialog-close", className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [jsxRuntimeExports.jsx(lucideReact.XIcon, {}), jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Close" })] }))] }))] }));
1400
+ return (jsxRuntime.jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [jsxRuntime.jsx(DialogOverlay, {}), jsxRuntime.jsxs(DialogPrimitive__namespace.Content, __assign({ "data-slot": "dialog-content", className: cn("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className) }, props, { children: [children, showCloseButton && (jsxRuntime.jsxs(DialogPrimitive__namespace.Close, { "data-slot": "dialog-close", className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [jsxRuntime.jsx(lucideReact.XIcon, {}), jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })] }))] }))] }));
1686
1401
  }
1687
1402
  function DialogHeader(_a) {
1688
1403
  var className = _a.className, props = __rest(_a, ["className"]);
1689
- return (jsxRuntimeExports.jsx("div", __assign({ "data-slot": "dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className) }, props)));
1404
+ return (jsxRuntime.jsx("div", __assign({ "data-slot": "dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className) }, props)));
1690
1405
  }
1691
1406
  function DialogTitle(_a) {
1692
1407
  var className = _a.className, props = __rest(_a, ["className"]);
1693
- return (jsxRuntimeExports.jsx(DialogPrimitive__namespace.Title, __assign({ "data-slot": "dialog-title", className: cn("text-lg leading-none font-semibold", className) }, props)));
1408
+ return (jsxRuntime.jsx(DialogPrimitive__namespace.Title, __assign({ "data-slot": "dialog-title", className: cn("text-lg leading-none font-semibold", className) }, props)));
1694
1409
  }
1695
1410
 
1696
- var a="container_f782f4",i="inner_37f4c9",c="bar_409d0f";const r=({size:r=35,color:l="black",speed:d=1,stroke:o=3.5})=>jsxRuntimeExports.jsx("div",{className:a,style:{"--uib-size":r+"px","--uib-color":l,"--uib-speed":d+"s","--uib-stroke":o+"px"},children:jsxRuntimeExports.jsxs("div",{className:i,children:[jsxRuntimeExports.jsx("div",{className:c}),jsxRuntimeExports.jsx("div",{className:c}),jsxRuntimeExports.jsx("div",{className:c}),jsxRuntimeExports.jsx("div",{className:c})]})});
1697
-
1698
- function styleInject(css, ref) {
1699
- if ( ref === void 0 ) ref = {};
1700
- var insertAt = ref.insertAt;
1701
-
1702
- if (typeof document === 'undefined') { return; }
1703
-
1704
- var head = document.head || document.getElementsByTagName('head')[0];
1705
- var style = document.createElement('style');
1706
- style.type = 'text/css';
1707
-
1708
- if (insertAt === 'top') {
1709
- if (head.firstChild) {
1710
- head.insertBefore(style, head.firstChild);
1711
- } else {
1712
- head.appendChild(style);
1713
- }
1714
- } else {
1715
- head.appendChild(style);
1716
- }
1717
-
1718
- if (style.styleSheet) {
1719
- style.styleSheet.cssText = css;
1720
- } else {
1721
- style.appendChild(document.createTextNode(css));
1722
- }
1723
- }
1724
-
1725
- var css_248z = ".container_f782f4 {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: calc(var(--uib-size) * 0.9);\n width: var(--uib-size);\n}\n\n.inner_37f4c9 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: var(--uib-size);\n height: calc(var(--uib-size) * 0.9);\n}\n\n.bar_409d0f {\n width: var(--uib-stroke);\n height: 100%;\n background-color: var(--uib-color);\n transition: background-color 0.3s ease;\n}\n\n.bar_409d0f:nth-child(1) {\n animation: grow_ca6a4e var(--uib-speed) ease-in-out calc(var(--uib-speed) * -0.45) infinite;\n}\n\n.bar_409d0f:nth-child(2) {\n animation: grow_ca6a4e var(--uib-speed) ease-in-out calc(var(--uib-speed) * -0.3) infinite;\n}\n\n.bar_409d0f:nth-child(3) {\n animation: grow_ca6a4e var(--uib-speed) ease-in-out calc(var(--uib-speed) * -0.15) infinite;\n}\n\n.bar_409d0f:nth-child(4) {\n animation: grow_ca6a4e var(--uib-speed) ease-in-out infinite;\n}\n\n@keyframes grow_ca6a4e {\n 0%, 100% {\n transform: scaleY(0.3);\n }\n 50% {\n transform: scaleY(1);\n }\n}";
1726
- styleInject(css_248z);
1411
+ var a="container_f782f4",i="inner_37f4c9",c="bar_409d0f";const r=({size:r=35,color:l="black",speed:d=1,stroke:o=3.5})=>jsxRuntime.jsx("div",{className:a,style:{"--uib-size":r+"px","--uib-color":l,"--uib-speed":d+"s","--uib-stroke":o+"px"},children:jsxRuntime.jsxs("div",{className:i,children:[jsxRuntime.jsx("div",{className:c}),jsxRuntime.jsx("div",{className:c}),jsxRuntime.jsx("div",{className:c}),jsxRuntime.jsx("div",{className:c})]})});
1727
1412
 
1728
1413
  var LoadingSpinner = function (_a) {
1729
1414
  var loadingText = _a.loadingText;
1730
- return (jsxRuntimeExports.jsxs("div", { className: "flex flex-col justify-center items-center", children: [jsxRuntimeExports.jsx("script", { type: "module", defer: true, src: "https://cdn.jsdelivr.net/npm/ldrs/dist/auto/waveform.js" }), jsxRuntimeExports.jsx(r, { size: "35", stroke: "3.5", speed: "1", color: "green" }), loadingText && (jsxRuntimeExports.jsx("p", { className: "text-center font-semibold mt-3", children: "Loading..." }))] }));
1415
+ return (jsxRuntime.jsxs("div", { className: "flex flex-col justify-center items-center h-full w-full py-10", children: [jsxRuntime.jsx("script", { type: "module", defer: true, src: "https://cdn.jsdelivr.net/npm/ldrs/dist/auto/waveform.js" }), jsxRuntime.jsx(r, { size: "35", stroke: "3.5", speed: "1", color: "green" }), loadingText && (jsxRuntime.jsx("p", { className: "text-center font-semibold mt-3", children: "Loading..." }))] }));
1731
1416
  };
1732
1417
 
1733
1418
  var AuthSuccessAnimation = function (_a) {
1734
1419
  var onComplete = _a.onComplete;
1735
- return (jsxRuntimeExports.jsxs(framerMotion.motion.div, { initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, transition: { duration: 0.5, ease: "easeOut" }, className: "flex flex-col items-center justify-center space-y-6 p-8", onAnimationComplete: onComplete, children: [jsxRuntimeExports.jsx(framerMotion.motion.div, { initial: { scale: 0 }, animate: { scale: 1 }, transition: { delay: 0.2, duration: 0.6, type: "spring", stiffness: 200 }, children: jsxRuntimeExports.jsx(lucideReact.CheckCircle, { className: "w-20 h-20 text-green-500" }) }), jsxRuntimeExports.jsxs(framerMotion.motion.div, { initial: { y: 20, opacity: 0 }, animate: { y: 0, opacity: 1 }, transition: { delay: 0.4, duration: 0.5 }, className: "text-center space-y-2", children: [jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-green-600", children: "Authentication Successful!" }), jsxRuntimeExports.jsx("p", { className: "text-gray-600", children: "Redirecting you to the application..." })] }), jsxRuntimeExports.jsx(framerMotion.motion.div, { initial: { width: 0 }, animate: { width: "100%" }, transition: { delay: 0.8, duration: 2 }, className: "h-1 bg-green-500 rounded-full max-w-xs" })] }));
1736
- };
1737
-
1738
- // Function to parse userAgent and generate a device ID
1739
- var GenerateDeviceId = function () {
1740
- var _a;
1741
- if (typeof window === "undefined" || !window.navigator) {
1742
- return "unknown-device";
1743
- }
1744
- var userAgent = window.navigator.userAgent;
1745
- var deviceId = "";
1746
- // Parse browser, version, OS, and device type
1747
- var browserMatch = Array.from(userAgent.matchAll(/(Chrome|Firefox|Safari|Edge|Opera)\/([\d.]+)/ig));
1748
- var osMatch = Array.from(userAgent.matchAll(/\(([^)]+)\)/g));
1749
- var isMobile = /Mobile|Android|iPhone|iPad/i.test(userAgent);
1750
- // Browser info
1751
- if (browserMatch.length > 0) {
1752
- var _b = browserMatch[0], browserName = _b[1], browserVersion = _b[2];
1753
- var majorVersion = browserVersion.split(".")[0];
1754
- deviceId += "".concat(browserName, "-").concat(majorVersion);
1755
- }
1756
- else {
1757
- deviceId += "UnknownBrowser";
1758
- }
1759
- // OS info
1760
- if (osMatch.length > 0) {
1761
- var osInfo = osMatch[0][1]
1762
- .split(";")[0]
1763
- .trim()
1764
- .replace(/[\s/()]/g, "_");
1765
- deviceId += "_".concat(osInfo);
1766
- }
1767
- else {
1768
- deviceId += "_UnknownOS";
1769
- }
1770
- // Device type
1771
- deviceId += isMobile ? "_Mobile" : "_Desktop";
1772
- // Add a simple hash of userAgent for uniqueness
1773
- var hash = btoa(userAgent).slice(0, 8);
1774
- deviceId += "_".concat(hash);
1775
- return (_a = deviceId.replace(/[^a-zA-Z0-9-_]/g, "_")) !== null && _a !== void 0 ? _a : "unknown-device";
1420
+ return (jsxRuntime.jsxs(framerMotion.motion.div, { initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, transition: { duration: 0.5, ease: "easeOut" }, className: "flex flex-col items-center justify-center space-y-6 p-8", onAnimationComplete: onComplete, children: [jsxRuntime.jsx(framerMotion.motion.div, { initial: { scale: 0 }, animate: { scale: 1 }, transition: { delay: 0.2, duration: 0.6, type: "spring", stiffness: 200 }, children: jsxRuntime.jsx(lucideReact.CheckCircle, { className: "w-20 h-20 text-green-500" }) }), jsxRuntime.jsxs(framerMotion.motion.div, { initial: { y: 20, opacity: 0 }, animate: { y: 0, opacity: 1 }, transition: { delay: 0.4, duration: 0.5 }, className: "text-center space-y-2", children: [jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-green-600", children: "Authentication Successful!" }), jsxRuntime.jsx("p", { className: "text-gray-600", children: "Redirecting you to the application..." })] }), jsxRuntime.jsx(framerMotion.motion.div, { initial: { width: 0 }, animate: { width: "100%" }, transition: { delay: 0.8, duration: 2 }, className: "h-1 bg-green-500 rounded-full max-w-xs" })] }));
1776
1421
  };
1777
1422
 
1778
1423
  var MAX_ATTEMPTS = 3;
1779
1424
  var useOTPHandler = function (_a) {
1780
- var provider = _a.provider, accessToken = _a.accessToken, idToken = _a.idToken, appCode = _a.appCode, authenticationType = _a.authenticationType, MFAEndpoint = _a.MFAEndpoint, onAuthComplete = _a.onAuthComplete;
1425
+ var email = _a.email, appCode = _a.appCode, instCode = _a.instCode, MFAEndpoint = _a.MFAEndpoint, onAuthComplete = _a.onAuthComplete;
1781
1426
  var _b = React.useState(false), loading = _b[0], setLoading = _b[1];
1782
1427
  var _c = React.useState(0), attemptCount = _c[0], setAttemptCount = _c[1];
1783
1428
  var _d = React.useState(false), isMaxAttemptsReached = _d[0], setIsMaxAttemptsReached = _d[1];
1784
- var handleSubmitOTP = React.useMemo(function () { return function (authenticationValue) { return __awaiter(void 0, void 0, void 0, function () {
1785
- var currentAttempt, response, error_1, currentAttempt;
1786
- return __generator(this, function (_a) {
1429
+ var handleSubmitOTP = React.useMemo(function () { return function (authenticationValue) { return __awaiter$1(void 0, void 0, void 0, function () {
1430
+ var currentAttempt, authentication, response, error_1, currentAttempt;
1431
+ return __generator$1(this, function (_a) {
1787
1432
  switch (_a.label) {
1788
1433
  case 0:
1789
- if (isMaxAttemptsReached) {
1790
- onAuthComplete(false, {
1434
+ if (!isMaxAttemptsReached) return [3 /*break*/, 2];
1435
+ return [4 /*yield*/, onAuthComplete(false, {
1791
1436
  message: "Maximum attempts reached",
1792
- });
1793
- return [2 /*return*/, false];
1794
- }
1795
- _a.label = 1;
1437
+ })];
1796
1438
  case 1:
1797
- _a.trys.push([1, 3, 4, 5]);
1439
+ _a.sent();
1440
+ return [2 /*return*/, false];
1441
+ case 2:
1442
+ _a.trys.push([2, 11, 13, 14]);
1798
1443
  setLoading(true);
1799
1444
  currentAttempt = attemptCount + 1;
1800
1445
  setAttemptCount(currentAttempt);
1801
- if (authenticationType === null)
1802
- return [2 /*return*/, false];
1803
- return [4 /*yield*/, axios.post(MFAEndpoint || "/api/auth/verify-mfa", {
1804
- provider: provider,
1805
- accessToken: accessToken,
1806
- idToken: idToken,
1807
- authenticationType: authenticationType,
1808
- MFACode: authenticationValue,
1446
+ authentication = new camsSdk.CAMSMFAAuthenticator();
1447
+ return [4 /*yield*/, authentication.VerifyMFAOTP({
1809
1448
  appCode: appCode,
1810
- }, {
1811
- headers: {
1812
- "X-Device-ID": GenerateDeviceId(),
1813
- },
1814
- timeout: 605000,
1449
+ instCode: instCode,
1450
+ email: email,
1451
+ MFACode: authenticationValue,
1452
+ }, MFAEndpoint || "")];
1453
+ case 3:
1454
+ response = _a.sent();
1455
+ if (!response) return [3 /*break*/, 5];
1456
+ return [4 /*yield*/, onAuthComplete(true, response)];
1457
+ case 4:
1458
+ _a.sent();
1459
+ return [2 /*return*/, true];
1460
+ case 5:
1461
+ if (!(currentAttempt >= MAX_ATTEMPTS)) return [3 /*break*/, 7];
1462
+ setIsMaxAttemptsReached(true);
1463
+ return [4 /*yield*/, onAuthComplete(false, {
1464
+ message: "Maximum Attempts Reached",
1815
1465
  })];
1816
- case 2:
1817
- response = (_a.sent()).data;
1466
+ case 6:
1467
+ _a.sent();
1468
+ return [3 /*break*/, 9];
1469
+ case 7: return [4 /*yield*/, onAuthComplete(false, response)];
1470
+ case 8:
1471
+ _a.sent();
1472
+ _a.label = 9;
1473
+ case 9: return [2 /*return*/, false];
1474
+ case 10: return [3 /*break*/, 14];
1475
+ case 11:
1476
+ error_1 = _a.sent();
1477
+ console.error(error_1);
1478
+ currentAttempt = attemptCount + 1;
1479
+ if (currentAttempt >= MAX_ATTEMPTS) {
1480
+ setIsMaxAttemptsReached(true);
1481
+ }
1482
+ return [4 /*yield*/, onAuthComplete(false, error_1)];
1483
+ case 12:
1484
+ _a.sent();
1485
+ return [2 /*return*/, false];
1486
+ case 13:
1487
+ setLoading(false);
1488
+ return [7 /*endfinally*/];
1489
+ case 14: return [2 /*return*/];
1490
+ }
1491
+ });
1492
+ }); }; }, [onAuthComplete, MFAEndpoint, attemptCount, isMaxAttemptsReached]);
1493
+ var resetAttempts = React.useCallback(function () {
1494
+ setAttemptCount(0);
1495
+ setIsMaxAttemptsReached(false);
1496
+ }, []);
1497
+ return {
1498
+ handleSubmitOTP: handleSubmitOTP,
1499
+ loading: loading,
1500
+ setLoading: setLoading,
1501
+ attemptCount: attemptCount,
1502
+ isMaxAttemptsReached: isMaxAttemptsReached,
1503
+ resetAttempts: resetAttempts,
1504
+ remainingAttempts: MAX_ATTEMPTS - attemptCount,
1505
+ };
1506
+ };
1507
+ var useCredentialsHandler = function (onAuthComplete) {
1508
+ var _a = React.useState(false), loading = _a[0], setLoading = _a[1];
1509
+ var _b = React.useState(0), attemptCount = _b[0], setAttemptCount = _b[1];
1510
+ var _c = React.useState(false), isMaxAttemptsReached = _c[0], setIsMaxAttemptsReached = _c[1];
1511
+ var handleSubmitCredentials = React.useMemo(function () { return function (CredentialsAuthEndpoint, credentials) { return __awaiter$1(void 0, void 0, void 0, function () {
1512
+ var currentAttempt, authenticator, response, error_2, currentAttempt;
1513
+ return __generator$1(this, function (_a) {
1514
+ switch (_a.label) {
1515
+ case 0:
1516
+ _a.trys.push([0, 2, 3, 4]);
1517
+ setLoading(true);
1518
+ currentAttempt = attemptCount + 1;
1519
+ setAttemptCount(currentAttempt);
1520
+ authenticator = new camsSdk.CAMSMFAAuthenticator();
1521
+ return [4 /*yield*/, authenticator.LoginADCredentials(credentials, CredentialsAuthEndpoint)];
1522
+ case 1:
1523
+ response = _a.sent();
1818
1524
  if (response) {
1819
1525
  onAuthComplete(true, response);
1820
1526
  return [2 /*return*/, true];
@@ -1831,147 +1537,90 @@ var useOTPHandler = function (_a) {
1831
1537
  }
1832
1538
  return [2 /*return*/, false];
1833
1539
  }
1834
- case 3:
1835
- error_1 = _a.sent();
1836
- console.error(error_1);
1540
+ case 2:
1541
+ error_2 = _a.sent();
1542
+ console.error(error_2);
1837
1543
  currentAttempt = attemptCount + 1;
1838
1544
  if (currentAttempt >= MAX_ATTEMPTS) {
1839
1545
  setIsMaxAttemptsReached(true);
1840
- onAuthComplete(false, error_1.response.data);
1841
- }
1842
- else {
1843
- onAuthComplete(false, error_1.response.data);
1844
1546
  }
1845
- onAuthComplete(false, error_1.response.data);
1547
+ onAuthComplete(false, error_2.response.data);
1846
1548
  return [2 /*return*/, false];
1847
- case 4:
1549
+ case 3:
1848
1550
  setLoading(false);
1849
1551
  return [7 /*endfinally*/];
1850
- case 5: return [2 /*return*/];
1552
+ case 4: return [2 /*return*/];
1851
1553
  }
1852
1554
  });
1853
- }); }; }, [
1854
- accessToken,
1855
- idToken,
1856
- authenticationType,
1857
- onAuthComplete,
1858
- MFAEndpoint,
1859
- attemptCount,
1860
- isMaxAttemptsReached,
1861
- ]);
1862
- var resetAttempts = React.useCallback(function () {
1863
- setAttemptCount(0);
1864
- setIsMaxAttemptsReached(false);
1865
- }, []);
1555
+ }); }; }, []);
1866
1556
  return {
1867
- handleSubmitOTP: handleSubmitOTP,
1557
+ handleSubmitCredentials: handleSubmitCredentials,
1868
1558
  loading: loading,
1869
1559
  setLoading: setLoading,
1870
1560
  attemptCount: attemptCount,
1871
1561
  isMaxAttemptsReached: isMaxAttemptsReached,
1872
- resetAttempts: resetAttempts,
1562
+ // resetAttempts,
1873
1563
  remainingAttempts: MAX_ATTEMPTS - attemptCount,
1874
1564
  };
1875
1565
  };
1876
1566
 
1877
1567
  var MFAOptions = function (_a) {
1568
+ var _b, _c;
1878
1569
  var onComplete = _a.onComplete, onAuthFailed = _a.onAuthFailed, MFAEndpoints = _a.MFAEndpoints, usePassKey = _a.usePassKey;
1879
- var _b = React.useState(""), value = _b[0], setValue = _b[1];
1880
- var _c = React.useState(false), otpVisible = _c[0], setOtpVisible = _c[1];
1881
- var _d = React.useState(false), showSuccessAnimation = _d[0], setShowSuccessAnimation = _d[1];
1882
- var _e = React.useState(null), authType = _e[0], setAuthType = _e[1];
1570
+ var _d = React.useState(""), value = _d[0], setValue = _d[1];
1571
+ var _e = React.useState(false), otpVisible = _e[0], setOtpVisible = _e[1];
1572
+ var _f = React.useState(false), showSuccessAnimation = _f[0], setShowSuccessAnimation = _f[1];
1573
+ var _g = React.useState(null), authType = _g[0], setAuthType = _g[1];
1883
1574
  var context = useCAMSContext();
1884
- var _f = context.authMode === "MSAL" && "sendEmailOTP" in context
1575
+ var _h = context.authMode === "MSAL" && "EmailOTP" in context
1885
1576
  ? context
1886
- : { sendEmailOTP: null, completeMFA: null, logout: function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
1577
+ : { completeMFA: null, logout: function () { return __awaiter$1(void 0, void 0, void 0, function () { return __generator$1(this, function (_a) {
1887
1578
  return [2 /*return*/];
1888
- }); }); } }, sendEmailOTP = _f.sendEmailOTP, completeMFA = _f.completeMFA, logout = _f.logout;
1889
- var accessToken = context.authMode === "MSAL" ? context.accessToken : "";
1890
- var idToken = context.authMode === "MSAL" ? context.idToken : "";
1579
+ }); }); } }, completeMFA = _h.completeMFA, logout = _h.logout;
1891
1580
  var authenticate = useWebAuthn().authenticate;
1892
- var handleFIDOLogin = function () { return __awaiter(void 0, void 0, void 0, function () {
1893
- var options, assertionResponse, error_1;
1894
- var _a, _b, _c, _d, _e, _f;
1895
- return __generator(this, function (_g) {
1896
- switch (_g.label) {
1897
- case 0:
1898
- _g.trys.push([0, 4, , 5]);
1899
- // 1. Fetch authentication challenge from your server
1900
- console.log("Requesting authentication challenge from server...");
1901
- return [4 /*yield*/, axios.post(MFAEndpoints.RetrieveAuthChallenge, {}, {
1902
- headers: {
1903
- "X-DEVICE-ID": GenerateDeviceId(),
1904
- "X-API-VERSION": "1.0",
1905
- },
1906
- })];
1907
- case 1:
1908
- options = (_g.sent()).data;
1909
- console.log("Received challenge:", options);
1910
- // 2. Call the SDK to trigger the browser's passkey authentication UI
1911
- console.log("Calling SDK authenticate function...");
1912
- return [4 /*yield*/, authenticate(__assign(__assign({}, options), { pubKeyCredParams: (_a = options.pubKeyCredParams) === null || _a === void 0 ? void 0 : _a.map(function (param) { return ({
1913
- type: "public-key",
1914
- alg: param.alg
1915
- }); }), attestation: ((_b = options.attestation) === null || _b === void 0 ? void 0 : _b.toLowerCase()) || "none", authenticatorSelection: __assign(__assign({}, options.authenticatorSelection), { residentKey: ((_d = (_c = options.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.residentKey) === null || _d === void 0 ? void 0 : _d.toLowerCase()) || "discouraged", userVerification: ((_f = (_e = options.authenticatorSelection) === null || _e === void 0 ? void 0 : _e.userVerification) === null || _f === void 0 ? void 0 : _f.toLowerCase()) || "preferred" }) }))];
1916
- case 2:
1917
- assertionResponse = _g.sent();
1918
- console.log("Authentication assertion received from client:", assertionResponse);
1919
- // 3. Send the assertion back to the server for verification
1920
- console.log("Sending assertion to server for verification...");
1921
- return [4 /*yield*/, axios.post(MFAEndpoints.AuthChallengeVerify, assertionResponse, {
1922
- headers: {
1923
- "X-DEVICE-ID": GenerateDeviceId(),
1924
- "X-API-VERSION": "1.0",
1925
- },
1926
- withCredentials: true, // credentials: 'include'
1927
- })];
1928
- case 3:
1929
- _g.sent();
1930
- sonner.toast.success("🔑 Sign-in successful!");
1931
- return [3 /*break*/, 5];
1932
- case 4:
1933
- error_1 = _g.sent();
1934
- console.error("Authentication failed:", error_1);
1935
- sonner.toast.error("❌ Could not sign in.");
1936
- return [3 /*break*/, 5];
1937
- case 5: return [2 /*return*/];
1938
- }
1939
- });
1940
- }); };
1941
- var _g = useOTPHandler({
1942
- accessToken: accessToken || "",
1943
- idToken: idToken || "",
1944
- provider: "MSAL",
1581
+ var authenticator = new camsSdk.CAMSMFAAuthenticator();
1582
+ var _j = useOTPHandler({
1583
+ email: ((_c = (_b = context.user) === null || _b === void 0 ? void 0 : _b.profile) === null || _c === void 0 ? void 0 : _c.email) || context.email,
1945
1584
  appCode: context.appCode || "",
1946
- authenticationType: authType,
1947
- MFAEndpoint: MFAEndpoints.ValidateMFA,
1948
- onAuthComplete: function (state, data) {
1949
- console.log("Completed Auth. Handling MFA", state);
1950
- if (state) {
1951
- // Call completeMFA to update context state
1952
- if (completeMFA && data) {
1953
- console.log("IN Complete MFA Block. Handling MFA", data);
1954
- completeMFA(data).catch(function (error) {
1955
- console.error("Failed to complete MFA:", error);
1956
- });
1957
- }
1958
- setShowSuccessAnimation(true);
1959
- sonner.toast.success(jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-green-600 bg-green-50 p-3 rounded-lg", children: [jsxRuntimeExports.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4" }), jsxRuntimeExports.jsxs("span", { children: ["Multi-Factor Authentication Successful. ", data === null || data === void 0 ? void 0 : data.message] })] }));
1960
- setTimeout(function () { return onComplete === null || onComplete === void 0 ? void 0 : onComplete(true); }, 2000);
1961
- }
1962
- else {
1963
- sonner.toast.error(jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-red-600 bg-red-50 p-3 rounded-lg", children: [jsxRuntimeExports.jsx(lucideReact.ShieldClose, { className: "w-4 h-4" }), jsxRuntimeExports.jsx("span", { children: (data === null || data === void 0 ? void 0 : data.message) || "Unable to Validate User. Please try again." })] }));
1964
- if (isMaxAttemptsReached) {
1965
- setTimeout(function () {
1966
- logout().then(function () {
1967
- onAuthFailed === null || onAuthFailed === void 0 ? void 0 : onAuthFailed();
1968
- onComplete === null || onComplete === void 0 ? void 0 : onComplete(false);
1585
+ MFAEndpoint: MFAEndpoints.ValidateUserMFA,
1586
+ onAuthComplete: function (state, data) { return __awaiter$1(void 0, void 0, void 0, function () {
1587
+ return __generator$1(this, function (_a) {
1588
+ switch (_a.label) {
1589
+ case 0:
1590
+ console.log("Completed Auth. Handling MFA", state, data);
1591
+ if (!(state && (data === null || data === void 0 ? void 0 : data.isValid))) return [3 /*break*/, 2];
1592
+ // Call completeMFA to update context state
1593
+ console.log("IN Complete MFA Block. Handling MFA", data);
1594
+ return [4 /*yield*/, (completeMFA === null || completeMFA === void 0 ? void 0 : completeMFA(data))];
1595
+ case 1:
1596
+ _a.sent();
1597
+ context.setUserProfile({
1598
+ state: "AUTH_SUCCESS",
1599
+ message: (data === null || data === void 0 ? void 0 : data.message) || "Authentication Successful",
1600
+ role: data.userInfo.role,
1601
+ profile: __assign(__assign({}, data.userInfo), { tokens: __assign({}, data.tokens) }),
1969
1602
  });
1970
- }, 3000);
1603
+ sonner.toast.success(jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-green-600 bg-green-50 p-3 rounded-lg", children: [jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4" }), jsxRuntime.jsxs("span", { children: ["Multi-Factor Authentication Successful. ", data === null || data === void 0 ? void 0 : data.message] })] }));
1604
+ setShowSuccessAnimation(true);
1605
+ return [3 /*break*/, 3];
1606
+ case 2:
1607
+ sonner.toast.error(jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-red-600 bg-red-50 p-3 rounded-lg", children: [jsxRuntime.jsx(lucideReact.ShieldClose, { className: "w-4 h-4" }), jsxRuntime.jsx("span", { children: (data === null || data === void 0 ? void 0 : data.message) || "Unable to Validate User. Please try again." })] }));
1608
+ if (isMaxAttemptsReached) {
1609
+ setTimeout(function () {
1610
+ logout().then(function () {
1611
+ onAuthFailed === null || onAuthFailed === void 0 ? void 0 : onAuthFailed();
1612
+ onComplete === null || onComplete === void 0 ? void 0 : onComplete(false);
1613
+ });
1614
+ }, 3000);
1615
+ }
1616
+ _a.label = 3;
1617
+ case 3: return [2 /*return*/];
1971
1618
  }
1972
- }
1973
- },
1974
- }), handleSubmitOTP = _g.handleSubmitOTP, loading = _g.loading, setLoading = _g.setLoading, attemptCount = _g.attemptCount, remainingAttempts = _g.remainingAttempts, isMaxAttemptsReached = _g.isMaxAttemptsReached, resetAttempts = _g.resetAttempts;
1619
+ });
1620
+ }); },
1621
+ }), handleSubmitOTP = _j.handleSubmitOTP, loading = _j.loading,
1622
+ // setLoading,
1623
+ attemptCount = _j.attemptCount, remainingAttempts = _j.remainingAttempts, isMaxAttemptsReached = _j.isMaxAttemptsReached, resetAttempts = _j.resetAttempts;
1975
1624
  var handleGoBack = function () {
1976
1625
  setAuthType(null);
1977
1626
  setOtpVisible(false);
@@ -1980,56 +1629,34 @@ var MFAOptions = function (_a) {
1980
1629
  };
1981
1630
  // Show success animation if authentication is successful
1982
1631
  if (showSuccessAnimation) {
1983
- return (jsxRuntimeExports.jsx("div", { className: "flex justify-center items-center h-dvh", children: jsxRuntimeExports.jsx(Card, { className: "mx-auto space-y-6 p-6 bg-white rounded-lg shadow-md", children: jsxRuntimeExports.jsx(AuthSuccessAnimation, { onComplete: function () {
1984
- // Animation completed, can add additional logic here if needed
1985
- } }) }) }));
1632
+ return (jsxRuntime.jsx("div", { className: "flex justify-center items-center h-dvh", children: jsxRuntime.jsx(Card, { className: "mx-auto space-y-6 p-6 bg-white rounded-lg shadow-md", children: jsxRuntime.jsx(AuthSuccessAnimation, { onComplete: function () { return onComplete(true); } }) }) }));
1986
1633
  }
1987
- var content = jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {});
1634
+ var content = jsxRuntime.jsx(jsxRuntime.Fragment, {});
1988
1635
  if (!authType) {
1989
- content = (jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-600 text-center mb-6", children: "Choose your preferred authentication method:" }), jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [jsxRuntimeExports.jsxs(Button, { variant: "outline", className: "w-full flex items-center justify-start gap-3 p-4 h-auto border-2 hover:border-[#506f4a] hover:bg-[#506f4a]/5 transition-all", onClick: function () { return __awaiter(void 0, void 0, void 0, function () {
1990
- var success;
1991
- return __generator(this, function (_a) {
1992
- switch (_a.label) {
1993
- case 0:
1994
- resetAttempts();
1995
- setAuthType("EmailOTP");
1996
- setOtpVisible(true);
1997
- if (!sendEmailOTP) return [3 /*break*/, 2];
1998
- setLoading(true);
1999
- return [4 /*yield*/, sendEmailOTP()];
2000
- case 1:
2001
- success = _a.sent();
2002
- setLoading(false);
2003
- if (success) {
2004
- sonner.toast.success(jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-green-600 bg-green-50 p-3 rounded-lg", children: [jsxRuntimeExports.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4" }), jsxRuntimeExports.jsx("span", { children: "OTP sent to your email address" })] }));
2005
- }
2006
- _a.label = 2;
2007
- case 2: return [2 /*return*/];
2008
- }
2009
- });
2010
- }); }, children: [jsxRuntimeExports.jsx(lucideReact.Mail, { className: "w-5 h-5" }), jsxRuntimeExports.jsxs("div", { className: "text-left", children: [jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Email OTP" }), jsxRuntimeExports.jsx("div", { className: "text-sm text-gray-500", children: "Send code to your email" })] })] }), jsxRuntimeExports.jsxs(Button, { variant: "outline", className: "w-full flex items-center justify-start gap-3 p-4 h-auto border-2 hover:border-[#506f4a] hover:bg-[#506f4a]/5 transition-all", onClick: function () {
2011
- resetAttempts();
1636
+ content = (jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx("p", { className: "text-sm text-gray-600 text-center mb-6", children: "Choose your preferred authentication method:" }), jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [jsxRuntime.jsxs(Button, { variant: "outline", className: "w-full flex items-center justify-start gap-3 p-4 h-auto border-2 hover:border-[#506f4a] hover:bg-[#506f4a]/5 transition-all", onClick: function () {
2012
1637
  setAuthType("AuthenticatorCode");
2013
1638
  setOtpVisible(true);
2014
- }, children: [jsxRuntimeExports.jsx("img", { src: MicrosoftAuthenticatorImg, alt: "Authenticator", className: "rounded-full", width: 24, height: 24, onError: function () { return jsxRuntimeExports.jsx(lucideReact.Shield, {}); } }), jsxRuntimeExports.jsxs("div", { className: "text-left", children: [jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Authenticator App" }), jsxRuntimeExports.jsx("div", { className: "text-sm text-gray-500", children: "Use Authenticator App" })] })] }), usePassKey && (jsxRuntimeExports.jsxs(Button, { variant: "outline", className: "w-full flex items-center justify-start gap-3 p-4 h-auto border-2 hover:border-[#506f4a] hover:bg-[#506f4a]/5 transition-all",
1639
+ }, children: [jsxRuntime.jsx("img", { src: MicrosoftAuthenticatorImg, alt: "Authenticator", className: "rounded-full", width: 24, height: 24, onError: function () { return jsxRuntime.jsx(lucideReact.Shield, {}); } }), jsxRuntime.jsxs("div", { className: "text-left", children: [jsxRuntime.jsx("div", { className: "font-medium", children: "Authenticator App" }), jsxRuntime.jsx("div", { className: "text-sm text-gray-500", children: "Use Authenticator App" })] })] }), usePassKey && (jsxRuntime.jsxs(Button, { variant: "outline", className: "w-full flex items-center justify-start gap-3 p-4 h-auto border-2 hover:border-[#506f4a] hover:bg-[#506f4a]/5 transition-all",
2015
1640
  // onClick={() => {
2016
1641
  // resetAttempts();
2017
1642
  // setAuthType("AuthenticatorCode");
2018
1643
  // setOtpVisible(true);
2019
1644
  // }}
2020
- onClick: handleFIDOLogin, disabled: context.isLoading, children: [jsxRuntimeExports.jsx(Button, { className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", children: jsxRuntimeExports.jsx("span", { children: "Sign In " }) }), jsxRuntimeExports.jsx(lucideReact.KeyIcon, { className: "w-16 h-16 text-[#506f4a]" }), jsxRuntimeExports.jsxs("div", { className: "text-left", children: [jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Continue with Passkey" }), jsxRuntimeExports.jsx("div", { className: "text-sm text-gray-500", children: "Passkey" })] })] }))] })] }));
1645
+ onClick: function () {
1646
+ return authenticator.HandleFIDOLogin(MFAEndpoints.RetrieveAuthChallenge, MFAEndpoints.AuthChallengeVerify, authenticate);
1647
+ }, disabled: context.isLoading, children: [jsxRuntime.jsx(lucideReact.KeyIcon, { className: "text-[#506f4a]", size: 48 }), jsxRuntime.jsxs("div", { className: "text-left", children: [jsxRuntime.jsx("div", { className: "font-medium", children: "Continue with Passkey" }), jsxRuntime.jsx("div", { className: "text-sm text-gray-500", children: "Passkey" })] })] }))] })] }));
2021
1648
  }
2022
1649
  else if (authType === "EmailOTP") {
2023
- content = (jsxRuntimeExports.jsx(Dialog, { open: otpVisible, onOpenChange: function () {
1650
+ content = (jsxRuntime.jsx(Dialog, { open: otpVisible, onOpenChange: function () {
2024
1651
  setAuthType(null);
2025
1652
  setOtpVisible(false);
2026
1653
  setValue("");
2027
- }, children: jsxRuntimeExports.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntimeExports.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntimeExports.jsx(DialogHeader, { className: "w-full", children: jsxRuntimeExports.jsx(DialogTitle, { className: "text-center", children: "Email OTP" }) }), jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [jsxRuntimeExports.jsx(GenericOTPVerifier, { value: value, setValue: setValue, isDisabled: loading || isMaxAttemptsReached, onChangeOTP: function (code) { return handleSubmitOTP(code); }, fieldName: "EmailOTP", attemptCount: attemptCount, remainingAttempts: remainingAttempts, isMaxAttemptsReached: isMaxAttemptsReached }), jsxRuntimeExports.jsx(Button, { variant: "ghost", className: "w-full text-sm", onClick: handleGoBack, children: "\u2190 Choose different method" })] })] }) }));
1654
+ }, children: jsxRuntime.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntime.jsx(DialogHeader, { className: "w-full", children: jsxRuntime.jsx(DialogTitle, { className: "text-center", children: "Email OTP" }) }), jsxRuntime.jsxs("div", { className: "space-y-6", children: [jsxRuntime.jsx(GenericOTPVerifier, { value: value, setValue: setValue, isDisabled: loading || isMaxAttemptsReached, onChangeOTP: function (code) { return handleSubmitOTP(code); }, fieldName: "EmailOTP", attemptCount: attemptCount, remainingAttempts: remainingAttempts, isMaxAttemptsReached: isMaxAttemptsReached }), jsxRuntime.jsx(Button, { variant: "ghost", className: "w-full text-sm", onClick: handleGoBack, children: "\u2190 Choose different method" })] })] }) }));
2028
1655
  }
2029
1656
  else if (authType === "AuthenticatorCode") {
2030
- content = (jsxRuntimeExports.jsx(Dialog, { open: otpVisible, onOpenChange: handleGoBack, children: jsxRuntimeExports.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntimeExports.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntimeExports.jsx(DialogHeader, { className: "w-full", children: jsxRuntimeExports.jsx(DialogTitle, { className: "text-center", children: "Authenticator App" }) }), loading ? (jsxRuntimeExports.jsx("div", { className: "p-3 h-full flex justify-center items-center", children: jsxRuntimeExports.jsx(LoadingSpinner, {}) })) : (jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [jsxRuntimeExports.jsx(CardDescription, { className: "text-sm text-gray-600 text-center", children: "Enter the 6-digit Code from your Authenticator app" }), jsxRuntimeExports.jsx(GenericOTPVerifier, { value: value, setValue: setValue, isDisabled: loading || isMaxAttemptsReached, onChangeOTP: function (code) { return handleSubmitOTP(code); }, fieldName: "AuthenticatorCode", attemptCount: attemptCount, remainingAttempts: remainingAttempts, isMaxAttemptsReached: isMaxAttemptsReached }), jsxRuntimeExports.jsx(Button, { variant: "ghost", className: "w-full text-sm", onClick: handleGoBack, children: "\u2190 Choose different method" })] }))] }) }));
1657
+ content = (jsxRuntime.jsx(Dialog, { open: otpVisible, onOpenChange: handleGoBack, children: jsxRuntime.jsxs(DialogContent, { className: "space-y-2 w-[425px] max-w-[80%]", children: [jsxRuntime.jsx("div", { className: "absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-lime-400 to-emerald-600" }), jsxRuntime.jsx(DialogHeader, { className: "w-full", children: jsxRuntime.jsx(DialogTitle, { className: "text-center", children: "Authenticator App" }) }), loading ? (jsxRuntime.jsx("div", { className: "p-3 h-full flex justify-center items-center", children: jsxRuntime.jsx(LoadingSpinner, {}) })) : (jsxRuntime.jsxs("div", { className: "space-y-6", children: [jsxRuntime.jsx(CardDescription, { className: "text-sm text-gray-600 text-center", children: "Enter the 6-digit Code from your Authenticator app" }), jsxRuntime.jsx(GenericOTPVerifier, { value: value, setValue: setValue, isDisabled: loading || isMaxAttemptsReached, onChangeOTP: function (code) { return handleSubmitOTP(code); }, fieldName: "AuthenticatorCode", attemptCount: attemptCount, remainingAttempts: remainingAttempts, isMaxAttemptsReached: isMaxAttemptsReached }), jsxRuntime.jsx(Button, { variant: "ghost", className: "w-full text-sm", onClick: handleGoBack, children: "\u2190 Choose different method" })] }))] }) }));
2031
1658
  }
2032
- return (jsxRuntimeExports.jsx("div", { className: "flex justify-center items-center h-dvh", children: jsxRuntimeExports.jsxs(Card, { className: "space-y-6 p-6 rounded-lg shadow-md", children: [jsxRuntimeExports.jsxs(CardHeader, { children: [jsxRuntimeExports.jsx("div", { className: "flex justify-center items", children: jsxRuntimeExports.jsx("img", { src: OTPAuthenticationImg, alt: "NIBSS Logo", width: 365, height: 365 }) }), jsxRuntimeExports.jsx(CardTitle, { className: "text-3xl font-bold mb-6 text-center", children: "Two-Factor Authentication" }), jsxRuntimeExports.jsx(CardTitle, { className: "text-gray-300 text-base -tracking-wide text-center", children: "Your Microsoft account has been validated. Please complete two-factor authentication to continue." })] }), jsxRuntimeExports.jsx(CardContent, { children: content }), jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntimeExports.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntimeExports.jsx("span", { children: "Powered By NIBSS" })] })] }) }));
1659
+ return (jsxRuntime.jsx("div", { className: "cams-sdk flex justify-center items-center h-dvh", children: jsxRuntime.jsxs(Card, { className: "space-y-6 p-6 rounded-lg shadow-md", children: [jsxRuntime.jsxs(CardHeader, { children: [jsxRuntime.jsx("div", { className: "flex justify-center items", children: jsxRuntime.jsx("img", { src: OTPAuthenticationImg, alt: "NIBSS Logo", width: 265, height: 265 }) }), jsxRuntime.jsx(CardTitle, { className: "text-3xl font-bold mb-6 text-center", children: "Two-Factor Authentication" }), jsxRuntime.jsx(CardTitle, { className: "text-gray-300 text-base -tracking-wide text-center", children: "Your Microsoft account has been validated. Please complete two-factor authentication to continue." })] }), jsxRuntime.jsx(CardContent, { children: content }), jsxRuntime.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntime.jsx("span", { children: "Powered By NIBSS" })] })] }) }));
2033
1660
  };
2034
1661
 
2035
1662
  var NIBSSLogo = "data:image/svg+xml,%3Csvg%20width%3D%22243%22%20height%3D%2293%22%20viewBox%3D%220%200%20243%2093%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3Cpath%20d%3D%22M243%200H0V93H243V0Z%22%20fill%3D%22url%28%23pattern0%29%22%2F%3E%3Cdefs%3E%3Cpattern%20id%3D%22pattern0%22%20patternContentUnits%3D%22objectBoundingBox%22%20width%3D%221%22%20height%3D%221%22%3E%3Cuse%20xlink%3Ahref%3D%22%23image0%22%20transform%3D%22scale%280.001%200.0026178%29%22%2F%3E%3C%2Fpattern%3E%3Cimage%20id%3D%22image0%22%20width%3D%221000%22%20height%3D%22544%22%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAA%2BgAAAIgCAYAAAAWb0OJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAdo5JREFUeNrs3T%2BP28jeIGrOeSe4F1jg9MFiAWejwd3IiXuym1mOHLr9CazGJjezO1%2FANrC57ehGi5ajG7odOrL8CaxJnL2wJjOwWIwOsOniXNIuzWhoUuKfokhRzwMI7T9qiSxWFetXVaxKEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Cj9IAoAkuXX%2F9ln64zz8Nft5VvC2dfpaZn%2F48u7TQqrB0ZTvSfpjEv46DT9X4ZVZpmV6LaUAEKAD9NNYzxrpd0IwPm34UZuA%2FUP4udDIh0GU8ayDbZa%2B7obyfVazPC90wgEgQAforrF%2BsdVYn3T4dVmj%2Fm36ukkb%2BCupDwct61n5fhSC87aygP0mfV3peANAgA7QrqE%2BCUH5g6T5CHmMYP11CNY18KHb8v4ilPnYsrL7Ki3Dz6Q0AAJ0gGYN9umADmdlNB06Le9l60bE5Dl1AAAAAAAAAAAAAAAAAAAAAOBgLBIHDN6t%2B7efJN9WYx%2B7bAGqKwvKQWE9kC0Cd510vxhcU9ke6s8tJAeAAB0Yc4P8TdLfNml9eW5LJ%2FiuLnifvs4HfqhZkH6Zlt%2BlqwZAE3%2BTBMBAG%2BTZfsafTzA4zzxNz%2F9z%2BprJCfDV9REE50k4xvfKLgBNGUEHhhicv0h%2FPJESX63S1%2FP0dWPqLCdQ9rf3M5%2BGnw%2BOJDjPe5mW2StXFQABOnCsjfNTndJe1Tx9fRCsM4CyWlZGJ%2BFV5m7Bv01HXmavlFcABOjAsTX4JyE4P5calWTPuC6ygD1t%2FN9IDiKVw2zmStZR9vetsnimXLYrq2kZ%2FUUyAAAAAAAAAAAAAAAAAAAAAAAAAADAkbGKO3BQYZ%2Fj98mfex1zGrJtprLV5t9adT5qeZqlP14oT0cp237tpWQAQIAOCM4ZQrD%2BKg1QlpKjUVmapj%2Buk917jjN8vygDAAjQgT4CirMQnNtPmW1ZcPIqC9jTQGUtOfaWo0kIzKdSYxRWIUiX9wH46t8kAXAI%2F%2BE%2F%2F6f%2FT1BBUcyZvi7S1%2F%2BT5pH%2FM32t%2Fte%2F%2Fw%2FByveB%2BVmaNv9v%2Bsd5YtR8TLKOy%2F8jzfPvJAUAGSPowCGCiyfJt%2BdkoYosCH3%2B5d2nlaT4Wn6epT8eJx4NGbN7aX5fSAYAfpQEwAFkgcVzyUANszQwfXnqU3%2FTNLgIf3wlS4zaRBIAAAAAAAAAAAAAAAAAAAAAANus4g5EFxa2st85Q7IKr%2FWXd5%2BWBywLWTk4C%2BXBKuxUsbCiO4AAHSBWQJIFIZ8FIxyBbIX4Ze7vvzb8rLtbf94E5NDEKg3Qf5YMAAJ0gBgBerbf%2BRMpAdDYZRqkzyUDwOn5myQAIgbnE8E5QGuPJAGAAB2graeSAKC1aejwBECADlBfaEzOpARAFOpTAAAAAAAAAAAAAAAAAAAAAAAAAADo0w%2BSAGjj1v3bLxJ7nwN05erLu08vJQPAabDNGtDWhSQA6MwjSQBwOoygA43dun%2F7PP3xUUoAdOofX959WksGgPEzgg60YWQHoHtTSQAgQAfYx%2FR2gO49kAQAp%2BFHSQA0cev%2B7Un6YxVeAHTH9HYAAAAAAAAAAAAAAAAAAAAAODH2QQdqCwvETaQEwMGsv7z7tJQMAONmFXegiReJLdYADmmRvu5JBoBxsw860MS5JAAAAAE60KNb92%2BfJaa3AwCAAB3ondFzAAAQoAMDMJUEAAAQn0XigLrmybfFigA4nLUkAAAAAAAAAAAAAAAAAAAAAIDT8YMkAKq6df92tsXaCykBcHhf3n26JxUAxs0q7kAdF4lt1gAAoBP2QQcAOAJhFhMAAnSAr%2B5IAoDenEkCAAE6gMYhAAAI0AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAADugHSQBUcev%2B7Wn6472UAOjN8y%2FvPj2TDADjZZs1AAAAEKADAFDRWhIACNABAOjfjSQAEKADZM4lAUBvll%2FefVpJBoBx%2B1ESAFUbh%2BnruWQA6K0OBgAAAAAAAAAAAAAAAAAAAABOxA%2BSAKji1v3b0%2FTH9AROdW6lZAAA%2BmAVd6CqLDh%2FOvJzXKfB%2BTOXGgCAPtgHHeBPN5IAAAABOkD%2FXkkCAAAE6AD9Wn1592kpGQAA6Itn0AG%2BaTS9%2Fb%2F%2F1%2F94kf44L%2FivdfrqOuBf%2F5f%2F9j977VRIz%2F%2FZAK7dIk2HReTzOkt%2FPDngOdzN%2Ff0q5rVNzyfLo2cjLLerNJ1Wqq%2BDlfcnI81HdS3TfHfTIh2fScJu6m4QoAOnZJ7dTMfc4Gr4ey%2FS16Sv4CR9%2FdxjYz0L%2Bp4e8bXbZdbjuXXR8fKmx3zadT78rtG%2FVT5%2BCz9XAoHW6TwJ9R1JctkiHfusW4bGui8gQAeaCluPraTEdwFqn0HPJGs09ziC%2BGgAl2HdZiRroOd2M7J8emjTHYF8lrZvs59pvlmrxWp5LAn%2BqHPmR15vDsGy7xlgMFSeQQc47obWeY%2FffTGA848enIeRwj7T9a3AqtM8e52%2Bfk%2Bv83W41uwvE9m09pmUaFfnhPw2lYRfWZQVBOgAowxQ7%2FbUYB%2FKqGwXjbw%2BA5FVBzMCLhTV0uv8OXseOASg7M5D0qh9nWNq%2B59MbwcBOsAoA9S%2BRnqHMHtg1dEUyTFNbxdYVQuaPoYyTTGzML5pPC07dALpLPtm7hETKOcZdKCSW%2FdvP0vG2ft%2F9eXdp5dHGqBmpj1971int%2Ffd8fI68ud53rWaSQjSL1s%2BXzw6aZpkdYzOi%2FblU2dZd%2FUcjIoRdODUNQ3yBjMSEhrQh%2Fy%2BMU9v7zOgXUXeWs2IXX3XtsAaVJkYmnmL3zW9%2Fc96biEZQIAOUGQZVqc%2F1gB149CjW0NosC87Wr1%2B1uM5efZ8GJ6GrbBOnsXh%2FhqcN52WHTpRJ5LwK6PnIEAHiN5QGNrzmIdeKO7iiK%2FdrkZ031NQY5%2BT54abuw754dQ9kQR%2FaLO7glkIf5pLAhCgA8RuKAyt4T491BeFoGUygHPuYgXgBz2eT%2Bzp7dk18txw%2ByD91J8ZFlj%2BWT5vWpTFmST8Vm93NPMJRsUicUDlBkr6WozofLLp7bWnKw50VeyzrBF4oIbPgwGcb%2FRG3gCe147d4SAgiFCukm97pj88xZMfUGfcELxWFqN4KwlAgA5Ekgaz88TUtKEEqEWmB7o%2BQ5g98Laj8%2Bqz4yX2gndGPiPli%2Bz54RNd1MojEn%2BaK4utre2QANWY4g5wfAFqkTtdf8GAZg%2BMbXp71AXvBriI4bE7udW3w7TsqUv%2F1aJp%2BQyLDSqL3wjOQYAOMNoAtcghGtNDmD3QeCXlHde17%2BntFocbtmkIWE%2BJLcHilE%2Bj5396JQlAgA4wxgC1zPkBFrQa6%2FT2Wc%2FnZHu14TuZTo8BdFgNSeNp2WYh%2FMXS4nBQnWfQgUpu3b%2BdNdrGsCr0%2Bsu7T01Xyx56ozW7PouOGu1DmD2wbrqS8h59jnLFnt4%2B5FkexyxL16sTOld56Js29Y1ZCH8yeg4CdKCj4O%2F9CM5jnr4uRxr4TJPuVtofxOrtsT9wANuRxZ7ebkptNyYH3CmhbwLLloGlWQh%2FsU66WTcERssUd%2BDUNJ0i%2FeAIzu1uh589hMZmF6Mws57PKVrDVVDQuenYTzBbsT6xqNlGNrul6WyrrF4xCyHUcbHXDQEBOsB4ZNPbmwZExxD4dDISPJDZA6sWjeVdRjO9XXDeuVMIXM3A%2BFOb2S0WaoyTjiBABxi5RsH5ET3Xexa22Bpjo72L6e19b0cWe0aAoKBbd8d8cuFxj5nL%2FId5w3ScJmYhbGQdqwvJAAJ0gDJjnt6%2BMY3caB%2FKtOkuprf33fEQc3p7FhCcK%2BK0IDjfCs5bTMvWUdZtvQ2jZ5E4oKpsevG9Yz6BL%2B8%2BLRr%2B6jFNHb4T%2BfOGcO5dbdHTZ0AS%2B7lMwVX3xt4BYnr7nxp15oaOMo%2BabNVzkgAE6EB3wW0WTCxO7byPcNuqaeTPG8LsgdcjvK6x93MXXHVvtIt%2BpeVhlpiWvbFqsZ3jTPL9GZzb%2BxyaMcUdYPgBah2TMC09RqN9KNPbb0Z4XWNOb%2B%2F7WXqOnw6eP1kcrv90hJNmBB1gt2OcrjiNFAAOIjiPPQozgI6H2NPbBQW0KQ%2BT5Pi3kFtE%2FKx5w3ScJcc%2FyyJaOraYhQACdEkAUNrgOrbp7Rt3IwXoQ5g98LaDzxzb9PYhdKQ8TF9NOx2ya7F5vvun8OchPu%2B9SMbp6QCO4TIN6OZHno5DmIXws2nlIEAHTsSt%2B7dnyfFOg7z88u5Tk0bLgyM939bBjentx3FOA%2BlEWkYYLbspyX%2BPE6vTd2Yg5Xx97MF5eMxk2vNhLATnIEAHTsskOc5pkKsmwfmAAtQmYlynIZz7PPJU8DFObx9Cp1n0Z01DGmVB2zy9ZtfJMBbfWifjM4QOnjFsxfV4jOUQ6IdF4oCxa9r4O9bp7ZtAtG2QPtbp7X0Heq8jXuMxz3LYDtYvk2Fs1%2FTrCOvHIUxvnx9zAg6kHK5G8IgAIEAHTkTThv2DIz%2FvxtOCB7KX77qjRYYejeicRrmIX4mrAZzrckwVY%2BjEm%2FQdnI9gWvYs6b8z1%2Bg5CNCBE%2FTTER7z8gSnt2%2FcPfbAr4OAJAtGzkd0TkOYVvv2EF8Sgri%2BA%2BRRBejJSB%2BP6MEQyuFLTRQQoAOnZ3KEx9y08Xcxgus1PfKGexfPpc7GEswOoLNh45BTz%2FsMkFdjWoAr5J%2B%2By0OWposjT8dpMoxZCGNcHwFOlkXigEq%2BvPt074RO98EIzuEsa4TXDSoGEvhlDfcugrExTW%2BfDSCPHTow%2BK3Hc10k4zKE%2FPN8BOlocTggOiPoAH8NUMcwvX1j2uB3xjq9Pet0mIzonIYwy%2BHtgb%2Bvz8dsPoysqus7%2F6yTYSz816ZOmQygvlwe%2BywEQIAOcAwBaix3jjTw62J6e9%2FnFXN6e9%2BdDV8DrI4W8dulz3O%2BGUulkOafWWJadgyzkdaVgAAdYFAejOhcpjUb7lmjve%2Fp7cuOnvXtszEdO5gdwrTaPgLWvvLmzcie8R1rJ9yh9V0O17ZWAwE6wKiNbHr714AmnFNVQzj31x1c1773tI%2FdiB7CdXp14LJ53uM1fDuWCiF0wk17PoybY19wL8xCODulMggcjkXigJ1u3b%2BdBQNvjuywL7%2B8%2B9QkKLoY4SXMAptFxfcOYWSti5HZvmdFROt0GEBnQ6arRfx26Wu0cmyjlE8HcAxjWNRsCHXlmPIlsMUIOjD04OaQQd6DEV6%2FacXAb5L0P709%2BsjaAGZFxA5mx9qJMtRrOJpRyoHMEFr1sHZB7HQ8T8xCAAToQI%2BObVT55su7T7WfFx3h9PaNuxXfNxvAsb7tKP%2F2OeIcLRgZUB49dND6tKdrmNUjL0dWl5uW3d7jEyyDgAAdGIIwvf3syA676fTJi5Fexqqj4qa3Dys%2FDjWPLg85chdGK5%2F0dK7zkS0O1%2Ff09iwt58ecgAOahbDQQgEBOnCaHh3Z8a6%2FvPtkevtfnYUgZ18QNOn5OKMHQyOc3j6EkbuDPT8crt91j8Hk87FUAmlaTgdQxm9GsrVa353Wo8mXQDGLxAG7%2FBpex2J1pIFc17LG%2Ba5AcQgdMV1Mb5%2F1HZBEDLCy4Op8ANfpkM8Pv%2BjxnF%2FZWi1%2Bmo4gHXvfWi3pZ4tDQIAODMGXd5%2BencipXoz8%2FO4M%2FPzXHS0c1XdQEnO0eTaE4PxQ09v%2F%2B3%2F9j9c9nnM282E0dV%2Fo3Ok7%2Fyx6WPk%2FdjpOE7MQgAMwxR1gvNPbN6Y7Gp1DmN4ePTgfwIjzcoSrtx9kP%2FCeg%2FPM5cjK%2F2wAxzCGrdWG8IiJ6e0gQAcYtxOY3p6ZhPMcauDXxdTXvoOSmHufD6ETJXPTcVnM8un7nq%2FdyxEuwNV3GV8d%2B17yocOv7%2FvEwtZqcBpMcQdO3exEznNaEmANYUXiLqa%2B9h2UxAxmhzBy19mK5qHz6Ek4zz4X4Mry4ahGKNO0zeq3Sc%2BHMYbR8yHcJ2ytBgJ04BTdun9701g%2BJqsv7z7NjzSQO5S7%2BaBxxNPb%2Bz6v2FuRDWGGx9sOrtE05MshnF%2FW%2BXA5wud7h1C%2FjWEv%2Bb47yVYdrdMBCNCBI5A1lp8e2TE3agAOaGXsQzgfaOO9i1Gh0SwOl%2BbRrDyeDSH%2F7Nuub4%2Bfkm%2BdJmcDLXNXx76IWUn9Nu35MI5%2BL%2FkwC6HvMvg6AQTowMl6fITH3LTxcnFC13WaNjT%2FNbBjWnb0TOWs5%2FOKOdI1lBkeT0dcNp4f%2BzPSA75mYwgszUIADsoiccAfbt2%2FnY1sHduIcja9venI1yNXfVyN9wGMOEfrdDiRBQz7Nh%2FTlmoDyzvLY19wb%2BtRjL7zqK3VQIAOnKhjHD1vNFp5YtPbR3Xt9uh7y7yx7X0%2BZtmK7ZcjPbchPBoxhkXNhnBPtDgcnBhT3IGvwuJwxxgQNG28GJnsOTiPPb19IKOG84ifZYZHdy5HOq19o%2B%2Fp7esRbK02hPpkMba1EQABOlDPvWM74C%2FvPjUN8gQ%2F%2FXrbwWf2PWp4E2sqqhke3QWO6evhCPc6384706T%2F3RnmI0jKWWJxOECADvQY6GYN18UpnKvgZxDGOL09ZqfDY1kkukUIzsf%2BPK9p2eNIx%2FXIZ3kAAnSAP5je3q%2Foix4NZDrqjTw6SFleuzqFYCd0PvZeDjraneGQ6ThN%2Bp%2BF4NlzEKADnAzT2%2FvVxfT22QCCkljT24cQHIwlMM%2BCnJcntAr2bADHYPQ8jrkiDAJ0gNEzvb3%2FoCkNlrqY3t53p8vbEZ3LWALz%2BbGP5B5hYLkawdZq2T2i98UmTzDvAgJ0IHPr%2Fu3r5AhH6768%2B9R0QTtTh%2FsVPTgfSKeL6e39y1a7fp2c6L7RaTmYJf0vavZ8BEk5G8AxWBwOBOjAiQbnk%2BQ4t1ZrEwwZnexXF9Nf%2B87DMae3DyHIOkbZNParE0%2BDvuu2ddLN4o%2BHZhYCIEAHevP0SI%2B70XRi09t7t%2BpoT98xTW9%2FIJs08iR0bpzaM%2Bebui2r16Y9H8bNsae7WQjAEPxNEsBpOuLR868NwYa%2FZ%2Bpwv6JP2wyByaTHc4q2FdJAVqI%2FZln6ZZ2OH9O0PLV0HMKiZmMILM1CAAToQG%2BOdfT8JuzZfoyNr1M37%2BAz%2B76mMRvTM1kkikn6epMG6deh02PUBtKxsxjB1mpDmIVwkusnAH9lijucdiN2cYTH3WgU1vT23i07asD3HdRavX24srxxnpb9eyMPerLz7LsjwtZq0hEQoANttFgF%2FZgbsfSni%2BntFz0HJtG2jNOB1JksTd%2BPPEgfwqJmRz0teyCzEG5srQZkTHEHToXRyX7NO%2FjMvhdUixmUPJZFug3Sx3hiaWA5TfrfJnMMW4LNkv5nIdhaDRCgA6dhAAuJnbroqzsPZMQr5vR2i8N1HKSneebFCM9rCB07L6Vja0c%2FCwEQoAPUYfR8PIHsdkA7lunt00QH0iE8CZ11oxAei%2Bi7Y2c%2Bgq3VLgZQ%2Fjx7DvzBM%2BhwQm7dv32e9D%2BNr6nVl3efVi2COXoKZJNutg0a0%2FR2HUiHk42ij2X9jdkAjmEMgeUQtlabK5qAAB1OLzifpD8%2BHvEpPMyC9Lq%2FZHp778Y6vT1mYKID6XCmWZ2Q5snlCM6l72nZy2NPx4HMQrixtRqwzRR3OB1Pj%2FjY11%2FefWo6Yml0sl9dTG%2Bf9XxOq1iBSRogZOdyJpucVGA7lnxjazXpCAjQgSZu3b89TY57m7F5i981OtmfdUcLH%2FXd6RLznB7IJgc3hjrh0QDK9nwE6dj3fXExktkcQESmuMNpeHrkx99o%2BxnT23sXvQE%2FkP3CX0c6lyFM1f8aJHT0udOB5suzY57mHuq1vtP26Ed9BzILwdZqgAAdTk0YPZ8e8Slki8M1bUib3j6%2Bxues7%2FwYMbCbDaF8pefT2aJpoUMlq3%2BymQJDGrnOjulYRy6HMC17PoL6aQhbq40hHQEBOlBTtvjMvSM%2F%2FqZMbx9HILttTNPbh9CB1Oney2keWIVgbh5Gfq%2BT%2FmdAZO4cY6EayKyLebiuRyvkxVHMxAEE6MCRaTH6fNRMb%2B%2Fd65Fe01jT2ycDCVQPNlU567BJzzvrLHw%2FgHM%2F1rphlpiWHcMQZiG8dJsAilgkDhgr09v7NR9hozrmrIAhBAjLQ4%2BEhu2krhSPoy4Di2NOwDALYdZ3%2FWhrNUCADpwa09vHF%2FjZ%2B3y451MnSM8CvFXP535%2BbIUqDSynSf8j%2F89HUD%2FNBnAMprcDAnTgdJjePr7GZ3pNs4C276m9N5HOZTqQ%2FHlzot%2BdJMe593zfo%2BfrAVy3MaTj8thnIQDd8gw6jNCt%2B7ffHGkD9C%2BNmC%2FvPjWdCjvE6e3L5K8L3k1HnAXnHXxm3%2FuFx5wVMIjF4XqeYvtPNXV1Yc2CISwOtz7ydMzScNLzYbySowEBOpxWcP4kGcf07rctfndo579OG7a%2FFDQWnyXHv0d954HfQJ4ZjTkrYAj5s%2B8ptoue8%2F6xLZ45G8AxjCGw7LtzbG1rNWAfU9xhXMH5ZEQBX6OplAOd3n4zkiChircdfObFsebHgvyZBVp9z27JgoS%2Bpyr3%2FQz4sY0E9z0tezGCrdUmA6hLBOeAAB1OzHVy%2FFPbvwauX959atoYHOL09lcjCRKqBD1dBH5jmt7%2BYADXaQjPEZ8lVA0sZwNIrzGMng9h5wTT2wEBOpyKW%2FdvZyMD05GcTptGzNCmt%2B%2FammtsAXoX09snA7imsfY%2BP0tOePX2nDs9f%2F8xzV7pu9NxNYAZFzHMBlA%2FrrRWAAE6nEZwnjX8r8cU6DUMgIawAFDl4C7intpDYXr7sAOETbA1hHzX9xT3o1ikLjyyM%2B35MI5%2B1NcsBOCYWCQORuDLu0%2FZqOU%2FpMQgpg%2FnzU8k7bt6rrnv0cObka3e3vv%2By2FWxKTnw1gcSbkawtZqY6jD%2Bk7Hla3VgKqMoANjMrTp7VUWVlqNJO2jN%2BJDINf3SOvbEZ1LJ9fpSMvp4MvdQB6JuBnB1mrnAyh7z92eAQE6cFLC9PahLTxVZbRyLAF6FyOzQ1jU6WZE57IcyDOwvY8KH8mzwLPEtOxR5LdkGAszAgJ0gIMa2vT2U2qUdfVc85hGDy0Ol3ztSJsmprcfS2C5OPZ1MsIshNmI6hFAgA5wNIY2vb1qo%2BzDCNI%2B%2Buj5QPazjzW9fQhB6dc8OYBjeDGAYxh8mRtInnmdHL%2FZAI7B9HagFovEwZG6df%2F2dGzn9OXdp0XDxuwQp7e%2FPaHsOO%2FgM8c0vX0Ii8P1PoqXltMnyTCewz%2BGmS1DWNRsnhy%2FIcxCWGmxAAJ0OAFNg9mRGtr09jr7Bh97462r55pNb4%2Br19HQMCPixYjza8y0mgwgzxz96PlAtt20tRpQmynuwBgMbnp7nWD%2ByNO%2Bi%2BntQ5gREWt6%2B2wA59LVFnh1gvP3A8mvxzCzZTaAY5iP4L7Q98yVVZ%2FlDhCgA%2FTV%2BB%2Fi9PZTGjXpoiHf94yImAv8DWF2x03P5fP9gMroMQSefU%2FLnh%2F7tGyzEAABOkB%2Fhja9vdYU2vS9iyNO%2B%2BjPNY9p1eWB7GOdOXiHUXbu6Sub0v5mQMH54gimt88GkF5jCCyHsIbFS7dnoAnPoAPHbmjT209p9PztSK9nrPOaDeBcVofcKit0SjwJAdLQZrYcQ%2BDZ97Ts5ZF3Gg6l7M1trQYI0IGTM9Dp7U2mE6%2BSYWzDVUdX%2B7z3Pr094nOjQ1i9%2FdUBymFWBqfh2s0Gml8Hvyp5eFZ%2FOvb8coB0nA3gvmBxOECADpykoU1vbzpqcowBehfT27M06H319ojnMoQtxdZhT%2B2YJuH1UzjH8yPIr8ewF3Xf07LXtlaLYnnIWSuAAB1gSIY2vf2U9j43vX3YQcLGtWriKEbPh7D2wtEH52EWQt8dRkbPAQE6cHoGOL29zdToD0n%2FU1sPda67PBrReV0opYPxfE9d8v7Iyt8gA8s0HX9PhvfIUR91yFxWAgToMM4A9FxjZ9DBXN4pNcrmHeT3SdL%2FyFes6e1ZsDdRRAdhuStgGshz30Nw02aF%2B4E89z0ERs8BATqM2AsNx6PSZoXo1Qmda5nHIzqvR4rDYFwdQb4bQ2ApHb%2BZSwKgLfugA7TXdlGgYwrQu9q262IA57UYybnwzctd13RA%2B9Qnx5z3B%2FLc9yCC8zazEAAE6ADxvHauzYUG%2FqTn84o1vX2WmOo7iKAz2b9y%2B4Vr9ZXRc%2FcBQIAOVLCWBEdj3uaXI47cDv5cB9zAj9W4fqA4DMLDCtsAPpVMX%2B8zjcu0WQh%2FWB1ZPQ4I0IEGfpUERyH6fuADtuxoCucQpre3nrYvWBmMq33X00J%2B0eqvWWIWQua5JAAE6ADDEGvf7NURnGsX09uHMM041tZqM8VhEAHnywrvs5BfnMDS9PZvsxBuJAMgQAcYQMMs4p63xxCgzzv4zCFMCbd6%2Bzhko%2BaX%2B94UZjrMJFeyaLm12jQxC%2BFrvXhCs6gAATrAoJ3SqEn0qfwDCZRiTW%2FPAhUrWfcny5sPK%2BbRJ5Lrq7YdUzqkvrH3OSBABxhhw2w58HN928FnDuF57Vij56b69huc36sxGiyw%2FNYxNW%2F6y2Yh%2FGFhazVAgA4wnAZuzKD6nwMPgLqYLTCE6e3zSJ9jcbh%2Bg%2FNKZTGseTCRbK07psxC%2BMboOSBABxhpw2zIzzB2Mb19MoCgNsqq9J7FPY7gPDB6%2Fs3Llr8vHb910locDhCgAwwlaI0dLA74XE1vF6wcfXA%2BkE6hIWi1qJlZCH8weg4I0AGGEpyf0HOH645GiYYQ1MY6L0HfwIPzYCbpogSWOqS%2B5cG5ZAAE6ADD0MWI8lBH0KM3Qgey4nms6e1Z0HemSBzuujUMzjMW8vuW75cty64OqQ4e%2BwEQoAM008mCaQNu7L3u4DMfj%2Bi8HigSB7NoGpzrSPnDqxGU3TGkI0CpHyUBQC1djpysBxZExF6pfmMII3CtO1nCVlNGEw%2FjeZoXn7X4fdOyvz2uMm%2F5GTPJ%2BHVrtaVkALpiBB2gntcdfvZy7OeaBrXZ1PZJz%2Be1jLSGgGDlANcqff3SJjgP07KnkrLdqK9ZCAe5BwAYQQeoIRtRXpzQ%2Bc47%2BMwhTJGNNT3VqGx3stkkr1qOmm88lZxRyrP8%2Fu0eMJcMQJeMoANU1%2FXIyZBG0JcdrVQ%2Fluntk6T%2Fhe7GHEj%2BEiM49xjCn3m%2BTXk2C%2BFg9wAAI%2BgANQOHLv1zzA3RsH9y31NkY60hYLGsbsrX88gdQ0PIc0PQdtaIWQiHuQcACNABKloeYO%2FzIa3k3kVDdAgrnsfaIs%2BobBxZmco6g%2BYdlS8dKS0fzTEL4c868QD3AAABOkBFh9hWZyhT3KOvVB8a%2BbMhnFuEc5km%2FS90d%2BxBeRYwvk3z2U1XXxKuk8cQkuR5y983C%2BEb09sBATrAgNyc0Lm%2B7eAzB%2FHseaSOB4tl1Q%2FIs86nD8lht6hynb7Nymlbd5mF8G0G1UIyAAJ0gGGYd7j3%2BV8agSNp0Bd50CJNYqV9rBEw032%2FD8BXW%2Fnn1%2FBzGQKbgz%2B6MaAZG0ddd4VtEc1COMwMKoCvfpAEMExheuZ0BKeyToa3v3ftAMSzhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwSLZZg4G5df%2F2m%2FTHmZQATsj6y7tPDyUDAKfuR0kAg3MhCYATcyUJACBJ%2FiYJAIAeLb68%2B%2FRSMgCAAB0A6NelJAAAAToA0K%2FnX959WkkGABCgAwD9yQJzU9sBAAAAAAAAAAAAAAAAAAAAAAAAAIBh%2BkESwLDcun%2F7X1IBGKn5l3ef7HsOACVsswYAHMpzSQAAAnQ4Crfu3z6XCsBIZaPnK8kAAAJ0OBZnkgAYKaPnACBABwB69tLoOQDs96MkgEHJGrBGmYDRBeiSAAAAAAAAAAAAAAAAAAAAAACguh8kAQzHrfu3J%2BmPmZQARsC%2B5wBQk1XcYViyAP2pZACO3DqxcjsA1GYfdAAgtudf3n1aSwYAEKADAP1ZpcG50XMAEKADAD17LgkAQIAOAPRr%2BeXdp7lkAIBmLBIHA2vcpq97kgE4UitJAAAAAAAAAAAAAAAAAAAAAADQ3g%2BSAIbj1v3b5%2BmPF1ICqOht%2Bpp%2Fefdp3UF9dJb%2BuEhfD9LX2Y63Xqbfv3IpAECADmML0Kfpj%2FdSAtgh2%2B3hVfq66SIwL6mbNoH6LPdfL9NjuHJJAECADgJ04JQs0tfzNCBe9FhHnYUg%2FXH6WqfH8ovLAgACdBhrgJ41fn%2BXEsCQAnMAQIAOpxqk%2F0sqAKlV8u35boE5AJyIHyUBDI7GOPAhDcyfSQYAAAAAAAAAAAAAAAAAAAAAgNNkFXcYmLAXOjBu2R7iS8kAAGyzijsMz3tJAOMOztPXQ8kAAOT9TRIAwMFko%2Bb37G0OABQxgg4Ahw3O15ICABCgw3HIGu9nkgFGZZ4G5peSAQDYxRR3GB4LR4HgHAA4QUbQYXiuEiPoMBZWawcAAAAAAAAAAAAAAAAAAAAAoLYfJAHQp1v3bz9Lf%2FyUviZSgyOWLQb3UDIAAAJ0YAyBerZy%2FXn6mqavO%2BHPgnaOIjhPX%2Fes1g4ACNCBMQftWYD%2BNH3NpAYD9ovgHAAQoAOnFKhfJ99G12FI5mlwfikZAAABOnBqgfpFCNTPpAYD8XMaoK8kAwAQw98kAXAs0kDoJguI0teN1GAA5oJzAAAAAAAAAAAAAAAAAAAAAAAAAACAkbLNGjAqt%2B7fzrZhm0kJOvL8y7tPzyQDANAF26wBo5IGT5eJbdjoxjp9vZQMAIAAHaC6LEhfSgYie%2FXl3ae1ZAAABOgAFYUg6p4gnYhWidFzAECADtAqSDfiSQzPjZ4DAF2zSBwwarfu3z5Pf1xICdqwMBwAAAAAAAAAAAAAAAAAAAAAAIdkkTjgpNy6f3uW%2FphICfaxMBwAcGg%2FSgLgxGTB%2BVPJwB7PJQEAcGj2QQdOzcvE3ujstg75BABAgA7QlS%2FvPmXB1yspwQ5XIZ8AAByUZ9CBk3Tr%2Fu3PiWfR%2Bd4iDc7vSQYAoA9G0IFT5RljilxJAgCgL0bQgZN16%2F7tqVRgy%2FrLu09LyQAAAAAAAAAAAAAAAAAAAAAAQN8sEgeQfF0w7jqx7dopev7l3aeFZAAAhuBHSQDw1dv09UYynJSF4BwAGBL7oAOk0kDtJv1xIyVOxjp9XUoGAECADjBMVyFwY%2Fyyqe0ryQAADIln0AG23Lp%2Fe5b%2BuJYSo5ZNbb8nGQAAATrA8IP0F%2BmPcykxWg%2FTAN1MCQAAAAAAAAAAAAAAAAAAAAAABssicQB73Lp%2Fe5L%2BmEiJo7T%2B8u7TUjIAAMfgR0kAsNdZ%2BnoTfnJcLtOXAB0AOAp%2FkwQAu4UR2EspcXReptduLhkAgGNhijtARbfu356lP66lxFGYp8G5ThUA4Kj8myQAqOZ%2F%2Ffv%2FWP6H%2F%2Fyfsmnu%2F7fUGLRFGpw%2FlAwAwLExxR2ghjTwu0p%2FzKXEYGWPIwjOAYCjZIo7QAO37t%2BeSoVhBuhf3n1aSwYAAAAAAAAAAAAAAAAAAAAAAI6ZReIAIrl1%2F%2FYksU%2F6IVx9efdpKRkAAAE6ALuC9PP0x%2Fv0dSY1opunr%2BdpcL6SFACAAB2AKkH6JP3xJn2dS43WsmD8Jn29EpgDAAJ0AJoE6dkI%2Bov0NZMae12lr2zK%2BiS81uHvK0E5ACBAByBWoP4kBOoUe5gG4TeSAQBAgA5wiCA9m%2BqeTXmfSI2%2FyBZ7eykZAAAAAAAAAAAAAAAAAAAAAAAAAAAAGByruAMMwK37t2fJt%2B3YzkZ6itm%2B5ve%2BvPu0drUBAAToAEMP0rPg%2FDp9XYzs1NYhOF%2B6ygAAAnSAYwrUpyFQnwjOAQAE6AD0H6g%2FS388To532vsqfT0UnAMACNABxhCkT5Jvz6Yf27T3m%2FR16ZlzAAABOsDYAvXzIwrSF2lgvnDVAAAAAACAo2MEHeDIhdXfs9H1yQG%2BLpuyfvPl3aeVlAcAEKADUByoZwH6NH3dSV%2Fn4dV2gblleP2afJu6bsE3AAABOgANgvazEKgnIXivEpBno%2BQro%2BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC39IAkAAACG4%2F%2F6afIi%2FXG%2B4y3r9PX2339bzXd8xiz98Tj3Ocv09WrX7xV8zkX641H6Otv659dFnxG%2B88HWe0uPM33vNBzf5r2r9PU8fe%2Bq4nFN0h9P09dk67uyc1tUOJ%2Fse6%2FS9y5jfa4AHQAAYJwB%2Bvv0x7TCW5dp4PhL7nezgPf9VmC%2BDoH5%2BVYwnAWbD9PfXVfoKHiyFUAnW4HrPP39y633Xqc%2FZhXfmwXJb7beexZe2fHcKwqcc8d1Hs5x8zvrre%2B6LOuAyP3evXzQHYLzj3U%2FN6a%2Fyf4AAACDlAWRP2y%2F0n%2F7R%2Fp6Hv7%2FPIxab9sE56vw%2B%2F9IX19%2FZkFmCDqz4P%2FpniB4shWcZ8Hpz9kr%2B8zwGbMwCr4ZDZ9tBdib926C8lkIjjcdCNfbn5v%2BzF7zEBi%2FqJAub8J75%2BH8tr%2FrOhx7%2FnwutoLzMtc7PvdFOHYBOgAAAEmSjXqnr2choM3c3QpCn4XgPAuUf8mPEIcR4E1w%2F2RPwLkJ%2FOfbI8fhMzd%2Fn%2BZ%2Bzre%2FM%2Fze5r0XWz%2Bz711sPjeM5F9tOg%2BKAuytc8zOL%2Fv%2F9faofPiszXdPtt5%2Flr7ebAX16x0dEtPw%2F1cFn3u2dQ4CdAAAAP6wzgejybdnxTOvyqavp%2F%2F%2BMv1xsxWol1mE93wo%2BL9%2F5v6%2BCu99u%2BM4k1yHwod8x8NWgD3d0UGRTX%2FPpvXfK%2Fjvog6H8xBYZ8f4MPk23T8peV9mWZB2b%2FOdIV35Ub4GAAA4HmEUebYdPIbR8E2wfrPr99MA9OG%2B7wgj4YuS%2F360HXzveOZ7e9R5letQKPrsX8P7J3uObVnwPU%2BSP2cPLHOdB388P56%2B9%2FGeAL2oQ2KZO3YBOgAAwIl5tHnOe0s2ijvdCj7nuQAz2bfIWsvOgesQqK63vrvMi%2FDeVVcLrKXH8zkXON%2FbHgEPq8LPj%2BWCC9ABAACGaVby71kAmo2SX%2B1bib2D4HxzTDtXgd96b%2Faehx0e1iq8NqvUv0m%2F%2B17V7doE6AAAAFSRLVa2GQ3PAtCnIQhdFATnnQbqueD8smxf8DDd%2FMVWcH7Z5Yh%2BtkL91vduVrB%2F0XGngAAdAADgxCy3AuFFGoQuQhB6sQl%2BtwLVZfr%2FmyB5WhZAh%2F9%2FFn7%2FZt9Icy7w%2FToavic4337vvS6D81ygvk6%2FP0uPj8kBVlvvilXcAQAAjkAIdjdbgGV7iz%2FJvWWzONyjPQF3tlBaNso8rRGcr0LAXSU4X%2B4Izjf%2FVvTdd8LP1Y5jyrZhe1Zw7jt%2Fr4LNcRWt1H4e4fMF6AAAACML0udbgfjT3J7hr7aC9%2FOSj8gC881%2B4Dd7vm474P6lbDS8RnCe%2BbUoEA6fsQnaFzuOKXvf09DJkHfRIpDefOe0YH%2F4B%2BHnh66vrynuAAAAx%2BUqBLOb570fhuA9mwZ%2FEwLVj%2Bmfs73Jb8L092kIajdB7NWeRd6eJX%2BOHGfB65PNFPotm9XZn1R47yI7vuz96f%2B9CIHwi%2FTvVyEgfhPOZ7E97T79v%2Fdbx5tN%2Bb9J%2Fy077kl4Lv4qTG%2BfhrTIvG7Q8ZF9RnYus%2BTbQnMPw789CWldpUNDgA4AAHBKsgA2BN9ZQHqR%2FvkiC1zDf2%2BeS88C8Wyk%2BWlBsHxZYduzB1t%2FflLyniwYnyd%2FHc1%2BsuMzF1vH%2BCYE8tvvL1rxfRp%2Bbo9qZwvDvQ%2FB9Cx3fvP03J616Pi4CN%2F5e%2B5zLw%2BxYr4AHQAAYFiyEeBsOvVqR5D%2BMgSQZ9vBawgiH4YR5SzI3p7q%2FiEEsKsKx%2FA2vHbZfM6rCp%2B32DrGbBT859CBMNk6tpcFQfDz8L7tc89mBPwSOga2nw9%2FvWtxvH1pG0bMfw6dDHe3PvfVoRa7%2B0HeBwAAYIhCR0M2Wv7zse5tXodF4gAAABiqbCr8%2FBSCcwAAABisHavRAwAAAAAAAAAAAAAAAAAAwKhF3Wbtv%2F%2FX%2F3j%2BX%2F7b%2F1yeWiKm5z3d%2BusqTYOVrHWQdD%2Bq%2FJblk%2FR4F64cQy4L6Wdl%2B6hOTrEuP8R1SsI%2BteoC5bSj75iE%2FLUawPmqS%2BK1L4%2BqbRny4eSU67osDbq%2BZof4jhFdj6w%2B2l5obpmm3Xqox%2Ftj5M97nybAw64LY%2Fods%2BTPDe0z87IMWue9NRpYF8m3jeunJe%2F5WpmmrywdPqSvm6aZIP2sZxGSbFF2TSp%2BfnbsyyaZOXb65477p%2FR12XOBf7JpcFc4vxfp%2B1%2Bl%2Fz%2Fv%2BJgucpXQX65%2FuOFPI35lJ5%2BffuazHQ2WKp%2B%2FDI2aZQdp%2FKzi9y8PcIPOrvfT9PVLpI%2FM8s51%2Brm%2FdH3zyqdj2TWv%2B949N%2BgnVfNapEbq45BfzwvuE1keeZu%2BXlZN64I6tYnVph4KxziLeNpfP7ugHopdz%2BTTYVG37RE7LSvkveuI5bTMi%2FT1KrRBqgR%2FndXV4fpn9717fdclkdpSSey2TEl9%2FiC0M88K6oyb9PU6%2Fe6bitfzZZu0LyrHRdd7qx55UFLXZWn1etfxxL5G28dZVvd3dd1DumVxwlXHAWdW3h8esmyVtHXWderfgvvOKmbbOKTN5hqcl92LtvLm5l68GEqHR%2BwAPUuQN6Ey7rLH9HE%2BANlxM6rz3n038qc1buabzDcLN6gs4z1vUFE%2BjdW4ifH56Xlk17VOkHmdv1lEbPQOoefrRY3z2zRWlgcoH9Md1%2F5BpBtVWf56FKHBn6VP2U2h1uen6b0KjZpXESvepzW%2F%2F3kXHTNbN%2BhJ9udIjeDzUH9le47e6%2FCmf55Lx1XZNQ8Nz0rv3ZNW73P3g3UX57h1XWYV0jp7PQqd21XqhUcRgqqsvG7y40XE%2B8wmgJgX1ENJhDphVzosGnzmi3wQ1MDziu%2F72knT5YhXCAouQoBe9V5x0VHbYjt%2FD6EuiZnHo3fqhXO4TvZ3an29xun7s3J2mavzVwXnuW7a7to6pu0yclUSwO1L30l4z%2BOiGKGgjm8rnwfOI31%2B1RjiQRK3g7Kr%2BqtKe%2FtpxfcmW22tRYV8vP258617UpvjnTZog07C6yJ8xk1os%2FU68%2BdvES%2FidCtIvw4NlK7ke%2FMWkd5beMNLX59DJTVpeLybnrvP4QZap3LsLDhv%2BPmb0bWP%2B67xZqpdLv3XESulScQ0alpx%2FeVGuKNneLKVF94fsnwU3Exip9mioLKLcXPdVZnWMQnl72PoaItV19X5%2FqzMdHHdn2ylx0Wkz9wc4zQ93usO8%2BmkxjU%2Fq%2FHeWsF57JtwqJM%2BNmggvC%2BqMyuU7yY%2B7Ejbtn7tqJ5ZFQS8bfPEWQfHtavBHrOclnUKtSmDTayHXpd00E5YRb52s1Bn1DnOiyQ3ABI6fm4KOmGaygfn2WzQl9t5LmsL1gx8N22g8z11fOxrFCsPLGtcn%2FOKdXrTdsgs6V7d478I13dfe%2Ben3N9%2Fa9sez74z3OfbpstFaC%2B%2BSHr0t44u4qbHtItMeV715lDnvUU3u3BDebMjg65CcJJ%2F7aqY3tQIEmIV7HUHn39eIdCcVOkoaFApXexopB3SpEbFPSm4QZ11UD6%2Ba3QWjNbEbqys9zSc2zTyizT9%2FE3n4UXk617VNGa9WNCzfTfSR29%2FzixGp0bFQHMZ6b1VgvNVR8H55ruK8sj2PWJZlj97CCrvRr6uyy4a3NvXqqjubDAqHaserPq9F7lAPbbtzrrVAdPg1yOoS2IHSauIdcaspNyvc3VGUTvuoiBN87MnJg06lZMQnOQ7NC%2F31Ktt6rrY7ZIPHXQArKsMMoU2xlmu3Md2qOBx2uL3drVzG9%2FTC9L76wDonmOtG6%2F1HV9EneKerwC%2F9pimmTn2M8JNg6LKGSA0fN%2BUVBjZZ2TP0dzsahBsPUdUdEPKgoSkwpTX%2FPfPw3c3btg0%2BPwsg%2F4Ufk4Kfj8rGM8qZu5WN7WtZ%2Fi2ZVNZXvZUfuqc37Qg7V4k8Z%2Bhr1LpPdwTxOaDyHs1Gs5FDaEmUxtXO8rmvs%2FfLMRVNsUsS%2FebiHVQUbk5D43Ti4J6cRZpuvt1QQAQIz9NCuqrVQdri9zJ%2Ff23SO%2Fdzi%2FnoRF5lisTXT0T%2B6agIZhNgf7uucvQaM43gl83KN9NnnHcrheu9jRe3%2Bf%2BfrmnrltWKPfnuQZm3fM4LwgIYtSVbdOySoN9GvFxlO18%2FrROZ0XXdfXA6pLlnnPLT4nd19ZaR7puk4JAK0vPwkeiQjC%2BPa15mc9%2FWdqGx6q20%2F5xnTIS6qb8Y3APc3n2RUEZepkUPMoZzvM61w56W3AfXewJSM9z9eqiRr68W1Av182HVa%2F73dyfo7ZRwyMFh5o9%2Bvcd7Z3Noms%2FJQVrJuyJEc5r1CO7YoI3OwLpm5DPdq4DFvL7Jl47ixWzDClAL%2BqFz3pMP0R%2B9rLTUZeSBt3mQl1WvbGEBTxuskXBkuLnirJnkfctRvDdTSfyje2nCp%2B%2FyPVS5W8mj3cE6H9v0qje4UlRJ0Hsxk6Liuu3Gmm9KR%2B%2FRX6WbbKv0tuVhwp62pc189yk5e%2FH%2BPzN35%2BVPNeXjShcFC2y07Cu%2B1ByDC9DeuaDtgdJy2etQoM%2Ff63OIq0SXdRw72JtkbMa9XOd9%2FYSnJcs0PSwLJ%2BFhvS95M8R9yrp%2B92ssLbla993hucKt98%2Fr%2Fi5ixrBYd3zaDw7bkeeetvhArf5OuMiifC8ZS54aVvOFx2cf1ld8kvk5%2FB31g%2Fhu1Y78mN%2BGvivB1p5%2FGmd%2Biksvpi952O4xzwsee%2Fz5K8duBdV1z7YCnr%2B8nm5BRonyfeDT5dldUP43nthCvJ5eO9NzWuUtMyvh8jv2%2BV7O%2B2jtVG31mA6lPM99eTmOl7WjBHO6tyHSvJp2QyOecizleqYcD7Z%2Ffh5iDMeh%2BP7tc8Avasp7tuum0yvqRNURnrvJuMXBefZ6MfPTQpzlunS1y8FN%2BMqz4udlQXLHV2zxZ5zyXoBr4qCgooFe9GyUnpaoTI8pDrnV1Y%2BnkaYcr3re35teU6rA%2F9%2B1M8Plf69ggZ8m97nys9DhzojP%2BWwVX1YMpMkSlnYUVd3sbbItEbQPa1z3UuC85uku5HzpKDR9HxfJ1A4lmxE%2BueKDZR8%2Bn%2FosoIr6rDrqJ760LIMNmlI3e24rtpVLu9GvEZPGtYp0y7Pf09d8qbHuqRKfux8cahw%2Fvkg92pf%2FRTqiSww31WX3RTc82YVDy3%2F3PmiYBAhX9fdVOy4uwx1cJPO8fNjuMbh3jPpsI16nXS8MFzTNlfVGKHtfWVHcJ59Ttb5d9mkAzArTyGv%2FxI%2Ba5X06BABehIq40lH3xNlivtWr2E%2B42cXuvU2CWGq%2FyKXyfettNrpDbTJ528vELKjsVRWsNctK6WqDa3BVVx7GlDXERexadvobNvw%2FSlCwznq54dGzE2H133fzeWmYnmp6umOz2j7fOvZnvOOstBTnQUkS9672hMY5IPzbGuchx3PtMk3wqo0WDeduOsDle%2B299tY6df2PO5GaGxPDpGWXTbYQ7ul6crUURdpqtkm7KUu6TD4i9KpUHOG5r57Xr59%2BahiZ89Frrw%2FrFDXva543I22PS1aT6rONW77%2BzU96qqNWjJzrjMlaxotI8QIje8rO4Lz7B7%2FS4xZfpsZH5Hbjf0E6BWCi5g9pnWCyjrvLZqGfhl5ev5lyIjz0MuzqHnTWUUseG0%2Bf9FFwa5RKS27aOxEqLhWO957qPLRttHZtuHbdUOn6ef%2FFum6177Rx5wWHr7%2FSe7Gtv39bVeN3bvFT6SVTSc16pTK7w3PaBYF55cd1wfnXdbXhw4qd3xfrBH7s5bnESMdJrnrtegoDYsa7GeRZk612WZp0nFdPRlgXVKlLbQ%2B0CNz0WYYlsi3XSe7Fukr2Kpu0wZeVyg7XQcyZy3zatd5fV97tHVZb7hLQ%2Bw8GitGaHNfKYvVot7jw2h6r1s5xxpBL8r8y4ILfd0yg1YOKmu%2B96KgAF3F3rc4fP9m%2BsW65wqlzU3tuxtaV4FaSaV0lfu8sx62W2u7FkLRKrPvY1%2FXBo3OKte2TrqsO073Q1egTZ6FnkYsy0VlId84mrb4%2FDt7GnmZJxFWY57WuPFXem%2FJashXXQfnJfmiq3x5qKCyLD%2BsuijHbeupBs8vTg9Yj5Q1zluNqkXYZqnrx5GGWJf0HbwdTGhv5tP80Z7AZ7see3mAwLvpNR7awMF23DEpuj9EeNT3aRJ%2FN4K6ZWPV8Pei3FcKZnh0EqsNRawA%2FbtFBJI%2FR4v%2FcqNq2WNaJ6is8978Md2UTNOIVWke4qbTSaATAuYqjaNJpOPPLww33yzoULERNISKq6ghVPhcdJu9Ygs6KVZtz6tBw%2Fms4wCi6efHCjSaNBRidVbNct%2B%2FCDemfO%2Fzg4j5%2BnVSvDJ828cy6iywuPe9JcH5ZVf1eJV8Gnv%2F2wMHlbHr8V311LplOqza1iM9NNhj3LPa3CuizXAbQF3Sdqp%2B122tqrpow3y3K09RvVSwKviyzqOdkdfRqXKN%2F1nz9%2B%2B0%2FP0Y1%2FBBi%2FKanznXVzv3Q5PfK2in1b6vlDzOM%2B%2FxHn80AXo%2B8683C1kUBVwtekzr3NgrBSvhWCa5z7wcwLXJN0p7f5a3pAK6qViwax9%2FwZSr7NpsbhpvIwYlMSquX%2BukdZhBURSkz0Iv4cEb020bvpEaztE%2FP1Ts%2Bd9dRCo3VW70jxre5PLnkO9IfF5yLtMWyfxdZ0LoBJgXvPd9iyC0zvTOnR0codO3KDifH7A%2BWMUMoPoMKuukfaR6atkyHVYDOa%2B6DfZJ08A0BFSTgV3XvuqSScu6vetn8cusC%2FJD1CAsBEb5a%2Fu04L6ab2c9rPlVTyMv%2Bhf7Gne94HLZvT5WB8x10o%2Faa4UUdNYs99UNFQdaniTfb4F2lYxYrAC9sOEQEj1mj2mdoLJqpZvvkXnV93MHB7qBNtmCrqgH622sgl3gRdm1KSjQ5x3fINqc33lJ%2BSjbd%2FdFw%2BlQbfPMEJ4L7eLz84uqLVo8H1yroRAaXNvXZdUwcMyfw2YmyWZWTv6Rj9r5Z9fz9QWLXG7yS9O1E6J0toYZJ%2Fln8n859JS3ki2CstGqmKtVH3Qhqw4XVmp7Hvnfb%2FJc%2FL59s7tqsLd%2BHKVgR5NVhDRcHyrv9FyXdBH8NXVTcu%2BPPVKaXyzuYpPOJTuCXFW4P94UXIP3HbbBpi3bFm1%2Fv2q5PM%2Bl0TrXAXPe4HPzbYhD3tuatLke7ypPTWZQhXxVtEvKEGK1wQfo07Ib7p4e07qFOeoe6AWrq2YXeyjTJQ79LO%2BqQuXzPpdeu4KNVsFawXTeVcFWH%2Fkb6SGnudc5v9L3hvQrynNvGlTmbRudbRu%2BkwgN56ifH0aa8g2e54doKJTsCVq7x7dkYbirPWWhyYySfSO0DwvO9zypuXBNnem1u94bgvNZLl3udTBVt6qia5vVSR8jbTV6qKCyan5oqu2IZYzHVSZdd3aUNNhf7wngq7guyHfrltf2w4HzzsHrklhtoVhCEFwWpEfr2AttjFXu2lxs5aXtsjCv2Ln5qiQdP8ee7l6UDnU62LtecHlH2%2BBD0rJDrmBQbJ0cdtR4kku3Rc12e1FeaXJfucj93mqsz51v%2BzHSTegvgWS%2BVyPrMQ2NzPPcRcqC9Dr70tapSKu897ve7QH1yOQzcTaFqO52Kq92LPKx96a2NTX4QUEByVzGKtgF3%2Fuiwne9zVUGD5LD9S7WOb%2FJrrTOnvUK5egid32ua5aPtg3qOy07hfKzCh6lx193IaRdz77drXJ8oa7J8sXjgob4vOlz8VUaCnu%2B%2B7Lhojv5BnlRz%2FGHXBDfJCCc7so%2F2Xem55c1rPOrpGePZfxW0IFWtW6u09G6KgnOs39%2F2GNw%2FnUl4%2FS45sn3C3dNwr0u%2B7%2BrFveYSUH5qtsR86HGdZp2FMS2DY4nEQKq84KgqO51eb2nkXhRUEbzdc%2FXXReqBgwFO5rchHz3eGB19RDrkqoB%2FuqA1cZlyM%2FnBXknm4HzPNIztq9zgV7Wnszn0WXV4C%2B7h2bHlnw%2Fo3IzE%2BImqTYS3%2BQaL1rWF1nea7Ig79We%2B0u%2BLr4JddMsF3PUuZ75hfuuQtnpPGPWGekO5ehJQX54WZAHmtxXHlXoIBKgt7jZZs%2Fbfsy9f9NjWvWZ7zo9pVXeOy0I%2BHpXMtrSpMH9vOrn5yqs82T%2F1i2XZYFOhMXK8tN5b0q%2BaxEhjWJUXKsa13JZ40ad%2FflNKDuHaFC3bTgX7XU5qfkZqxqfvx2gnCX7twhbtFzR%2B7zg%2Bv6r4jldNQnOS6bIvywJDhs3%2FIO9z9dn9Wj6uZchXya5Bl%2FVXu06AVZR4%2BpjLk2yfHpvCJ2roTM6SYpX187%2BLZte2rSj5nxffqwSoMfMDw1NW94f2gZlkyplu4J9jcR8wHsTGtc3ucAoS495hePOT0duM5o2iVBXL2vknd86qkvO%2B8xLEeqLLD%2FcS4r3dT4LHUePQnurzbG9zAVPk%2BSvgyDrpHxLtbJjfxY6tV6UdE7F6mBoO5t0WpCu0wbXarmnbF7kOq9WBZ1%2Ble%2FLoe14kWu%2FzA%2BYPb%2B7Txe0Z7NrcycpHsBblsQgtWZQlawhNJTdBToVY4p7pZttKPgPk%2BJFsZ41CFpbBUXhoucXKhjKRZ9E%2Bpxljc%2Bfbr12Bedfr%2BOeiqJOA7wo%2BM1PSb7aUWFu56ezSFNJOw0wapaPaZWV3UumcbXdIq3tVMEmfqsZoGzy7L7vznpy77U8tibntw43qUWD4LxozYddHQxtO6wmez5vu54sWzvhvMH3%2FFrjvfmZWOuhBOfbQXpJWd40DrMRpus6U1gjrgi%2FjJ0f2gbHLaerNnkuPlZaruo22Es6SarOgsh3XL%2BKuJZGE%2F%2Bs8fnLjuqSsxp1SRcBfpQgPX39kpSPrG6e7561%2BY6CTqDttHvepAMgBN%2F3StJt08HQ9tn0n1pe4793Wda3OiS%2BqytDutee5l62NsCBs2ZRe%2Bt97pV1zsxKgvOy%2B3KlumFXu%2FTAs1yOOkCvvF1OqACKGphPK1Q%2BsYOiaD2n2bSzUAk1eT3r6Oa5q%2BEyaVhBZYHGzxU6Mtqk7XcrVe8pjDcNGzsxK65ljbz4YUf5WCXFo%2BWzBuVjUTMPt2r4RtyHfhHx8zeNkp%2FrbBlTo6FQxeZG%2B7nB4j8vkmozSZKWDf%2ByhsNqT8OsqMFXpTFWZ4HFu3vK2lly%2BC0WqzRcs3rp5x2N7llSbx2WzoPKNvnhgEF%2F3cZdlfNqeo2XdRvsJfesvfk3dDw%2FyTVSnzVsr3RaVw%2B4LukiwI9ZZ2T3qF9K0nXzyFub1bzLZny02lY43JN%2BCe3DdUle%2BNgi3w1h4GBfvsrfa1%2B3vC%2Fntxd%2B3sPjW3ca%2Ft7LZHened37yjRWrHZsYkxxr%2FV8SJiKWfTsStbTttyRCSsHOhXfO6mZSfalQdOb%2FocKN50mI3Drmo3eSe5mtQ4V%2BjKp32PVaDGjooXhkv3P63xI%2FjqddHqAclPn%2FGotaLQ17S9%2FI74O0%2F4WHTWm2zZ8i3pQmwTFy4qfvw7nmK9%2F5qGRtexgD%2Fai79q%2B9n9P%2Fnw8pGy64p0q0%2BxDg3yWO9996XmTq1crl4UmC%2FHsWlskNNiq5rVVjfdehY6L89y9YzG0XvXQQMnWl3gVyvO0ID9VXYdlWnCtXzU4pmVX%2BaFhGar7mTEaa38vKMevI1%2F%2BfCP87XY6Zm2d7bTIOvn3dHy3XmxyT10fra5umHeuku9nx8SuS6q2hfqsM76OPIa1Bl4UnF%2FWWZ80eVQrtC0WBW2sywjHndVfz8I6G0%2BT8nU4mizi2fYa5%2BucywafUSeIXOfO8SZXfi%2F21L357YX%2F0g4%2B0CzRojbXvvT5ek%2FaVdYb1g2VB4EF6BFuuOHZlZ9yhXgz9e%2BXksZKnZ7SKkFRvtC36Tm92%2BJ3FxUKxiJysHFWcHOc5ILCsxbfW3uxspKF4aosqJQ%2FvibP3nZ5fpMG5WMeFuzJ3%2BQ25WPVQSXWNsD%2FruEcOc9OCxrVWcfV5%2BT79Sa62okhfy1f71iHYbNoyuPk%2B0WQPlR4lqxoi8EqnTvrre87q9DwL6vHq167ewXXICuD1zsakZPccS9qBhPZ537MlcfrpPpaDYdudK%2B2Gt35RX%2FOKwQhReX71w46oGLkh33aruAe47n4%2FLm97SAtL3IN9kVBwH6eC%2BhvSuqS%2FDoUL1se73nH7YvaeWfrWewu65Iq9ct6IHXGTQimixbeqruQ3q77%2BuuYjweFui7ruH2dfL9CfJOFb4uuceUAv2QRwHnMaxXq9bNcQP6XNKnZIffdAsk9PcI13VGOP2zlp2WNa9LkvnKenKi%2FtcyYbVbAvCoIbCahsVIlKFrFDIoiN9zrWFbIkJ3ugZ7d1Aq24kgKbgyNg7UKv5OfzruoElgU7AFd9P1dV1zLOmld8UZXd6%2FYtg3qtgF%2B24Z37c8PN61XBY2XveUxS8OsJ3rXq01jMDxXmDWgfi7IH0%2F3HNt3C8Ml1Vd%2BzR%2FT3SZ1QtWGargG95LitUWeFJxbnZVhC%2FdSDo2B%2FIjftMpaJn03ukvyw3mFYz%2F0YlZdbfPZ9jwmEToOOn3uuGCbqaL7WKVp7gV7nm%2FWtGij6%2B36GqVvg7pkGuE6tg3wu6wvNveQovUsnjZclyJG%2Baly7Nnn%2FlJU19VpV0a4xoeoN0tny%2BxI5wcl5ztLvt%2Bl4eB5smStkHtbr2fhNa85I6L3NR%2BOSdsR9MaZv0GPaeOteSpm8J9aVEY%2FV8z0z3KV03fbupU1SiMWvF0FJLvxX%2BcavdOaW6RNSm68%2ByrhWUGD%2B18NT7Oz7dbqnF%2BdYKTEZhua%2FMru1%2BH%2FYjaoY29lEvumMikp%2F1ngmh%2BlzsrYvml7F8n3jxHk0%2B8fbRsKoZ7Lj%2FhOyspVycJw2bn%2F3nBrlYuk2vTVxgvxhJH7q4L0fBEey7ipcB3rXPOvsyTCCv7TXKP1ps%2Bt1mrc9%2FI7mmR5%2BNmAGjZtF2bq6jxa%2FX6kfbPrNtg%2FlJSZ1VYeyDoMzwuOJd9xfVlx4aVdutrfvizv%2FNZRXXLWMi8cRbAQRtPXyfeDV1Xuc73VIztWqH8SVnev0kaZtDzeSct2UdV77L62Tzaj4Enudy4L6qbvVtbvKdt11Z7reiBnVNouEteqsFftMa0TtLYIiiYHSO%2F8Xn5v6zRKOyp4q63rMU%2Faj6I3KdgvIp%2FjdCAVV6uGUMjjlwV5OFuU8EXkRmfsrUxWHV%2FT1VYaNRlF3%2Ff%2Fy1gNhXAtlnvSe%2BM6qffs1978WnGk5bxlXs3qjqKRvetcndxmD%2FT8e4vKxpuWKwYfJEgvaHiV7kBxoKAyan6oWidGmK66Gsh57Wqwl80EW%2BxqH4SR%2BPw2SzcR2i9d19VDrEu6CP4OWWdkeWW%2BJ58dovw0qeseVigjVa%2FRh5bX%2BEPM8wt1dn7m57qkDbDK1ffnBe3g%2FMr6fT1y0VVHTpMym%2F%2FuO8mJaBugt14Bs2S64tfMujVVrE7QWjUoWhwwqNsU5EkuALrpoQGx7%2FPzN8ZpzUUpahXsgum8URqBHS6kUadxM217LXfsfPBka2X3tvsCtwoAOlxQqurnvywI1PZ1%2Buyb%2Br2KfKNf7amnivY97Spg6KSxGqZj3hSc53bQ3GaBxd8K8sDzgvN4mgxcaHCvKnba9LFXc%2FTgpcr2pzXvLYsI5xW1AVy1wR68LSunJWuyXEY4vkmXdXWsxn0HdUmV4%2Fww8Grj1b57yAHKT5O6blXwXZOKv36nZV5qu8r%2FPlWmt5el96NcvTHbrhs7XEuniq5GupvcV36reJ8UoO%2FJ%2FMuGBXieFD9jeV2wSvC%2B76naCFgV3Ly63K6naNGndYWC8c9DFrySUfTrLgp2yXTel6HRXfe12lNxxlLnWe0oldyOvWLLykfdm1DsbUxi3%2Fh3fn7JKPrFnk6a13vy0%2Bs9DYW6DfuzCr%2BfL2c3DcvComZnxHc3zhYjtJfJ7rVF6swq2fve0IjJn%2B%2BTjuvyWFYV81SnQWXH%2BSHmecR4Ln7ScVBWucEe6vXtc9ie7fI0%2BX6bpVUH16CLIO2s47rkTcm51P2eOz2UqzaBbtsyeN7j%2BS4j5dfVgX9%2Fn6qzZYrqgumOe%2F9lz9mtq07hJveV7%2BqAA65k36sfYyZ2mwKf7QEZbk4XuYr%2BuqBQ%2FbNGUPTPku9b5Z4ByzzeU8AaKRglXifliz51fQOtclPLP4ueFYhZxdUv6wRrRQvDXTVM4yQX7Fd99jZqsNggrauWj%2ByZ26xBMcv9Vxb45K%2FLry3zRNsAf91xmhcdX9mz6IuS9Jx3UG4a%2F35Yn2L7Pdnzlg8bloWL3M1%2F37Yu04j5NHvuMDvuj0nB2iJJuxkoZe%2FNvi%2B%2Flsl12HptyI3uqs%2FQdh1U7ssPsRq1bc8jxp7VXY%2Bo1Wmwb%2B4f279zsbV693Zd8CzS8U27PP8D1SXTUJe0DSK6fhY%2FdrmctPyIrtaViHUP7yJQzAeEi4jX47zgnr3akZ9vcuvInIdrOst9zssBrKMSfYp7i7qh6Jo9TQ40A6RPbUfQY2f%2Boh7T86TaIgxNAtz8zXMae%2BQlZMr86PmuZ0s6vYEmFWYYtHwWvVKwVrIwXJtew%2Fy1nES4obUNRqNey7Bw4rKgkfGk5fdMWt64u77x752JUDKKPo3Y09q4oRDyYWldGf7%2Fce7X2nQuLUqC9qrXf90yn2b5r2jLs1nJeys1RsveW%2FZMd%2FLnSNsQG9tnNfJU10HlvvwQ6%2FvankeMGXtdnVvtBnuQH1V7kHQwtX1L13sK91mXtF03ZdABerJ726tDBLsHvX%2B2XTA5wiK9%2Bzza0wat0k59nLv3Z%2Fn9%2BQDyWhdrnjSqG8I17zxWG1WA3kUv%2B9aCEvsu3CpSUPSq4N%2BuYwV2IY3yjcRF2bMlXT8fVnOF9ecFAe8sYsHON0JetjnX8D3fLabWQaO60vl1eC3vVShrbRu%2BdX%2B%2F73UT%2FshDBXngaYTr3nZnhad7btKNthjcU48u91zjXTfO1iO0O9ZOqNrAnNRpjIb0KrqJP%2Bk40M5GPN83%2BNV83bTckac6CyoPlR%2BK7g1JP9NVJ7l8s4iYbjEa7NNcG2be8R7ly6HnnQh1Sdu2UOw648X2Iq8t8teHQ5afsP3o54bt4LPc%2FXPZoL6IOmutgw6TtxV%2BJ%2F%2BeJ7nzvOp71lfMWTAR64ayWO088rkPaoHZNiPobW%2B2ZZXxKinuMd0b6NRdrCr837zgvN60DdJDw%2FB9vmJKile0bNQojVBAFjvSZp7UHEWvWrDDdN78lP8YvYaLGkFJ142bTq5llU6sBg26tg3frgOISp%2Ff4Sh644ZC6NSald1sShaGizFi9nZPQLjtThfXb8faIlW%2Bp8kUu6JV3V%2FEvolvN7STbx2wtfJYydobr3sKKg%2BWH5Jm25%2FuSoe6i2F2PaJWu8Fe0pm2fXyxH9Pqeputux3WJfOGdUkfba3CToH09TEEZRd1goFQv%2BTz1%2FxQ5Se02bL2bNWBmr%2FUwbm%2F3zQsT23XxlnGvJb5NmzF%2BmzXud%2B06ZjvsL0Vq55sfF8JaVu0aOT7WPf3MCL%2FcSwBemcrYO7pMV3UOKYqBeaqIANmn%2FOxScM%2BVMLvCyqlr1vK7ekdG8KzvIWBxKbg7qmc9xbssum8kXoN6wQlnQWKXTeEdux80PR72gYArRrOkT%2B%2FKCBsO4reqKEQGjX5xV8WufTN%2F%2F%2FLSDMtFgVl9%2FzQHSxhTYmy%2FBR1gcUdW%2FpcR86Pm2u7PTp%2FXaXBHd7zPvl%2BR495T0HlQfJD2%2FOINGNvMsAG%2B67OmaijaQfaru%2Bsw7rksmFdUqVOXx2gXG3vBz5JKm4vG8pOfibmvM59ok35CYNN2%2FfQyp2eJWsFVB2MabtgcttV%2Fnepu9bE9j2qqMx10RkXq%2F7%2F0NHn1i1zRR3wmyC98Uy5rVlwb5KBbbXYZpG4TlfAzHpM00TLemNnNb6ndiMgLERyr6DnZHPhsxvCq309W6H35UHB8W4H58uaFdK6QSfBrulDdRu981Ax5xfemrco2PnpvMsGC3ZVDUq%2BXpeIvZL58%2Fs1ZoDRoHxMCoLPVc3K6bzl708j5NlNPlhX%2BPxlhfI8z5XDryOcLUYe917LrefMs9fdcAMvWrn9Mhfk5QO155HyxyL9%2FHXuGKYl6dd2ZHOfh7nGaZVr2Wj0I5z3y1zwnC3G86LpApRl%2BbWgbsg6dS%2FL0i%2Fk5euCeuSqzvT2JuWr5jXtYuSpbXAcI%2FA7j1FXlaRlowZ72X0r%2BdaRN49cDs9j5KVk9%2BMYfdUldb%2Bn62fxy67z9n1pFjpNroqC7fB%2FWT2WX%2Fy0yX2iTXC0KGkbX5Xl0a21l74Lzmt0LExaXuOzCu2JfcrWkWjzuMHrgnR51fWe9DV0teZJq7phK1bLz0w%2BC51Gj0O5uNnXsRnywYNQb08i3%2BsGEaC3veFWuSCXoeE7bRgU%2FVrxe5ZZw6ogeNw0aqehsbvMFcS%2Fh0w33dOQu6zYU50vtLOSgH9fZXovRsMrFIhXuSBw14ruOwt2yXTeq4j5pWhl%2FrtJvJX561Rc5wcoH8%2FS8%2F0pl0faPqe1avn7mxHCun5OijvUJgVB7j7PC8pNm1U%2F88fQ5BnCTSfdaiugf1ojUGvaINwub9kN6eWeDpp1B%2Fl0HerX%2FI21Tvmpky%2BfF9x4s63X3sYKGMKKvMvccU5Cw3UV0n7T6L8T3jcp%2BKj5nkDsvODvTcrXD1XeFGG9ha7qw%2FzvZ%2Ffkf%2B35nZe5Tpk7BUF13VlW2XH%2FErPBHtof%2BftWF6Npk4K%2FN8lL%2F6iadw5Yl7Tdsm%2BRdK%2FovvQ1D4a6JDuGf261NcralZcNgrlJy%2Fx5kxTssJT%2B%2B9NcXfdTOO6iuu6m5m4E05Ztk%2Fzvv2h4zZ7l8vmkIP%2B06ZBbRtylIYbos2CKZlxUqL%2BzvPdDQV4sCtI3efw65MtFOO7fcvHhZE%2B89s8BXYeoU9y76nl4mPvsZRfHFBpJuxbgOgsX9unW68mei%2F08qTZyXnb8TdR5LrpKwStaeOtFyXTOfQX7uqBxGvvGeFNwA%2Byj4ur6Wb%2Fthtz2Nf%2FtwOV4EqtzJVbDomRtiWmDZ%2Bdilcssj%2F%2BSqweuC27S88h540NBGpztSd9O6vFw7g8L%2Fq1SWaszFbdkVffMm8iLwFzu6FSabd0nLnYE5%2FvWG7jT8T1hXx0XKz%2B0nVHUJB1%2B23NuTawKGpptG%2Bz59z%2FvaJulGHX1usZsj6HUJVXq9M4fHQn3pcsdx%2FNkq84oald%2BfYSn4YzAtqOilyXXM1%2FXzcrquqTG2ip115MqKZMxLCsE%2FrW28wx5dZVrwx28zVW1bERqozepexc70u%2BXZHen2jSXLzd5c7qnbp8nA9IoQC%2FI%2FOuuVh7camytK1QskzaV0NaFf96yws4u8s9Zr1jNdInRgPitavpUuamVLLxVtLXXzoLd5XTePUFJzO3W6lRcXT%2Frt3197m3l17rf0%2FY5rRgBxKLG51ct00V5q%2Faz6EXPbVZtyIZ6IOugu7fduCjYp7zJTbpuo7%2BscXGwrXdCebna9z0xVpEN3%2FW8oExeRzyfZSh7dY9vFRraVRqsnQSVexo2XeSHtsFbk3RY7jm3Jn6tkmYN2kNvt67Vy46KYIxFUzsZIOmqLqlapx9q3%2BnQCXvZoH2Zne8vLR7XazUqutXOqBusfX22OqvrapaJtjMcYrX5itLpQUnZbXJvfhlhUd9oOpwFM42U9n901mTtqlCWVi2P7Sbcj38e0GMGX%2F3YorAvDlERbyrPMK3pzZ6KdLV9sZpUuqESeRaeY9w8V35RoRJahIJ606SzIhSMRYTkWlT8%2FDoZ8WXBzf1OQafNvkBr%2B%2F%2FfdlQYFgXHcd62EBec37rGtVx1XD6211Go%2B12r3LEuWv5%2BjE6VXZ9f9Vnk7HGH5%2Fl8m12bmvXCpML5fcgd73LPd9zNfeaHLlbmDmlwk3z%2FvNau9P2147z6Mj2mO3saGesY95fwCMid%2FPlnZTlW3bPp1A2zMx4nu2db3IR6bx6jTm8Q%2FDUpzzHzQ9s6sUndFDMdyz4jX0e8bhJwhsfoLhsOdlQ5txjttLc95Z2mdUmVOv2gjfKwfswi1BcXO45%2Fs%2F%2Fz6wj3h7%2FUqU0%2BbxOkh7ru0Z6gaxHKwU3D%2FNw2xjiLUd5L7uP5z27SaZK1GbJ0bDJItUq6jb%2B6%2BOwm7cQqsyWze%2Bl8aw2waYX6YPM4Sfb5i763tdvlh%2BSIRF7wq0mAVnThl0O%2BwJyOPssH1Myr0wNsF9bHeZ0VBOnrQ43Qof5Wlxzd8Re1LVdDG80rS3t1nXvgEeTLoylTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABH7AdJAAAAx%2Blfyb%2Bdpz%2Bm6eun9HWe%2B%2B9V%2Bvotfd38kPzvpdQCGO%2FN4F%2B510yqnNT1nxTkgamUqZ2On3Np%2BOxE8krj%2FJL%2B3pvc53wued%2BL3Ps%2BynFf0%2BWs4FpcDPh4pyX5p%2BrrY%2Fq6Vj8x0rL8rOA%2BsuuVvfeJ1INh%2B1ES0KTBVPDPemVPy7k8UFg28gH24ofkfy%2FKGlfpj8kJpGFZYPQoS58IeW%2FZ8n3K7rDTZhrhfLPXLC1zWX57mJbJtWxAGHX%2BS%2BdUmjeeHcmxZ0H20%2FR1VvNXs3tO1nn5ID3XeyO6lrPc%2FXSVnt9cLgdO6ab2JN8rK1VOLxCtMop5YmlSa1ZBycjg2QjT5cWO0ZxJzc8qGv19VvLe%2FPuMGhWX3d8HfrxvWo6g%2F8tMCiqWhY9HctzXkcrCixFdy9HPRuO0%2FE0S0MCd3N8XkuTk3M393ehk%2FZHJfPC%2BGunI3vmO%2F5tF%2BKxFQWOt0vvU30eRLvlysg7HXPbaVxedeySLY72PZcF5Sb15k74u09cv6X3kh%2ByV%2Fvkf6eth%2BpqXfNyTup2kA02TU5mNxgkxxZ0mPiTfFhxREZ6utyEfCH7Kg8flnoD7VDo5pjv%2BL5vm%2FqzNZ5U8QpCl%2B%2FPc%2B9RTf5bdX4%2Bh7IbgIT%2BrJHts5GGF383KYzYFuOj5%2Bgc7ghZOx7SgbTPkQPSiIDjP6rqHRfVguP9kgftN%2BrvZuV2XpMGxlwUdsgBAYePpfW6K3fWe9%2F9%2BAgvEnVeYZjlrkcamK4%2B7TF1UfaRhx2cUTQd%2BL3VPPm8V1U3nAz%2Fmz22OuaQsPBvBtfTIHaNjijtAHPmG0q87GhSTpGBkcIRpMq3wnkct0tio%2BLjdLfi3uuXkuWSkQl0y6Fk2YfR8kvvnec1jfjvSa3nHfYGxMcWdujeJSe4msc7fIMLzQOe5G98i9xnTgptN6R6dYbGtfGN%2FlXyb7rjac8znuWBotf07JZ%2B983jqnO%2FWzfV86%2F%2Bf7fnMsmOqes75311XvZEXnc92mhWkZ1EeyOeTfB7Y7NmaD1KzaeE3DfPm3utY5VrV%2FL6Ns4Jzyb9nO99NCxqHXadPWblbhzRaHaDhtAoB1mw7iM%2FOd1%2F%2BLOnU%2BLVi%2Fl1Web4%2FfMfFvnQvKF%2FLqusH5OuC7cCzSl7cV7YKviMrny%2Brlt0d33melK8nsGhajhoEUbW%2BJ8vX6fHHqkv21sFN07jK7%2B%2B7%2F%2B6oN%2BY7jrcoP65CnbBuUM%2BchWM4L6hnFjXyW9T7R8FnfveIUb5c78pre%2FJIF%2BXhboSAe9007zW4J37X1ir4rqJruAmwF2X5r%2BA4v8truWNZV7y%2FtLo%2FNiyfpZ%2B%2FoyztTB%2FgNAP0%2FBTTNwXvKVwlOKxa%2FX7PdNfr3GfNKuzx%2BWLPMX83lXhr%2F9DfK%2BwZer7n80tXRQ4r3v9eZXplWAX8usIx%2FSuk43mNc35f4xpf75pGF%2FYV3pn%2BBSt3f940Bitcz9%2Br7stc4zq%2BCe%2BNsgPBjr29d70udqTPx630%2Bdg2T%2BYbTRXK3d481TCdPhZch%2Bm%2Bcl8WSFSZ3lny%2BZM9nz2rmu51V%2BuvWbY%2F78v7u6ZzlpSF9zvq7%2BsI6bJdbp9Fzj%2BtV2Avmcp8XZJv6qyO%2FaZo14WiXQtq1iulj74UHN%2F7GvXGiwb15rOa9cybGPVMwXl%2BrHH%2F%2BFxUHvfsJlH4OS3v0b%2FH3DmipA6fNigL73Ov2Y7v%2BFjz%2Bu98fKnBvu0vSsrY51ir1ce8P5a1jyu2Y2c1y%2BfvFrsEdga7Be95U1CxzepUpqGC%2Bti2Ai5pnD1pUMFf7EiTNyXB4PuqjZ6CRnfV16zqzbzFTfZ6T6N5VuH7rxtsDbPvZnhe8zq%2BKWvgNigHFw2u1VnE9Pl935ZsIQ%2FW3aLq91hB%2Bq4t0UrK9r7zqRT41HkecU85LW101zn2kk66Ng3K9yX1zcd99U2N%2BuO8Zv0b%2FZnWqoF1hc95UiFweNF0y7b8tS%2F5vknDztHPuXrjY8G9sk69MWtwbZ9UKOcvYt27Ip3n7%2Fk0r1nOywYLfu9rK7OS438SuX33rEXn0s7gvsH9uuxzztp0jnd5fywZDKqTby9COv0eo20KnE5wXmnkqKBy%2BdigEqzdONwxAlT0%2Bf9qcExnJd%2FxuaAx8bHiSOpZg4ZDlVHE64YB%2Bvtd510SwJ9XGPlqcmO%2B3jOy96%2BG17F146ntaEykPPkiYudFaVDQor6YltUXJdfvWc28%2Bb5qh1nkNPq9yihTKNtt9iue1mgEftz3OVUXxarQQPxcId1i5J8n%2F2qxoOCe0bbJrrqyoIO5cgC7K983uL%2FOIterHxvUNfs6uD62qIsnJZ8bo37c17FcuWOixf0m2uJzJfkw6ihqyXlO2tT1FeuUyp1%2BDTvHJ13fH0vK78cDlE8LXoIA%2FfvKu2Il9ZcpkKEyP6s4Je5zaKhNt24E11UbtHsCqT%2BOZ6uxcVFz5HvSoNE0qdC4uS64wV1XraBLRuT3jUhPKzQ%2Bn5RN59%2FzOflzuwhpN9kx%2FetjjePcnqkx2UqzfdPELlqUhWdbr6Jz3P7%2FWcX0%2BX1z7Sukz%2FsdgefvJcd0XnAen7sYmdk3GlNwjJ%2F3fF7VWTNVZvmclZz3pr453yrf%2B6Z5X1ccBdzk0YuC6%2FWmYrmeNAhezsoC3hrHfV0SzJdNOZ5GyD%2FXbQOdkiD%2FzZ7%2F%2Fxiu%2BVlB2r%2BpeF%2BoXZ72dUDtqTf%2BuE9u3VvfV%2Bh4mFW5H9cMzovqmbIp%2BC86vH%2B8z1277fr4fUlbYPs12XE8v2%2B%2Fp8J5PuuiPs1d%2Fxfh%2B89afMd5w86lz2V14o66tiif7K0Lw%2FXYvk6fC%2FL1X65li%2FvjRdX7455OnM%2B5slblkZT3WzNedrZNRScgQH%2BxL4Da0bv5ZscI9McGI6hvKgbo73fc5M9qNg4%2F1zjfwkC7wnd83NVjveMmMKlwXNOaDcTPFdL9fcVG8c5zK%2BvYKWkU%2Fl5zuuSu3vtJhHJR65nniOnzvmLguW9a3qTNmgU1yujHCp1nFzUajhcV06lqvXC9o476%2F9k79%2BPGcSQOc6%2Fu%2F%2BVGMHQE5kRgOgJrIxg5AssRmI5AngikiUB2BJIjEBWBtBFIG8CVT%2FBBtxy4AXQ3IL%2Fm91WpXDsrUkCj0Q88Q4NpI2bfHgnlRfXrYUZ7M2fal2Gk3IMjJejLlEA00M%2FqgC2ZKZKRVvMdhg2pmfWZeGb0ysBg8ShV7sT3tqF295Rnnck%2B1pKZRe4qG893Y%2Fa0PMYsp3C1wlKbsCvs1jCy6k5jU9h9XxgLHM0%2FBiaDWoGecOqwRoIOAIgFtRPmKO9MMTKseaZkGG%2F2PkYqqROMaq8jRn%2FA2c8oSOwHjIBlmBpkM4PTiWc0OLbHeMkYAJpplr16nOc2U78YSd4bGJgphf1vzgwmK0Yd2txOn%2Bg%2FE82gQyDIq5h6XDLexTmkruEsX%2FWUgaOj0cGFQBDIOcySc7jjMpNcykTdKT19pGF8QodQtdzEQiDHVjOQGenbY6btmwjfyxksaBV%2Bj3V2hafvlYx6zhTtMk8ZZAnEEGNFWSaZfI12S9ycWhWi1e9IwjuKtOda4a%2B3goGZOtdgi7BPzBWDGzmeWRYAgF8%2BQdccDsY5zGqsODCqVS61lpxKOmEE43NlsrXWBIeBBKBltFcrKM%2BcGTQPGA6eG%2FgGbwjwtOeYKbNGE%2FQx3y0NxpfKJFojn0Yrn0SZVMyZ5hkz8Z4wAzbOKp%2B1ds89c5XHWhucxxKHBHvD7bvuCc8No8ytNABPGAxJ%2BUyIcvfrOlbqdcOQyVKQtG6ZJ1evFTZjrfB7c03fFuhhk6N%2Fcm8okN7CoJkNJwaNqiIjNgaYKfrAljFAMxEMdLSMFRGamLB25FczB8efhDYlm39U6slSGp9yblICAPxaybn2cLA2l2ONBPYzjvGWLL30zI43kfpuGTNZw5Q9v562aLWzBJlnJ8uE4G0bSU4mCYMa1RFPm14LZxy0gwwx%2Bcy0yyqpcmUIIDmJDOvKNeq6No0t0Sy3jLx%2FrulLgve3DHtTKW1GlUH3B5pl4krbm%2FJpM5Sp4t4%2BQOm%2FwH6MmHZjqLAZmtnfccQOr4VyDB0mVmr7J9fvcPxYbFCOOkvijeKy0tqcmfBwsaWg74UOwdwqtxOtuTP6GQcTjuYfEw6GzNGnRwX4lPwbIgBMXiSdvxX%2F6dxRT%2BK5BePdriFbZXrm1Pnvbl%2FmRaIcukh9v7tyIbhw%2Fnu3%2F0wFZdgIvtcPws8837tx%2Fvt2X4cNQwc2%2B%2B%2FtYnqy554T%2FO7%2FlD7dsY7cdV73xO%2F7qJS6GXXcxLs7ST%2Fa8yOTfKgZUW5i8uUV7MWC%2Brd9GV09NQH0tdO2NdNGxOzCBaHDkr4Xa%2BsLog%2BaQFQtt34Q6LE3HHvgPrtjPuf%2BfmnLeGr%2FUv1qlUF%2FTjPp4b21Z52wrpWtm6nz77aulPw3HhvUUe90ZW6D68rxUXeM9ovaVY%2FNeFDooNuerp3Z5Rrs1NQz4Is7Zv02ET%2ByIfTclNMkZTv7O4%2F270Lgk5KxvzU9xA9WDo21Q6EE8fkA1f3zrccv3jBs0o2jX%2Fee%2BGrjsaNm8NQk2J39zZWVn8Qu1Zw2fwX%2FyPJ3DHveMfS8lDwDkKCDz88pI7nJZaRizwSTlYCz%2F5EqhEjSYLhjvGaQkGj6kk3KqT1GnDQVIO4CdThjOAZtItBEdIeqx0Nic%2BZwbFL9peTTKX%2BnC%2BjU%2F4PIN7IXZwKZfN9%2F%2BrN0h8GYO4mNiA0QeoK0e2G9KmHyUhUvB8C0Oqq1N1z77cpyYNuRCgpDLI4wwLNj9lfznb8lyVJPLy5se9WpdTU2jxiUqfp22v6uqxvXmZJKn77EEoAm0ocaQhdqocwKom1T6imNPc6E%2BmraxLcqpHTtrE04Tawxfc1k3da5s21819Prsaf%2FXu0%2FLXNwqe77KRuDjZw29OnurS1HGWi7uvfujbXLwcFHW7%2BaiHk4MVdu%2F3iqsIG1IhYQx9gACTr4%2FHAModTx%2BQyO2Ei5TsUzsyk1ZLGE9MX%2FjzlkTwD0mJgk%2BAKv4Oy2L0AM1IGjA6dKmZ8KZW30RJJcNcrAT6q%2FsfeeMtqN9ZzzO6eZ%2B3uqbBpBPafFy9mYq17yyU00mogtqVP6HmMA4BiDIaE2lszWNZGBhX4dxoKEa1PIVpBw5FxRtntf1z9zCtbav3HxcmWOpK6rSPLeOPrXt4cjR%2BengqSyO4JtovTEHWDNruNOHz1T6pIk9mgEbfjsZ%2Fa68tXqSsOUu%2Fnc7J87l67eyCjX59n1fRmMn5wT%2BlC6iffhObsyoHQGIvq4cYM3mbaDVSeCvnZI%2Fs0WxcvACifJANSx%2FSN3oCC1T2vjB%2FAB%2BRdEAJiBDGcpEWu5UYaEjpMYaxJ%2FaX3qHAMSBX%2FJuq%2F%2BvpFX999cJ%2BsGiJ3PGXpWLXCSpNWRZC1ty4vEwZpcTrZRJohS%2BaTSJdgLqiyrSCDpDrZUvYT3jJloxGxJk1jPWPKSuw3c8ql0h7viyO41nnvqsbPPGPtgZsTO958%2FiperkroMA18i%2FUnQ0XUgYTgsuzV1vdx%2Fvto6S%2FTH%2FX9fnDa5cuR7LZCJJgHg2LxTbh0ysclQT7Z%2FEC6F%2Fyl22H9M%2B5%2FYduLI0vS5ecpZD8Rhc2IbY%2FvjdaCMHN1t%2BmVy%2Bo1pw7tYGfafS2szLq2959iJSWCvf8wev4p%2FFMTHOfq0JuYEHxTMoANtwMRJ0FeKd3eZnmlSkmDrFMqIAdXUtyScl9TIDphGekMF63ZEu3QCxCISIDaxcgu2HmgSV2rJK7ctK2VbafrGSpgodUr5xMo%2FtQHRe7YXfb4TydKV1R9uUBKzC78TOiyxC1eR91N9%2B7dMCaX0rANRe9i9mCOij5kE9d4np%2F1z2hlPaXmzBaI2yZkT7WUGH7xniFAHOEVs91%2BBerkrRr77BjYS9p1KbQYnaXB1cGET11ztUmbS8RVXtyT%2B1%2FaDu%2BKf7TexPd%2BH7Tptgp66Oiq26%2FasD1aM0Gv3xmM7JavuqMGCafHPnvnKkR81YHBT0FuRUmaTc%2FpHzVYSrT3X9GnwQcEMOtAkBzvisJtGGlQJ9xBJjdRZSoJOBOM%2FzfJp6pspiBkWzIN%2FPEH1wSlIlldynaFqdoI5q5Fy2uuNplzMxF8yIKFKPJiHLzaR5OA1obYjdJHArSPqNLB1r5TB94ohf25bN0Q5YrYq5%2FLDOuH9waXOVo9viHefmAPLIoMYxwgYz44sS3dPrpGFWYp8GdFT6WqvjrK9Vt5Dpz1aSdszznbRJA1Vkb4tLKuOc5JnoS%2FOukTYzqzf9WbXO6Y%2BcygZgz4SX1XE4rhAvFT3ZN04AzT3CfJ7PqTTbl85KejDcmvlYNJr%2BceGsK8bqa4XuvMhsMT9E4MZdMCBE5hEk%2FhMRoqb5NSR8oV%2BY0B83z3ITVNfr%2BFlBiKHPZOuM5gGHls4ZS2JgPwwUyZpK04gwl3u2kgTOm7CbvVlqAn8NOUuZCe4bzLKZ%2BME178L9K912s6023XGQJsr6x9EXSccGTOD9B3VpxjnRpSeciyEcogFXzdOG58nBoG%2BfumWmxrA%2BpMhl4FCJpp%2B1eU6bKs349nnO9MeDCS%2Bipi1rDw6HZvJ0ySVmmQ3ZRCII3tjh78F7Iw2ea4Fvrjh%2FAajP5LJ5v45k2iuI8luCl8y9annmCbwfXJwiau71ma6B%2Btdh%2Fy67eOXxGDoLsNg0jH9o0ZvcyT1u7c63wAgQQfvB9eYsK40U7yXk%2BRGkxXPzGZBHYjCDMapBDbnSHzNDGwnRL1iiTW1N%2F%2BCCFClcn9UJvHaAaDOeX9NXVtEBOPzIyURpA5EEomzI8rHDUAaZvBhnrly9Cr1dHzVPlIz0LQvz41TD26iwbElKyLJMv89ZfS7SpO8xHTUSZKbQBunLCWP2W%2F3%2F0evOvIcMFmkBozaPcICqEGFKaNcbSE7II60W%2FbWjL687xmJc6OwXzlOlaYGEDnXaob0pQq0q6aeUl%2FMtU1NoTsQjxo4XmXW30thnyL7ahG41cb0Y3dwyQ6w9NvvNrLnu2HIhsMiw2DSMf1jo2hvHBAHomCJ%2BzvFzE7sP3P3E%2Fj%2BmPj%2B0BcEUe%2BmlkEJlvFqgnJNEKG67q0XBMccGbU3kXJE2sNsKKN6ZX87VLYJEVx2jDucXWdhRuCHjuO6i%2Fx2w6yHxlFxZUn93piRnJdHDPilAxKNUmc4v%2FNCP2OnivdmOUrnPdMEu9Ukyjt2FeIiIXihgskbX98z%2F25tLpXUUckLVbYrhswmhG7cRnRgxWwPTiBbKQJ%2B6jC5xRH6VO4Eh5qBjK0UGBb6bTKbgA%2BKHQyX0vaNoqycQ%2BVcm1X64gxCXyqn7t9z6DjXrqbapsBhZbH%2BrloC7hm4Ka29kPZVt49zBoYWAX%2B7K%2FhXPB64YMrYLeuDcjAp1M5a%2F7jr%2B8eEc3dy9OnHAgDwJgm6SbifnE8oQX8iPr4EfUh9PzBQ4H63dJN44jsNo45r55mW8czSeWbMlN3hMyHKX1qZbInvzzyBu7i%2Bveep31l6Bkgaos5P9h0V47cGAVk8cYIOM%2BsT0xU76OO%2Bmzu7Ei2TlQNV%2FrmtY2PLMLBtHKrzMFMfpdqwsf2h6bePRz6N8neGTPlsfb8R0PcmUSYt8c5K8HwVabux1pbYfrv1yGnU06HG2pBtoBwzQd9ufQmD1d9gHbX21Wfrmb6j8chvSMg62DZC%2FZlo7Qjz%2FZS8J8L28fpLZn%2BQ%2BLtGIw%2BNzSOeGTH759bnR6w9XsfKk1DPkuvTKD9m26fu9fsyECOF7GnpiTsmR%2BgPz%2FYnJB9bnpFH9uvYhEDkt58YgzI%2BOz6KxBmu%2FVwz%2B%2FHW6lpFnXZ%2FLP%2FIiY%2BZsmly6TkA4PgJ%2BlwQnNYeY1inJv9EgLHUJPE5klyukQoFVU5iN498d0nVQ1NfQdC27JXLFwhvBclvE5KBMkiYaxIBQfkqQZ%2BIfbYpCaMwoPUG4G8sn6Vtw9Z%2BZ3usgQsbOP4k%2F4xBqW9wgh3wRPqeRIdGwvdvrWxa%2B9fXtycce5MgyzlzUMG1RZy%2BN%2BsnOUr9WWrrmjDwfUha%2BnXdMuo7iNmSgP3lJkkjaX%2BS2AzNAGKgf657Oh7yX8Mc9QzUtUzo%2ByVjoHDZq%2BckYnfLRH2tIrq4JVZCriNlr5i%2FPUqMG9aRvtb2Vn5uhTFszB7NX8M%2FEvZkqZk0OUafBgAcL0F%2FEowMk6O9wuS%2FZX53wnB8a42RYiT1LCPlGSXfCoPymcDRrxXtO1EkCiIHy0gkuUn%2BkjE7OVE68ZFAb0vPaoLQIMw4NWFUBCAvAtwE%2BbQC%2BVQKPQ%2FOJGSQyUzxjtCgUpVqS4R9b%2Buxr80R%2BnbLTCqXAllyVhxpyjsK6H%2BZ0e%2FNM%2FvVRlHXeSCxb5UziQOln5jntKmaAUSFHf6pL%2BWqp9QX%2B1YO%2BvqVcjAvW3IuKDf3MxFOJDSJcUOTUNZtxMbOpLb0GP6REx9nSuqTY07w8cAe9PeZnPsMoG%2B%2FlPRamkbwffe7nCvNVHeZM07qdctCXfdGyc7sATN7%2FTgnAZv3met2QqcYJ9%2F9a%2B%2FgvBU8YsplTkH9qjgtnqrHHedAJ89VeJwr1rgy4ex7PMjs%2BTqkIr5H%2BiAr892K%2B34FsfbrMsiHfTCM1YtzYR2NLE9ynGrvudt1pegbi4LeL%2B47RFK0H7HX93aRPvMsm0AZQ%2B%2BX7M807zoPXLVVJ9gbzl7Ha8E7F1Zf7jxttNGeuP4a1wjZduPeUHDwBecBPV5Efm9D6JnkaipXJo85bUbgGY4dltqZr4EzUzT1lNrHaaTMnfP9lmEnKLtxa%2FvzLpPOPssuoS8c7MulsEydNm7o9bXzQn6K%2FUFXFhHfK9lzfuiLXzP7R058nMOeJ8ec4OOBU9zfJ%2BS1V4HEzDizvzgO1s5A3QoCoVsi2XV5cBwqxwBunHdzjPiCeEd08ME6FHMqqXnezFxcWCNZ9t5r3vXADJx%2BKOpLOTAzKjrtlamfDG%2Fsx5T9MeWuURuQuokTN4EoCR3oPDrwoJDJg%2BPUYgHv4SqWa9vWtdNvFk4AoQ38WIGT1amGGghwgqHXko%2Bp%2B7lNdr7ZclG6buRwnyuIDOjKVPmuS6LtNrlsiQ2%2BW%2BJe30PbLXo284xhA933X%2B%2BfM4dgDW1wVfV0pLO6emiDWLD1qLE3Hlu%2F8PSpr3Z286KnM3079GDLunHsysx%2BvzvYqsx%2B777IjBlcsP32W%2FHzadO7fj36Ntf29TPbnpteH%2BLcXVwSus3lh0IebjzA0ZeVI%2FvYFXI7a2fqnhxdO9PX8c0R6qmxj%2BeePr%2Fx9A1jI%2B6sjz4j7GnfT6%2BOYFP7dv1rz67Xhf8w3E2vL95rr38tXh6OybmOlUrST%2ByKkTNb5r4tPPS5TU9%2BHPtt4rkTIgY46EAXGDDL6R9vlf1Tas%2BzxJwAAPBmaJfKgU%2BpC0Ps2wKJOlQe65BB8Evoj%2FggVACEOlbnPEixZ%2Fe23APeAAAAgJhjWT5lPlkYvHmSzbpqkBEcTyDRXzaAdQ9S4u6jHGPvH1DqXUvsZS0hGfABdHeiPfcCAAAAcJ0KrqL4%2FEEu9%2FTzieZaOvApdahRXgM5xOw5UOpcDV8EPqjuDnJfvwkAAACBOJY0f%2FIEPbRM1A7SzJBYgYhdmEdOem%2B5d5%2BDX16%2Fyr598dyhDN0B71F3K%2Be2EeoucqxCBOAN%2BA0iAJ8pmdv%2Fuen9kzn1%2BQ9I5mMnV%2Fs%2F1LJ2cwjMg%2FNv5kRfapZqak%2FWBr9oArX%2FY5amuwn54aT2v3v%2F9sXqUEno2%2FkxDoACH16%2FjL6EEnCjMyfQHfAOddfsKw8l4LB7AAAAkp3NDLMWn7JdJwn3qeJgG5B6l%2FAMe4dBQLfayB3KNaQEPqBvxbYwAAAAWZzNFifmftq2HSuSKgQXoK9DA8JGhD5r7BsGDL2ae%2FRnieQcvHPdXXp0d45BSQDeFixxB5%2FJ2bgJ%2BTThDlDw%2FtrXJNyH%2B1RN8FDZz8Z%2BJPfugl9Xj4bF%2F7ZDHO6%2FPSRRC%2FuXez85AAd9%2Btb7J2N7Hvr3qAPwTnV3XPx8j3hndXcB6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8V4ABALA3WNLN6D8xAAAAAElFTkSuQmCC%22%2F%3E%3C%2Fdefs%3E%3C%2Fsvg%3E";
@@ -2040,7 +1667,7 @@ var MicrosoftLogo = "data:image/svg+xml,%3Csvg%20width%3D%2225%22%20height%3D%22
2040
1667
 
2041
1668
  var Input = React__namespace.forwardRef(function (_a, ref) {
2042
1669
  var className = _a.className, type = _a.type, props = __rest(_a, ["className", "type"]);
2043
- return (jsxRuntimeExports.jsx("input", __assign({ type: type, className: cn("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className), ref: ref }, props)));
1670
+ return (jsxRuntime.jsx("input", __assign({ type: type, className: cn("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className), ref: ref }, props)));
2044
1671
  });
2045
1672
  Input.displayName = "Input";
2046
1673
 
@@ -2049,28 +1676,28 @@ var credentialsSchema = z.z.object({
2049
1676
  password: z.z.string().min(1, "Password is required"),
2050
1677
  });
2051
1678
  var ADLoginModal = function (_a) {
2052
- var open = _a.open, onOpenChange = _a.onOpenChange, onLogin = _a.onLogin;
2053
- var _b = React.useState("credentials"), step = _b[0], setStep = _b[1];
2054
- var _c = React.useState({
1679
+ var open = _a.open, isLoading = _a.isLoading, setIsLoading = _a.setIsLoading, onOpenChange = _a.onOpenChange, onLogin = _a.onLogin;
1680
+ var _b = React.useState("Credentials"), step = _b[0], setStep = _b[1];
1681
+ var _c = React.useState(false), showPassword = _c[0], setShowPassword = _c[1];
1682
+ var _d = React.useState({
2055
1683
  username: "",
2056
1684
  password: "",
2057
- }), credentials = _c[0], setCredentials = _c[1];
2058
- var _d = React.useState(""), mfaCode = _d[0], setMfaCode = _d[1];
2059
- var _e = React.useState(false), isLoading = _e[0], setIsLoading = _e[1];
1685
+ }), credentials = _d[0], setCredentials = _d[1];
1686
+ var _e = React.useState(""), MFACode = _e[0], setMFACode = _e[1];
2060
1687
  var form = reactHookForm.useForm({
2061
1688
  resolver: a$1(credentialsSchema),
2062
1689
  defaultValues: { username: "", password: "" },
2063
1690
  });
2064
- var handleCredentialsSubmit = function (values) { return __awaiter(void 0, void 0, void 0, function () {
2065
- return __generator(this, function (_a) {
1691
+ var handleCredentialsSubmit = function (values) { return __awaiter$1(void 0, void 0, void 0, function () {
1692
+ return __generator$1(this, function (_a) {
2066
1693
  setCredentials(values);
2067
- setStep("mfa");
1694
+ setStep("MFA");
2068
1695
  return [2 /*return*/];
2069
1696
  });
2070
1697
  }); };
2071
- var handleMFASubmit = function (code) { return __awaiter(void 0, void 0, void 0, function () {
1698
+ var handleMFASubmit = function (code) { return __awaiter$1(void 0, void 0, void 0, function () {
2072
1699
  var error_1;
2073
- return __generator(this, function (_a) {
1700
+ return __generator$1(this, function (_a) {
2074
1701
  switch (_a.label) {
2075
1702
  case 0:
2076
1703
  setIsLoading(true);
@@ -2081,13 +1708,14 @@ var ADLoginModal = function (_a) {
2081
1708
  username: credentials.username,
2082
1709
  password: credentials.password,
2083
1710
  MFACode: code,
1711
+ appCode: "",
2084
1712
  })];
2085
1713
  case 2:
2086
1714
  _a.sent();
2087
1715
  onOpenChange(false);
2088
- setStep("credentials");
1716
+ setStep("Credentials");
2089
1717
  form.reset();
2090
- setMfaCode("");
1718
+ setMFACode("");
2091
1719
  return [3 /*break*/, 5];
2092
1720
  case 3:
2093
1721
  error_1 = _a.sent();
@@ -2102,26 +1730,74 @@ var ADLoginModal = function (_a) {
2102
1730
  }); };
2103
1731
  var handleClose = function () {
2104
1732
  onOpenChange(false);
2105
- setStep("credentials");
1733
+ setStep("Credentials");
2106
1734
  form.reset();
2107
- setMfaCode("");
1735
+ setMFACode("");
1736
+ setShowPassword(false);
2108
1737
  };
2109
- return (jsxRuntimeExports.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntimeExports.jsxs(DialogContent, { className: "sm:max-w-[85%]", children: [jsxRuntimeExports.jsx(DialogHeader, { children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(lucideReact.KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntimeExports.jsx(DialogTitle, { className: "text-2xl", children: "Sign in with AD" })] }) }), step === "credentials" ? (jsxRuntimeExports.jsx(Form, __assign({}, form, { children: jsxRuntimeExports.jsxs("form", { onSubmit: form.handleSubmit(handleCredentialsSubmit), className: "space-y-4", children: [jsxRuntimeExports.jsx(FormField, { control: form.control, name: "username", render: function (_a) {
1738
+ return (jsxRuntime.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntime.jsxs(DialogContent, { className: "min-w-[50vw] max-w-[70vw]", children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [jsxRuntime.jsx(lucideReact.KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntime.jsx(DialogTitle, { className: "text-xl", children: "Sign in with AD Credentials" })] }) }), step === "Credentials" ? (jsxRuntime.jsx(Form, __assign({}, form, { children: jsxRuntime.jsxs("form", { onSubmit: form.handleSubmit(handleCredentialsSubmit), className: "space-y-6", children: [jsxRuntime.jsx(FormField, { control: form.control, name: "username", render: function (_a) {
2110
1739
  var field = _a.field;
2111
- return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Username" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ placeholder: "Enter your username" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
2112
- } }), jsxRuntimeExports.jsx(FormField, { control: form.control, name: "password", render: function (_a) {
1740
+ return (jsxRuntime.jsxs(FormItem, { children: [jsxRuntime.jsx(FormLabel, { children: "Username" }), jsxRuntime.jsx(FormControl, { children: jsxRuntime.jsx(Input, __assign({ className: "h-12", placeholder: "Enter your username" }, field)) }), jsxRuntime.jsx(FormMessage, {})] }));
1741
+ } }), jsxRuntime.jsx(FormField, { control: form.control, name: "password", render: function (_a) {
2113
1742
  var field = _a.field;
2114
- return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Password" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ type: "password", placeholder: "Enter your password" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
2115
- } }), jsxRuntimeExports.jsx(Button, { type: "submit", className: "w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [jsxRuntimeExports.jsx(GenericOTPVerifier, { value: mfaCode, setValue: setMfaCode, setLoading: setIsLoading, isDisabled: isLoading, onChangeOTP: handleMFASubmit, fieldName: "AuthenticatorCode" }), isLoading && (jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [jsxRuntimeExports.jsx(lucideReact.Loader2, { className: "w-4 h-4 animate-spin" }), jsxRuntimeExports.jsx("span", { children: "Verifying..." })] }))] }))] }) }));
1743
+ return (jsxRuntime.jsxs(FormItem, { children: [jsxRuntime.jsx(FormLabel, { children: "Password" }), jsxRuntime.jsx(FormControl, { children: jsxRuntime.jsxs("div", { className: "relative", children: [jsxRuntime.jsx(Input, __assign({ className: "h-12 pr-10", type: showPassword ? "text" : "password", placeholder: "Enter your password" }, field)), jsxRuntime.jsx("button", { type: "button", onClick: function () { return setShowPassword(!showPassword); }, className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground", children: showPassword ? (jsxRuntime.jsx(lucideReact.EyeOff, { className: "w-5 h-5" })) : (jsxRuntime.jsx(lucideReact.Eye, { className: "w-5 h-5" })) })] }) }), jsxRuntime.jsx(FormMessage, {})] }));
1744
+ } }), jsxRuntime.jsx(Button, { type: "submit", className: "py-4 w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx(GenericOTPVerifier, { value: MFACode, setValue: setMFACode, setLoading: setIsLoading, isDisabled: isLoading, onChangeOTP: handleMFASubmit, fieldName: "AuthenticatorCode" }), isLoading && (jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [jsxRuntime.jsx(lucideReact.Loader2, { className: "w-4 h-4 animate-spin" }), jsxRuntime.jsx("span", { children: "Verifying..." })] }))] }))] }) }));
2116
1745
  };
2117
1746
 
2118
1747
  var DefaultLoginPage = function (_a) {
2119
- var usePassKey = _a.usePassKey, MFAEndpoints = _a.MFAEndpoints, PassKeysRegisterProps = _a.PassKeysRegisterProps;
1748
+ var usePassKey = _a.usePassKey, useADLogin = _a.useADLogin, MFAEndpoints = _a.MFAEndpoints, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps, onADLoginSuccess = _a.onADLoginSuccess;
1749
+ var cardVariants = {
1750
+ hidden: { opacity: 0, scale: 0.8, y: 50 },
1751
+ visible: {
1752
+ opacity: 1,
1753
+ scale: 1,
1754
+ y: 0,
1755
+ transition: { type: "spring", duration: 0.6 },
1756
+ },
1757
+ exit: { opacity: 0, scale: 0.8, y: -50, transition: { duration: 0.3 } },
1758
+ };
2120
1759
  var context = useCAMSContext();
2121
1760
  var login = context.login, isLoading = context.isLoading, authMode = context.authMode;
2122
1761
  var _b = React.useState(false), showADModal = _b[0], setShowADModal = _b[1];
1762
+ var _c = React.useState(false), showSuccessAnimation = _c[0], setShowSuccessAnimation = _c[1];
2123
1763
  var register = useWebAuthn().register;
1764
+ var authentication = new camsSdk.CAMSMFAAuthenticator();
1765
+ var _d = useCredentialsHandler(function (state, data) { return __awaiter$1(void 0, void 0, void 0, function () {
1766
+ return __generator$1(this, function (_a) {
1767
+ console.log(data);
1768
+ if (state && data && data.isValid) {
1769
+ setShowSuccessAnimation(true);
1770
+ localStorage.setItem(context.storageKey, JSON.stringify({
1771
+ isAuthenticated: true,
1772
+ requiresMFA: false,
1773
+ accessToken: "Credentials",
1774
+ idToken: "Credentials",
1775
+ }));
1776
+ context.setUserProfile({
1777
+ state: "AUTH_SUCCESS",
1778
+ message: data.message,
1779
+ role: data.userInfo.role,
1780
+ profile: {
1781
+ id: data.userInfo.id,
1782
+ name: data.userInfo.name,
1783
+ email: data.userInfo.email,
1784
+ isMFAEnabled: data.userInfo.isMFAEnabled,
1785
+ tokens: data.tokens,
1786
+ },
1787
+ });
1788
+ setShowADModal(false);
1789
+ }
1790
+ else {
1791
+ sonner.toast.error("\u274C AD Login failed. ".concat((data === null || data === void 0 ? void 0 : data.message) || "Unknown error"));
1792
+ }
1793
+ return [2 /*return*/];
1794
+ });
1795
+ }); }), handleSubmitCredentials = _d.handleSubmitCredentials, isCredAuthLoading = _d.loading, setIsCredAuthLoading = _d.setLoading;
2124
1796
  var handleMSALLogin = function () {
1797
+ if (typeof window !== "undefined" && !window.crypto) {
1798
+ sonner.toast.error("Crypto API not available. Please use a modern browser.");
1799
+ return;
1800
+ }
2125
1801
  if (authMode === "MSAL") {
2126
1802
  login();
2127
1803
  }
@@ -2130,70 +1806,31 @@ var DefaultLoginPage = function (_a) {
2130
1806
  console.warn("Regular CAMS login requires configuration");
2131
1807
  }
2132
1808
  };
2133
- var cardVariants = {
2134
- hidden: { opacity: 0, scale: 0.8, y: 50 },
2135
- visible: {
2136
- opacity: 1,
2137
- scale: 1,
2138
- y: 0,
2139
- transition: { type: "spring", duration: 0.6 },
2140
- },
2141
- exit: { opacity: 0, scale: 0.8, y: -50, transition: { duration: 0.3 } },
2142
- };
2143
- var handleRegister = function (data) { return __awaiter(void 0, void 0, void 0, function () {
2144
- var options, attestationResponse, error_1;
2145
- return __generator(this, function (_a) {
2146
- switch (_a.label) {
2147
- case 0:
2148
- _a.trys.push([0, 4, , 5]);
2149
- // 1. Fetch challenge from your server
2150
- console.log("Requesting registration challenge from server...");
2151
- return [4 /*yield*/, axios.post(MFAEndpoints.RegisterNewChallenge, __assign({}, data), {
2152
- headers: {
2153
- "X-DEVICE-ID": GenerateDeviceId(),
2154
- "X-API-VERSION": "1.0",
2155
- },
2156
- })];
2157
- case 1:
2158
- options = (_a.sent()).data;
2159
- console.log("Received challenge:", options);
2160
- // 2. Call the SDK to trigger the browser's passkey creation UI
2161
- console.log("Calling SDK register function...");
2162
- return [4 /*yield*/, register(options)];
2163
- case 2:
2164
- attestationResponse = _a.sent();
2165
- console.log("Passkey created on client:", attestationResponse);
2166
- // 3. Send the response back to the server for verification
2167
- console.log("Sending attestation to server for verification...");
2168
- return [4 /*yield*/, axios.post(MFAEndpoints.RegisterVerify, attestationResponse, {
2169
- headers: {
2170
- "X-DEVICE-ID": GenerateDeviceId(),
2171
- "X-API-VERSION": "1.0",
2172
- },
2173
- withCredentials: true, // credentials: 'include'
2174
- })];
2175
- case 3:
2176
- _a.sent();
2177
- sonner.toast.success("✅ Registration successful! Passkey created.");
2178
- return [3 /*break*/, 5];
2179
- case 4:
2180
- error_1 = _a.sent();
2181
- console.error("Registration failed:", error_1);
2182
- sonner.toast.error("❌ Could not create passkey.");
2183
- return [3 /*break*/, 5];
2184
- case 5: return [2 /*return*/];
2185
- }
2186
- });
2187
- }); };
2188
- return (jsxRuntimeExports.jsxs("main", { className: "min-h-screen bg-gray-50", children: [jsxRuntimeExports.jsx(framerMotion.motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.5 }, children: jsxRuntimeExports.jsx("div", { className: "flex h-screen items-center justify-center", children: jsxRuntimeExports.jsxs(framerMotion.motion.div, { variants: cardVariants, initial: "hidden", animate: "visible", exit: "exit", className: "w-full max-w-md p-6 space-y-4 bg-gray-50 rounded-2xl shadow-2xl --dark:bg-gray-800", children: [jsxRuntimeExports.jsxs(CardHeader, { className: "text-center space-y-3", children: [jsxRuntimeExports.jsx("div", { className: "w-full flex items-center justify-center", children: jsxRuntimeExports.jsx("img", { src: NIBSSLogo, alt: "NIBSS Logo", width: 265, height: 265 }) }), jsxRuntimeExports.jsx(CardTitle, { className: "text-3xl font-bold --text-gray-900 --dark:text-white", children: "NIBSS CAMS" }), jsxRuntimeExports.jsx(CardTitle, { className: "text-gray-500 dark:text-gray-400 font-bold text-lg", children: "Centralized Authentication" })] }), jsxRuntimeExports.jsxs(CardAction, { className: "w-full flex flex-col items-center justify-center text-center text-gray-500 dark:text-gray-400 mb-6", children: [jsxRuntimeExports.jsx("img", { src: AuthLogo, alt: "Auth Logo", width: 365, height: 365 }), "Kindly use the below identity providers to authenticate"] }), jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [jsxRuntimeExports.jsxs(Button
1809
+ if (showSuccessAnimation && useADLogin) {
1810
+ return (jsxRuntime.jsx("div", { className: "flex justify-center items-center h-dvh", children: jsxRuntime.jsx(Card, { className: "mx-auto space-y-6 p-6 bg-white rounded-lg shadow-md", children: jsxRuntime.jsx(AuthSuccessAnimation, { onComplete: function () {
1811
+ onADLoginSuccess === null || onADLoginSuccess === void 0 ? void 0 : onADLoginSuccess();
1812
+ } }) }) }));
1813
+ }
1814
+ return (jsxRuntime.jsxs("main", { className: "cams-sdk min-h-screen bg-gray-50", children: [jsxRuntime.jsx(framerMotion.motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.5 }, children: jsxRuntime.jsx("div", { className: "flex h-screen items-center justify-center", children: jsxRuntime.jsxs(framerMotion.motion.div, { variants: cardVariants, initial: "hidden", animate: "visible", exit: "exit", className: "w-full max-w-md p-6 space-y-4 rounded-2xl shadow-2xl", children: [jsxRuntime.jsxs(CardHeader, { className: "text-center space-y-3", children: [jsxRuntime.jsx("div", { className: "w-full flex items-center justify-center", children: jsxRuntime.jsx("img", { src: NIBSSLogo, alt: "NIBSS Logo", width: 225, height: 225 }) }), jsxRuntime.jsx(CardTitle, { className: "text-3xl font-bold", children: "NIBSS CAMS" }), jsxRuntime.jsx(CardTitle, { className: "text-gray-500 dark:text-gray-400 font-bold text-lg", children: "Centralized Authentication" })] }), jsxRuntime.jsxs(CardAction, { className: "w-full flex flex-col items-center justify-center text-center text-gray-500 dark:text-gray-400 mb-8", children: [jsxRuntime.jsx("img", { src: AuthLogo, alt: "Auth Logo", width: 365, height: 365 }), "Use Below Identity Providers To Authenticate"] }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsxs(Button
2189
1815
  // variant="outline"
2190
1816
  , {
2191
1817
  // variant="outline"
2192
- className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: handleMSALLogin, disabled: isLoading, children: [jsxRuntimeExports.jsx("img", { src: MicrosoftLogo, alt: "Microsoft Logo", width: 35, height: 35 }), jsxRuntimeExports.jsx("span", { className: "ml-2", children: isLoading ? "Logging in..." : "Sign in with Microsoft" })] }), jsxRuntimeExports.jsxs(Button, { className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: function () { return setShowADModal(true); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(lucideReact.KeyIcon, { className: "w-8 h-8 text-[#506f4a]" }), jsxRuntimeExports.jsx("span", { children: isLoading ? "Logging in..." : "Sign in with ActiveDirectory" })] }), usePassKey && (jsxRuntimeExports.jsxs(Button, { className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: function () { return handleRegister(PassKeysRegisterProps); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(lucideReact.KeyIcon, { className: "w-12 h-12 text-[#506f4a]" }), jsxRuntimeExports.jsx("span", { children: "Create a Passkey" })] }))] }), jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntimeExports.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntimeExports.jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsxRuntimeExports.jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, onLogin: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
1818
+ className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: handleMSALLogin, disabled: isLoading, children: [jsxRuntime.jsx("img", { src: MicrosoftLogo, alt: "Microsoft Logo", width: 35, height: 35 }), jsxRuntime.jsx("span", { className: "ml-2", children: isLoading ? "Logging in..." : "Sign in with Microsoft" })] }), useADLogin && (jsxRuntime.jsxs(Button, { className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: function () { return setShowADModal(true); }, disabled: isLoading, children: [jsxRuntime.jsx(lucideReact.KeyIcon, { className: "text-[#506f4a]", size: 64 }), jsxRuntime.jsx("span", { children: isLoading
1819
+ ? "Logging in..."
1820
+ : "Sign in with ActiveDirectory" })] })), usePassKey && (jsxRuntime.jsxs(Button, { className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: function () {
1821
+ return authentication.HandleRegister(MFAEndpoints.RegisterNewChallenge, MFAEndpoints.RegisterVerify +
1822
+ "?username=".concat(PassKeysRegisterProps.username), register, PassKeysRegisterProps);
1823
+ }, disabled: isLoading, children: [jsxRuntime.jsx(lucideReact.KeyIcon, { className: "text-[#506f4a]", size: 64 }), jsxRuntime.jsx("span", { children: "Create a Passkey" })] }))] }), jsxRuntime.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntime.jsx(lucideReact.ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntime.jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsxRuntime.jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, isLoading: context.isLoading || isCredAuthLoading, setIsLoading: setIsCredAuthLoading, onLogin: function (_a) { return __awaiter$1(void 0, [_a], void 0, function (_b) {
2193
1824
  var username = _b.username, password = _b.password, MFACode = _b.MFACode;
2194
- return __generator(this, function (_c) {
1825
+ return __generator$1(this, function (_c) {
2195
1826
  // Implement your AD login logic here
2196
- console.log("AD Login:", { username: username, password: password, MFACode: MFACode });
1827
+ console.log("AD Login:", { username: username, MFACode: MFACode });
1828
+ handleSubmitCredentials(CredentialsAuthEndpoint, {
1829
+ username: username,
1830
+ password: password,
1831
+ MFACode: MFACode,
1832
+ appCode: context.appCode,
1833
+ });
2197
1834
  return [2 /*return*/];
2198
1835
  });
2199
1836
  }); } })] }));
@@ -2201,24 +1838,21 @@ var DefaultLoginPage = function (_a) {
2201
1838
 
2202
1839
  var ErrorFallback = function (_a) {
2203
1840
  var message = _a.message;
2204
- return (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center min-h-screen bg-gray-50", children: jsxRuntimeExports.jsxs("div", { className: "bg-white p-6 rounded-lg shadow-lg border border-red-200 max-w-md", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 mb-2", children: [jsxRuntimeExports.jsx("svg", { className: "w-6 h-6 text-red-500", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }), jsxRuntimeExports.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "Configuration Error" })] }), jsxRuntimeExports.jsx("p", { className: "text-red-600", children: message })] }) }));
1841
+ return (jsxRuntime.jsx("div", { className: "flex items-center justify-center min-h-screen bg-gray-50", children: jsxRuntime.jsxs("div", { className: "bg-white p-6 rounded-lg shadow-lg border border-red-200 max-w-md", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-3 mb-2", children: [jsxRuntime.jsx("svg", { className: "w-6 h-6 text-red-500", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }), jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "Configuration Error" })] }), jsxRuntime.jsx("p", { className: "text-red-600", children: message })] }) }));
2205
1842
  };
2206
1843
 
2207
1844
  var MFAEndpointsSchema = z.object({
2208
- ValidateMFA: z.url("MFAEndpoint must be a valid URL"),
1845
+ ValidateUserMFA: z.url("ValidateUser MFA Endpoint must be a valid URL"),
2209
1846
  RegisterNewChallenge: z.url("MFA RegisterNewChallenge must be a valid URL"),
2210
1847
  RegisterVerify: z.url("MFA RegisterVerify must be a valid URL"),
2211
1848
  RetrieveAuthChallenge: z.url("MFA RetrieveAuthChallenge must be a valid URL"),
2212
1849
  AuthChallengeVerify: z.url("MFA AuthChallengeVerify must be a valid URL"),
2213
1850
  });
2214
1851
  var MFAGate = function (_a) {
2215
- var children = _a.children, _b = _a.fallback, fallback = _b === void 0 ? jsxRuntimeExports.jsx(LoadingSpinner, {}) : _b,
2216
- // loginComponent: LoginComponent = DefaultLoginPage,
2217
- _c = _a.usePassKey,
2218
- // loginComponent: LoginComponent = DefaultLoginPage,
2219
- usePassKey = _c === void 0 ? false : _c, PassKeysRegisterProps = _a.PassKeysRegisterProps, MFAEndpoints = _a.MFAEndpoints;
1852
+ var children = _a.children, _b = _a.fallback, fallback = _b === void 0 ? (jsxRuntime.jsx("div", { className: "h-screen flex items-center justify-center", children: jsxRuntime.jsx(LoadingSpinner, {}) })) : _b, _c = _a.usePassKey, usePassKey = _c === void 0 ? false : _c, _d = _a.useADLogin, useADLogin = _d === void 0 ? false : _d, CredentialsAuthEndpoint = _a.CredentialsAuthEndpoint, PassKeysRegisterProps = _a.PassKeysRegisterProps, MFAEndpoints = _a.MFAEndpoints, requiresMFA = _a.requiresMFA, onAuthSuccess = _a.onAuthSuccess, onAuthError = _a.onAuthError;
2220
1853
  var context = useCAMSContext();
2221
- var validatedMFAEndpoints = React.useMemo(function () {
1854
+ var _e = React.useState("Loading"), authState = _e[0], setAuthState = _e[1];
1855
+ var ValidatedMFAEndpoints = React.useMemo(function () {
2222
1856
  var parsed = MFAEndpointsSchema.safeParse(MFAEndpoints);
2223
1857
  if (!parsed.success) {
2224
1858
  camsSdk.Logger.error("Invalid MFAEndpoint", parsed.error);
@@ -2226,34 +1860,84 @@ var MFAGate = function (_a) {
2226
1860
  }
2227
1861
  return parsed.data;
2228
1862
  }, [MFAEndpoints]);
1863
+ // Extract the specific values we need from context for dependencies
1864
+ var contextRequiresMFA = "requiresMFA" in context ? context.requiresMFA : false;
1865
+ var contextAccessToken = "accessToken" in context ? context.accessToken : "";
2229
1866
  var handleComplete = React.useCallback(function (success) {
2230
- if (!success)
2231
- camsSdk.Logger.error("MFA authentication failed");
2232
- }, []);
2233
- var handleAuthFailed = React.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
2234
- return __generator(this, function (_a) {
2235
- switch (_a.label) {
2236
- case 0: return [4 /*yield*/, context.logout()];
1867
+ var _a;
1868
+ if (success) {
1869
+ var accessToken = "accessToken" in context ? context.accessToken : "";
1870
+ var idToken = "idToken" in context ? context.idToken : "";
1871
+ camsSdk.Logger.info("MFA Authentication Successful", { context: context || null });
1872
+ context.isAuthenticated = true;
1873
+ setAuthState("Authenticated");
1874
+ if (context.authMode === "MSAL") {
1875
+ var tokens = { accessToken: accessToken, idToken: idToken };
1876
+ onAuthSuccess === null || onAuthSuccess === void 0 ? void 0 : onAuthSuccess(tokens);
1877
+ if ("onAuthSuccess" in context) {
1878
+ (_a = context.onAuthSuccess) === null || _a === void 0 ? void 0 : _a.call(context, tokens);
1879
+ }
1880
+ }
1881
+ }
1882
+ else if (!success) {
1883
+ camsSdk.Logger.error("MFA Authentication Failed", { context: context || null });
1884
+ }
1885
+ }, [context, onAuthSuccess]);
1886
+ var handleAuthFailed = React.useCallback(function () { return __awaiter$1(void 0, void 0, void 0, function () {
1887
+ var _a;
1888
+ return __generator$1(this, function (_b) {
1889
+ switch (_b.label) {
1890
+ case 0:
1891
+ if (context.authMode === "MSAL" && context.error) {
1892
+ onAuthError === null || onAuthError === void 0 ? void 0 : onAuthError(context.error);
1893
+ if ("onAuthError" in context) {
1894
+ (_a = context.onAuthError) === null || _a === void 0 ? void 0 : _a.call(context, context.error);
1895
+ }
1896
+ }
1897
+ return [4 /*yield*/, context.logout()];
2237
1898
  case 1:
2238
- _a.sent();
1899
+ _b.sent();
2239
1900
  return [2 /*return*/];
2240
1901
  }
2241
1902
  });
2242
- }); }, [context.logout]);
2243
- camsSdk.Logger.debug("MFA Endpoint >>>", { MFAEndpoints: MFAEndpoints });
2244
- if (!validatedMFAEndpoints)
2245
- return jsxRuntimeExports.jsx(ErrorFallback, { message: "Invalid MFA configuration." });
1903
+ }); }, [context, onAuthError]);
1904
+ React.useEffect(function () {
1905
+ if (context.isLoading) {
1906
+ setAuthState("Loading");
1907
+ return;
1908
+ }
1909
+ if (!contextAccessToken) {
1910
+ setAuthState("Unauthenticated");
1911
+ return;
1912
+ }
1913
+ var shouldRequireMFA = requiresMFA !== null && requiresMFA !== void 0 ? requiresMFA : contextRequiresMFA;
1914
+ setAuthState(shouldRequireMFA ? "MFA_Required" : "Authenticated");
1915
+ }, [
1916
+ context.isLoading,
1917
+ contextRequiresMFA,
1918
+ contextAccessToken,
1919
+ requiresMFA,
1920
+ ]);
1921
+ if (useADLogin && !CredentialsAuthEndpoint)
1922
+ return jsxRuntime.jsx(ErrorFallback, { message: "Invalid AD Login Configuration." });
1923
+ if (!ValidatedMFAEndpoints)
1924
+ return jsxRuntime.jsx(ErrorFallback, { message: "Invalid MFA Configuration." });
2246
1925
  if (context.authMode !== "MSAL")
2247
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
2248
- if (context.isLoading)
2249
- return fallback;
2250
- if (context.requiresMFA) {
2251
- return (jsxRuntimeExports.jsx(MFAOptions, { MFAEndpoints: validatedMFAEndpoints, usePassKey: usePassKey, onComplete: handleComplete, onAuthFailed: handleAuthFailed }));
2252
- }
2253
- if (!context.isAuthenticated) {
2254
- return (jsxRuntimeExports.jsx(DefaultLoginPage, { usePassKey: usePassKey, MFAEndpoints: MFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps }));
1926
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
1927
+ switch (authState) {
1928
+ case "Loading":
1929
+ return fallback;
1930
+ case "MFA_Required":
1931
+ return (jsxRuntime.jsx(MFAOptions, { MFAEndpoints: ValidatedMFAEndpoints, usePassKey: usePassKey, onComplete: handleComplete, onAuthFailed: handleAuthFailed }));
1932
+ case "Authenticated":
1933
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
1934
+ case "Unauthenticated":
1935
+ default:
1936
+ return (jsxRuntime.jsx(DefaultLoginPage, { usePassKey: usePassKey, useADLogin: useADLogin, MFAEndpoints: ValidatedMFAEndpoints, PassKeysRegisterProps: PassKeysRegisterProps, CredentialsAuthEndpoint: CredentialsAuthEndpoint, onADLoginSuccess: function () {
1937
+ context.isAuthenticated = true;
1938
+ setAuthState("Authenticated");
1939
+ } }));
2255
1940
  }
2256
- return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: children });
2257
1941
  };
2258
1942
 
2259
1943
  exports.CAMSMSALProvider = CAMSMSALProvider;