dash-button-web 0.0.22 → 0.0.23-beta.1

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.
Files changed (72) hide show
  1. package/dist/cjs/app-globals-cd54EKuF.js +15 -0
  2. package/dist/cjs/dash-button.cjs.entry.js +2172 -2070
  3. package/dist/cjs/index-BfwSK14n.js +1507 -0
  4. package/dist/cjs/index.cjs.js +0 -2
  5. package/dist/cjs/loader.cjs.js +5 -7
  6. package/dist/cjs/web-compnont.cjs.js +15 -15
  7. package/dist/collection/collection-manifest.json +5 -3
  8. package/dist/collection/components/my-component/dash-button.js +135 -38
  9. package/dist/collection/global/app.js +7 -0
  10. package/dist/collection/index.js +0 -1
  11. package/dist/collection/services/config.js +2 -1
  12. package/dist/collection/services/menu.js +0 -1
  13. package/dist/components/dash-button.js +1 -4247
  14. package/dist/components/index.d.ts +2 -0
  15. package/dist/components/index.js +1 -3
  16. package/dist/esm/app-globals-B2hgy9FG.js +13 -0
  17. package/dist/esm/dash-button.entry.js +2172 -2068
  18. package/dist/esm/index-6_Ga3Eox.js +1499 -0
  19. package/dist/esm/index.js +0 -2
  20. package/dist/esm/loader.js +6 -6
  21. package/dist/esm/web-compnont.js +15 -14
  22. package/dist/types/components/my-component/dash-button.d.ts +3 -0
  23. package/dist/types/components.d.ts +75 -3
  24. package/dist/types/global/app.d.ts +2 -0
  25. package/dist/types/services/config.d.ts +2 -0
  26. package/dist/types/stencil-public-runtime.d.ts +268 -70
  27. package/dist/web-compnont/index.esm.js +0 -2
  28. package/dist/web-compnont/p-6_Ga3Eox.js +3 -0
  29. package/dist/web-compnont/p-7de50cbc.entry.js +1 -0
  30. package/dist/web-compnont/p-DiU1T8CW.js +1 -0
  31. package/dist/web-compnont/web-compnont.esm.js +1 -2
  32. package/loader/cdn.js +1 -3
  33. package/loader/index.cjs.js +1 -3
  34. package/loader/index.d.ts +4 -1
  35. package/loader/index.es2017.js +1 -3
  36. package/loader/index.js +1 -3
  37. package/package.json +3 -2
  38. package/readme.md +21 -0
  39. package/dist/cjs/dash-button.cjs.entry.js.map +0 -1
  40. package/dist/cjs/index-87d4993d.js +0 -1793
  41. package/dist/cjs/index-87d4993d.js.map +0 -1
  42. package/dist/cjs/index.cjs.js.map +0 -1
  43. package/dist/cjs/loader.cjs.js.map +0 -1
  44. package/dist/cjs/web-compnont.cjs.js.map +0 -1
  45. package/dist/collection/components/my-component/dash-button.e2e.js +0 -26
  46. package/dist/collection/components/my-component/dash-button.e2e.js.map +0 -1
  47. package/dist/collection/components/my-component/dash-button.js.map +0 -1
  48. package/dist/collection/components/my-component/dash-button.spec.js +0 -35
  49. package/dist/collection/components/my-component/dash-button.spec.js.map +0 -1
  50. package/dist/collection/index.js.map +0 -1
  51. package/dist/collection/services/config.js.map +0 -1
  52. package/dist/collection/services/menu.js.map +0 -1
  53. package/dist/components/dash-button.js.map +0 -1
  54. package/dist/components/index.js.map +0 -1
  55. package/dist/esm/dash-button.entry.js.map +0 -1
  56. package/dist/esm/index-e3df5eaf.js +0 -1766
  57. package/dist/esm/index-e3df5eaf.js.map +0 -1
  58. package/dist/esm/index.js.map +0 -1
  59. package/dist/esm/loader.js.map +0 -1
  60. package/dist/esm/polyfills/core-js.js +0 -11
  61. package/dist/esm/polyfills/dom.js +0 -79
  62. package/dist/esm/polyfills/es5-html-element.js +0 -1
  63. package/dist/esm/polyfills/index.js +0 -34
  64. package/dist/esm/polyfills/system.js +0 -6
  65. package/dist/esm/web-compnont.js.map +0 -1
  66. package/dist/web-compnont/index.esm.js.map +0 -1
  67. package/dist/web-compnont/p-ad318f06.entry.js +0 -10
  68. package/dist/web-compnont/p-ad318f06.entry.js.map +0 -1
  69. package/dist/web-compnont/p-c1ec12fe.js +0 -3
  70. package/dist/web-compnont/p-c1ec12fe.js.map +0 -1
  71. package/dist/web-compnont/web-compnont.esm.js.map +0 -1
  72. package/loader/package.json +0 -11
@@ -1,4247 +1 @@
1
- import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
-
3
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4
-
5
- function getAugmentedNamespace(n) {
6
- if (n.__esModule) return n;
7
- var a = Object.defineProperty({}, '__esModule', {value: true});
8
- Object.keys(n).forEach(function (k) {
9
- var d = Object.getOwnPropertyDescriptor(n, k);
10
- Object.defineProperty(a, k, d.get ? d : {
11
- enumerable: true,
12
- get: function () {
13
- return n[k];
14
- }
15
- });
16
- });
17
- return a;
18
- }
19
-
20
- var base64Js = {};
21
-
22
- base64Js.byteLength = byteLength;
23
- base64Js.toByteArray = toByteArray;
24
- base64Js.fromByteArray = fromByteArray;
25
-
26
- var lookup = [];
27
- var revLookup = [];
28
- var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
29
-
30
- var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
31
- for (var i = 0, len = code.length; i < len; ++i) {
32
- lookup[i] = code[i];
33
- revLookup[code.charCodeAt(i)] = i;
34
- }
35
-
36
- // Support decoding URL-safe base64 strings, as Node.js does.
37
- // See: https://en.wikipedia.org/wiki/Base64#URL_applications
38
- revLookup['-'.charCodeAt(0)] = 62;
39
- revLookup['_'.charCodeAt(0)] = 63;
40
-
41
- function getLens (b64) {
42
- var len = b64.length;
43
-
44
- if (len % 4 > 0) {
45
- throw new Error('Invalid string. Length must be a multiple of 4')
46
- }
47
-
48
- // Trim off extra bytes after placeholder bytes are found
49
- // See: https://github.com/beatgammit/base64-js/issues/42
50
- var validLen = b64.indexOf('=');
51
- if (validLen === -1) validLen = len;
52
-
53
- var placeHoldersLen = validLen === len
54
- ? 0
55
- : 4 - (validLen % 4);
56
-
57
- return [validLen, placeHoldersLen]
58
- }
59
-
60
- // base64 is 4/3 + up to two characters of the original data
61
- function byteLength (b64) {
62
- var lens = getLens(b64);
63
- var validLen = lens[0];
64
- var placeHoldersLen = lens[1];
65
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
66
- }
67
-
68
- function _byteLength (b64, validLen, placeHoldersLen) {
69
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
70
- }
71
-
72
- function toByteArray (b64) {
73
- var tmp;
74
- var lens = getLens(b64);
75
- var validLen = lens[0];
76
- var placeHoldersLen = lens[1];
77
-
78
- var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
79
-
80
- var curByte = 0;
81
-
82
- // if there are placeholders, only get up to the last complete 4 chars
83
- var len = placeHoldersLen > 0
84
- ? validLen - 4
85
- : validLen;
86
-
87
- var i;
88
- for (i = 0; i < len; i += 4) {
89
- tmp =
90
- (revLookup[b64.charCodeAt(i)] << 18) |
91
- (revLookup[b64.charCodeAt(i + 1)] << 12) |
92
- (revLookup[b64.charCodeAt(i + 2)] << 6) |
93
- revLookup[b64.charCodeAt(i + 3)];
94
- arr[curByte++] = (tmp >> 16) & 0xFF;
95
- arr[curByte++] = (tmp >> 8) & 0xFF;
96
- arr[curByte++] = tmp & 0xFF;
97
- }
98
-
99
- if (placeHoldersLen === 2) {
100
- tmp =
101
- (revLookup[b64.charCodeAt(i)] << 2) |
102
- (revLookup[b64.charCodeAt(i + 1)] >> 4);
103
- arr[curByte++] = tmp & 0xFF;
104
- }
105
-
106
- if (placeHoldersLen === 1) {
107
- tmp =
108
- (revLookup[b64.charCodeAt(i)] << 10) |
109
- (revLookup[b64.charCodeAt(i + 1)] << 4) |
110
- (revLookup[b64.charCodeAt(i + 2)] >> 2);
111
- arr[curByte++] = (tmp >> 8) & 0xFF;
112
- arr[curByte++] = tmp & 0xFF;
113
- }
114
-
115
- return arr
116
- }
117
-
118
- function tripletToBase64 (num) {
119
- return lookup[num >> 18 & 0x3F] +
120
- lookup[num >> 12 & 0x3F] +
121
- lookup[num >> 6 & 0x3F] +
122
- lookup[num & 0x3F]
123
- }
124
-
125
- function encodeChunk (uint8, start, end) {
126
- var tmp;
127
- var output = [];
128
- for (var i = start; i < end; i += 3) {
129
- tmp =
130
- ((uint8[i] << 16) & 0xFF0000) +
131
- ((uint8[i + 1] << 8) & 0xFF00) +
132
- (uint8[i + 2] & 0xFF);
133
- output.push(tripletToBase64(tmp));
134
- }
135
- return output.join('')
136
- }
137
-
138
- function fromByteArray (uint8) {
139
- var tmp;
140
- var len = uint8.length;
141
- var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
142
- var parts = [];
143
- var maxChunkLength = 16383; // must be multiple of 3
144
-
145
- // go through the array every three bytes, we'll deal with trailing stuff later
146
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
147
- parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));
148
- }
149
-
150
- // pad the end with zeros, but make sure to not forget the extra bytes
151
- if (extraBytes === 1) {
152
- tmp = uint8[len - 1];
153
- parts.push(
154
- lookup[tmp >> 2] +
155
- lookup[(tmp << 4) & 0x3F] +
156
- '=='
157
- );
158
- } else if (extraBytes === 2) {
159
- tmp = (uint8[len - 2] << 8) + uint8[len - 1];
160
- parts.push(
161
- lookup[tmp >> 10] +
162
- lookup[(tmp >> 4) & 0x3F] +
163
- lookup[(tmp << 2) & 0x3F] +
164
- '='
165
- );
166
- }
167
-
168
- return parts.join('')
169
- }
170
-
171
- var sha256$1 = {exports: {}};
172
-
173
- const _nodeResolve_empty = {};
174
-
175
- const _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({
176
- __proto__: null,
177
- 'default': _nodeResolve_empty
178
- });
179
-
180
- const require$$1 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);
181
-
182
- /**
183
- * [js-sha256]{@link https://github.com/emn178/js-sha256}
184
- *
185
- * @version 0.10.1
186
- * @author Chen, Yi-Cyuan [emn178@gmail.com]
187
- * @copyright Chen, Yi-Cyuan 2014-2023
188
- * @license MIT
189
- */
190
-
191
- (function (module) {
192
- /*jslint bitwise: true */
193
- (function () {
194
-
195
- var ERROR = 'input is invalid type';
196
- var WINDOW = typeof window === 'object';
197
- var root = WINDOW ? window : {};
198
- if (root.JS_SHA256_NO_WINDOW) {
199
- WINDOW = false;
200
- }
201
- var WEB_WORKER = !WINDOW && typeof self === 'object';
202
- var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
203
- if (NODE_JS) {
204
- root = commonjsGlobal;
205
- } else if (WEB_WORKER) {
206
- root = self;
207
- }
208
- var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && 'object' === 'object' && module.exports;
209
- var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
210
- var HEX_CHARS = '0123456789abcdef'.split('');
211
- var EXTRA = [-2147483648, 8388608, 32768, 128];
212
- var SHIFT = [24, 16, 8, 0];
213
- var K = [
214
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
215
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
216
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
217
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
218
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
219
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
220
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
221
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
222
- ];
223
- var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
224
-
225
- var blocks = [];
226
-
227
- if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {
228
- Array.isArray = function (obj) {
229
- return Object.prototype.toString.call(obj) === '[object Array]';
230
- };
231
- }
232
-
233
- if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
234
- ArrayBuffer.isView = function (obj) {
235
- return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
236
- };
237
- }
238
-
239
- var createOutputMethod = function (outputType, is224) {
240
- return function (message) {
241
- return new Sha256(is224, true).update(message)[outputType]();
242
- };
243
- };
244
-
245
- var createMethod = function (is224) {
246
- var method = createOutputMethod('hex', is224);
247
- if (NODE_JS) {
248
- method = nodeWrap(method, is224);
249
- }
250
- method.create = function () {
251
- return new Sha256(is224);
252
- };
253
- method.update = function (message) {
254
- return method.create().update(message);
255
- };
256
- for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
257
- var type = OUTPUT_TYPES[i];
258
- method[type] = createOutputMethod(type, is224);
259
- }
260
- return method;
261
- };
262
-
263
- var nodeWrap = function (method, is224) {
264
- var crypto = require$$1;
265
- var Buffer = require$$1.Buffer;
266
- var algorithm = is224 ? 'sha224' : 'sha256';
267
- var bufferFrom;
268
- if (Buffer.from && !root.JS_SHA256_NO_BUFFER_FROM) {
269
- bufferFrom = Buffer.from;
270
- } else {
271
- bufferFrom = function (message) {
272
- return new Buffer(message);
273
- };
274
- }
275
- var nodeMethod = function (message) {
276
- if (typeof message === 'string') {
277
- return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');
278
- } else {
279
- if (message === null || message === undefined) {
280
- throw new Error(ERROR);
281
- } else if (message.constructor === ArrayBuffer) {
282
- message = new Uint8Array(message);
283
- }
284
- }
285
- if (Array.isArray(message) || ArrayBuffer.isView(message) ||
286
- message.constructor === Buffer) {
287
- return crypto.createHash(algorithm).update(bufferFrom(message)).digest('hex');
288
- } else {
289
- return method(message);
290
- }
291
- };
292
- return nodeMethod;
293
- };
294
-
295
- var createHmacOutputMethod = function (outputType, is224) {
296
- return function (key, message) {
297
- return new HmacSha256(key, is224, true).update(message)[outputType]();
298
- };
299
- };
300
-
301
- var createHmacMethod = function (is224) {
302
- var method = createHmacOutputMethod('hex', is224);
303
- method.create = function (key) {
304
- return new HmacSha256(key, is224);
305
- };
306
- method.update = function (key, message) {
307
- return method.create(key).update(message);
308
- };
309
- for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
310
- var type = OUTPUT_TYPES[i];
311
- method[type] = createHmacOutputMethod(type, is224);
312
- }
313
- return method;
314
- };
315
-
316
- function Sha256(is224, sharedMemory) {
317
- if (sharedMemory) {
318
- blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
319
- blocks[4] = blocks[5] = blocks[6] = blocks[7] =
320
- blocks[8] = blocks[9] = blocks[10] = blocks[11] =
321
- blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
322
- this.blocks = blocks;
323
- } else {
324
- this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
325
- }
326
-
327
- if (is224) {
328
- this.h0 = 0xc1059ed8;
329
- this.h1 = 0x367cd507;
330
- this.h2 = 0x3070dd17;
331
- this.h3 = 0xf70e5939;
332
- this.h4 = 0xffc00b31;
333
- this.h5 = 0x68581511;
334
- this.h6 = 0x64f98fa7;
335
- this.h7 = 0xbefa4fa4;
336
- } else { // 256
337
- this.h0 = 0x6a09e667;
338
- this.h1 = 0xbb67ae85;
339
- this.h2 = 0x3c6ef372;
340
- this.h3 = 0xa54ff53a;
341
- this.h4 = 0x510e527f;
342
- this.h5 = 0x9b05688c;
343
- this.h6 = 0x1f83d9ab;
344
- this.h7 = 0x5be0cd19;
345
- }
346
-
347
- this.block = this.start = this.bytes = this.hBytes = 0;
348
- this.finalized = this.hashed = false;
349
- this.first = true;
350
- this.is224 = is224;
351
- }
352
-
353
- Sha256.prototype.update = function (message) {
354
- if (this.finalized) {
355
- return;
356
- }
357
- var notString, type = typeof message;
358
- if (type !== 'string') {
359
- if (type === 'object') {
360
- if (message === null) {
361
- throw new Error(ERROR);
362
- } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
363
- message = new Uint8Array(message);
364
- } else if (!Array.isArray(message)) {
365
- if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
366
- throw new Error(ERROR);
367
- }
368
- }
369
- } else {
370
- throw new Error(ERROR);
371
- }
372
- notString = true;
373
- }
374
- var code, index = 0, i, length = message.length, blocks = this.blocks;
375
-
376
- while (index < length) {
377
- if (this.hashed) {
378
- this.hashed = false;
379
- blocks[0] = this.block;
380
- blocks[16] = blocks[1] = blocks[2] = blocks[3] =
381
- blocks[4] = blocks[5] = blocks[6] = blocks[7] =
382
- blocks[8] = blocks[9] = blocks[10] = blocks[11] =
383
- blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
384
- }
385
-
386
- if (notString) {
387
- for (i = this.start; index < length && i < 64; ++index) {
388
- blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
389
- }
390
- } else {
391
- for (i = this.start; index < length && i < 64; ++index) {
392
- code = message.charCodeAt(index);
393
- if (code < 0x80) {
394
- blocks[i >> 2] |= code << SHIFT[i++ & 3];
395
- } else if (code < 0x800) {
396
- blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
397
- blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
398
- } else if (code < 0xd800 || code >= 0xe000) {
399
- blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
400
- blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
401
- blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
402
- } else {
403
- code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
404
- blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
405
- blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
406
- blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
407
- blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
408
- }
409
- }
410
- }
411
-
412
- this.lastByteIndex = i;
413
- this.bytes += i - this.start;
414
- if (i >= 64) {
415
- this.block = blocks[16];
416
- this.start = i - 64;
417
- this.hash();
418
- this.hashed = true;
419
- } else {
420
- this.start = i;
421
- }
422
- }
423
- if (this.bytes > 4294967295) {
424
- this.hBytes += this.bytes / 4294967296 << 0;
425
- this.bytes = this.bytes % 4294967296;
426
- }
427
- return this;
428
- };
429
-
430
- Sha256.prototype.finalize = function () {
431
- if (this.finalized) {
432
- return;
433
- }
434
- this.finalized = true;
435
- var blocks = this.blocks, i = this.lastByteIndex;
436
- blocks[16] = this.block;
437
- blocks[i >> 2] |= EXTRA[i & 3];
438
- this.block = blocks[16];
439
- if (i >= 56) {
440
- if (!this.hashed) {
441
- this.hash();
442
- }
443
- blocks[0] = this.block;
444
- blocks[16] = blocks[1] = blocks[2] = blocks[3] =
445
- blocks[4] = blocks[5] = blocks[6] = blocks[7] =
446
- blocks[8] = blocks[9] = blocks[10] = blocks[11] =
447
- blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
448
- }
449
- blocks[14] = this.hBytes << 3 | this.bytes >>> 29;
450
- blocks[15] = this.bytes << 3;
451
- this.hash();
452
- };
453
-
454
- Sha256.prototype.hash = function () {
455
- var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,
456
- h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;
457
-
458
- for (j = 16; j < 64; ++j) {
459
- // rightrotate
460
- t1 = blocks[j - 15];
461
- s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);
462
- t1 = blocks[j - 2];
463
- s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);
464
- blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;
465
- }
466
-
467
- bc = b & c;
468
- for (j = 0; j < 64; j += 4) {
469
- if (this.first) {
470
- if (this.is224) {
471
- ab = 300032;
472
- t1 = blocks[0] - 1413257819;
473
- h = t1 - 150054599 << 0;
474
- d = t1 + 24177077 << 0;
475
- } else {
476
- ab = 704751109;
477
- t1 = blocks[0] - 210244248;
478
- h = t1 - 1521486534 << 0;
479
- d = t1 + 143694565 << 0;
480
- }
481
- this.first = false;
482
- } else {
483
- s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
484
- s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
485
- ab = a & b;
486
- maj = ab ^ (a & c) ^ bc;
487
- ch = (e & f) ^ (~e & g);
488
- t1 = h + s1 + ch + K[j] + blocks[j];
489
- t2 = s0 + maj;
490
- h = d + t1 << 0;
491
- d = t1 + t2 << 0;
492
- }
493
- s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));
494
- s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));
495
- da = d & a;
496
- maj = da ^ (d & b) ^ ab;
497
- ch = (h & e) ^ (~h & f);
498
- t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];
499
- t2 = s0 + maj;
500
- g = c + t1 << 0;
501
- c = t1 + t2 << 0;
502
- s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));
503
- s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));
504
- cd = c & d;
505
- maj = cd ^ (c & a) ^ da;
506
- ch = (g & h) ^ (~g & e);
507
- t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];
508
- t2 = s0 + maj;
509
- f = b + t1 << 0;
510
- b = t1 + t2 << 0;
511
- s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));
512
- s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));
513
- bc = b & c;
514
- maj = bc ^ (b & d) ^ cd;
515
- ch = (f & g) ^ (~f & h);
516
- t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];
517
- t2 = s0 + maj;
518
- e = a + t1 << 0;
519
- a = t1 + t2 << 0;
520
- this.chromeBugWorkAround = true;
521
- }
522
-
523
- this.h0 = this.h0 + a << 0;
524
- this.h1 = this.h1 + b << 0;
525
- this.h2 = this.h2 + c << 0;
526
- this.h3 = this.h3 + d << 0;
527
- this.h4 = this.h4 + e << 0;
528
- this.h5 = this.h5 + f << 0;
529
- this.h6 = this.h6 + g << 0;
530
- this.h7 = this.h7 + h << 0;
531
- };
532
-
533
- Sha256.prototype.hex = function () {
534
- this.finalize();
535
-
536
- var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
537
- h6 = this.h6, h7 = this.h7;
538
-
539
- var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
540
- HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
541
- HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
542
- HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
543
- HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
544
- HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
545
- HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
546
- HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
547
- HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
548
- HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
549
- HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
550
- HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
551
- HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +
552
- HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
553
- HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
554
- HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
555
- HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +
556
- HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +
557
- HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +
558
- HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +
559
- HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +
560
- HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +
561
- HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +
562
- HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +
563
- HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +
564
- HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +
565
- HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +
566
- HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];
567
- if (!this.is224) {
568
- hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +
569
- HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +
570
- HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +
571
- HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];
572
- }
573
- return hex;
574
- };
575
-
576
- Sha256.prototype.toString = Sha256.prototype.hex;
577
-
578
- Sha256.prototype.digest = function () {
579
- this.finalize();
580
-
581
- var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,
582
- h6 = this.h6, h7 = this.h7;
583
-
584
- var arr = [
585
- (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,
586
- (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,
587
- (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,
588
- (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,
589
- (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,
590
- (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,
591
- (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF
592
- ];
593
- if (!this.is224) {
594
- arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);
595
- }
596
- return arr;
597
- };
598
-
599
- Sha256.prototype.array = Sha256.prototype.digest;
600
-
601
- Sha256.prototype.arrayBuffer = function () {
602
- this.finalize();
603
-
604
- var buffer = new ArrayBuffer(this.is224 ? 28 : 32);
605
- var dataView = new DataView(buffer);
606
- dataView.setUint32(0, this.h0);
607
- dataView.setUint32(4, this.h1);
608
- dataView.setUint32(8, this.h2);
609
- dataView.setUint32(12, this.h3);
610
- dataView.setUint32(16, this.h4);
611
- dataView.setUint32(20, this.h5);
612
- dataView.setUint32(24, this.h6);
613
- if (!this.is224) {
614
- dataView.setUint32(28, this.h7);
615
- }
616
- return buffer;
617
- };
618
-
619
- function HmacSha256(key, is224, sharedMemory) {
620
- var i, type = typeof key;
621
- if (type === 'string') {
622
- var bytes = [], length = key.length, index = 0, code;
623
- for (i = 0; i < length; ++i) {
624
- code = key.charCodeAt(i);
625
- if (code < 0x80) {
626
- bytes[index++] = code;
627
- } else if (code < 0x800) {
628
- bytes[index++] = (0xc0 | (code >> 6));
629
- bytes[index++] = (0x80 | (code & 0x3f));
630
- } else if (code < 0xd800 || code >= 0xe000) {
631
- bytes[index++] = (0xe0 | (code >> 12));
632
- bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
633
- bytes[index++] = (0x80 | (code & 0x3f));
634
- } else {
635
- code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
636
- bytes[index++] = (0xf0 | (code >> 18));
637
- bytes[index++] = (0x80 | ((code >> 12) & 0x3f));
638
- bytes[index++] = (0x80 | ((code >> 6) & 0x3f));
639
- bytes[index++] = (0x80 | (code & 0x3f));
640
- }
641
- }
642
- key = bytes;
643
- } else {
644
- if (type === 'object') {
645
- if (key === null) {
646
- throw new Error(ERROR);
647
- } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {
648
- key = new Uint8Array(key);
649
- } else if (!Array.isArray(key)) {
650
- if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {
651
- throw new Error(ERROR);
652
- }
653
- }
654
- } else {
655
- throw new Error(ERROR);
656
- }
657
- }
658
-
659
- if (key.length > 64) {
660
- key = (new Sha256(is224, true)).update(key).array();
661
- }
662
-
663
- var oKeyPad = [], iKeyPad = [];
664
- for (i = 0; i < 64; ++i) {
665
- var b = key[i] || 0;
666
- oKeyPad[i] = 0x5c ^ b;
667
- iKeyPad[i] = 0x36 ^ b;
668
- }
669
-
670
- Sha256.call(this, is224, sharedMemory);
671
-
672
- this.update(iKeyPad);
673
- this.oKeyPad = oKeyPad;
674
- this.inner = true;
675
- this.sharedMemory = sharedMemory;
676
- }
677
- HmacSha256.prototype = new Sha256();
678
-
679
- HmacSha256.prototype.finalize = function () {
680
- Sha256.prototype.finalize.call(this);
681
- if (this.inner) {
682
- this.inner = false;
683
- var innerHash = this.array();
684
- Sha256.call(this, this.is224, this.sharedMemory);
685
- this.update(this.oKeyPad);
686
- this.update(innerHash);
687
- Sha256.prototype.finalize.call(this);
688
- }
689
- };
690
-
691
- var exports = createMethod();
692
- exports.sha256 = exports;
693
- exports.sha224 = createMethod(true);
694
- exports.sha256.hmac = createHmacMethod();
695
- exports.sha224.hmac = createHmacMethod(true);
696
-
697
- if (COMMON_JS) {
698
- module.exports = exports;
699
- } else {
700
- root.sha256 = exports.sha256;
701
- root.sha224 = exports.sha224;
702
- }
703
- })();
704
- }(sha256$1));
705
-
706
- const sha256 = sha256$1.exports;
707
-
708
- class InvalidTokenError extends Error {
709
- }
710
- InvalidTokenError.prototype.name = "InvalidTokenError";
711
- function b64DecodeUnicode(str) {
712
- return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {
713
- let code = p.charCodeAt(0).toString(16).toUpperCase();
714
- if (code.length < 2) {
715
- code = "0" + code;
716
- }
717
- return "%" + code;
718
- }));
719
- }
720
- function base64UrlDecode(str) {
721
- let output = str.replace(/-/g, "+").replace(/_/g, "/");
722
- switch (output.length % 4) {
723
- case 0:
724
- break;
725
- case 2:
726
- output += "==";
727
- break;
728
- case 3:
729
- output += "=";
730
- break;
731
- default:
732
- throw new Error("base64 string is not of the correct length");
733
- }
734
- try {
735
- return b64DecodeUnicode(output);
736
- }
737
- catch (err) {
738
- return atob(output);
739
- }
740
- }
741
- function jwtDecode(token, options) {
742
- if (typeof token !== "string") {
743
- throw new InvalidTokenError("Invalid token specified: must be a string");
744
- }
745
- options || (options = {});
746
- const pos = options.header === true ? 0 : 1;
747
- const part = token.split(".")[pos];
748
- if (typeof part !== "string") {
749
- throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);
750
- }
751
- let decoded;
752
- try {
753
- decoded = base64UrlDecode(part);
754
- }
755
- catch (e) {
756
- throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);
757
- }
758
- try {
759
- return JSON.parse(decoded);
760
- }
761
- catch (e) {
762
- throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);
763
- }
764
- }
765
-
766
- /*
767
- * Copyright 2016 Red Hat, Inc. and/or its affiliates
768
- * and other contributors as indicated by the @author tags.
769
- *
770
- * Licensed under the Apache License, Version 2.0 (the "License");
771
- * you may not use this file except in compliance with the License.
772
- * You may obtain a copy of the License at
773
- *
774
- * http://www.apache.org/licenses/LICENSE-2.0
775
- *
776
- * Unless required by applicable law or agreed to in writing, software
777
- * distributed under the License is distributed on an "AS IS" BASIS,
778
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
779
- * See the License for the specific language governing permissions and
780
- * limitations under the License.
781
- */
782
-
783
- if (typeof Promise === 'undefined') {
784
- throw Error('Keycloak requires an environment that supports Promises. Make sure that you include the appropriate polyfill.');
785
- }
786
-
787
- function Keycloak (config) {
788
- if (!(this instanceof Keycloak)) {
789
- throw new Error("The 'Keycloak' constructor must be invoked with 'new'.")
790
- }
791
-
792
- var kc = this;
793
- var adapter;
794
- var refreshQueue = [];
795
- var callbackStorage;
796
-
797
- var loginIframe = {
798
- enable: true,
799
- callbackList: [],
800
- interval: 5
801
- };
802
-
803
- var scripts = document.getElementsByTagName('script');
804
- for (var i = 0; i < scripts.length; i++) {
805
- if ((scripts[i].src.indexOf('keycloak.js') !== -1 || scripts[i].src.indexOf('keycloak.min.js') !== -1) && scripts[i].src.indexOf('version=') !== -1) {
806
- kc.iframeVersion = scripts[i].src.substring(scripts[i].src.indexOf('version=') + 8).split('&')[0];
807
- }
808
- }
809
-
810
- var useNonce = true;
811
- var logInfo = createLogger(console.info);
812
- var logWarn = createLogger(console.warn);
813
-
814
- kc.init = function (initOptions) {
815
- if (kc.didInitialize) {
816
- throw new Error("A 'Keycloak' instance can only be initialized once.");
817
- }
818
-
819
- kc.didInitialize = true;
820
-
821
- kc.authenticated = false;
822
-
823
- callbackStorage = createCallbackStorage();
824
- var adapters = ['default', 'cordova', 'cordova-native'];
825
-
826
- if (initOptions && adapters.indexOf(initOptions.adapter) > -1) {
827
- adapter = loadAdapter(initOptions.adapter);
828
- } else if (initOptions && typeof initOptions.adapter === "object") {
829
- adapter = initOptions.adapter;
830
- } else {
831
- if (window.Cordova || window.cordova) {
832
- adapter = loadAdapter('cordova');
833
- } else {
834
- adapter = loadAdapter();
835
- }
836
- }
837
-
838
- if (initOptions) {
839
- if (typeof initOptions.useNonce !== 'undefined') {
840
- useNonce = initOptions.useNonce;
841
- }
842
-
843
- if (typeof initOptions.checkLoginIframe !== 'undefined') {
844
- loginIframe.enable = initOptions.checkLoginIframe;
845
- }
846
-
847
- if (initOptions.checkLoginIframeInterval) {
848
- loginIframe.interval = initOptions.checkLoginIframeInterval;
849
- }
850
-
851
- if (initOptions.onLoad === 'login-required') {
852
- kc.loginRequired = true;
853
- }
854
-
855
- if (initOptions.responseMode) {
856
- if (initOptions.responseMode === 'query' || initOptions.responseMode === 'fragment') {
857
- kc.responseMode = initOptions.responseMode;
858
- } else {
859
- throw 'Invalid value for responseMode';
860
- }
861
- }
862
-
863
- if (initOptions.flow) {
864
- switch (initOptions.flow) {
865
- case 'standard':
866
- kc.responseType = 'code';
867
- break;
868
- case 'implicit':
869
- kc.responseType = 'id_token token';
870
- break;
871
- case 'hybrid':
872
- kc.responseType = 'code id_token token';
873
- break;
874
- default:
875
- throw 'Invalid value for flow';
876
- }
877
- kc.flow = initOptions.flow;
878
- }
879
-
880
- if (initOptions.timeSkew != null) {
881
- kc.timeSkew = initOptions.timeSkew;
882
- }
883
-
884
- if(initOptions.redirectUri) {
885
- kc.redirectUri = initOptions.redirectUri;
886
- }
887
-
888
- if (initOptions.silentCheckSsoRedirectUri) {
889
- kc.silentCheckSsoRedirectUri = initOptions.silentCheckSsoRedirectUri;
890
- }
891
-
892
- if (typeof initOptions.silentCheckSsoFallback === 'boolean') {
893
- kc.silentCheckSsoFallback = initOptions.silentCheckSsoFallback;
894
- } else {
895
- kc.silentCheckSsoFallback = true;
896
- }
897
-
898
- if (initOptions.pkceMethod) {
899
- if (initOptions.pkceMethod !== "S256") {
900
- throw 'Invalid value for pkceMethod';
901
- }
902
- kc.pkceMethod = initOptions.pkceMethod;
903
- }
904
-
905
- if (typeof initOptions.enableLogging === 'boolean') {
906
- kc.enableLogging = initOptions.enableLogging;
907
- } else {
908
- kc.enableLogging = false;
909
- }
910
-
911
- if (typeof initOptions.scope === 'string') {
912
- kc.scope = initOptions.scope;
913
- }
914
-
915
- if (typeof initOptions.acrValues === 'string') {
916
- kc.acrValues = initOptions.acrValues;
917
- }
918
-
919
- if (typeof initOptions.messageReceiveTimeout === 'number' && initOptions.messageReceiveTimeout > 0) {
920
- kc.messageReceiveTimeout = initOptions.messageReceiveTimeout;
921
- } else {
922
- kc.messageReceiveTimeout = 10000;
923
- }
924
- }
925
-
926
- if (!kc.responseMode) {
927
- kc.responseMode = 'fragment';
928
- }
929
- if (!kc.responseType) {
930
- kc.responseType = 'code';
931
- kc.flow = 'standard';
932
- }
933
-
934
- var promise = createPromise();
935
-
936
- var initPromise = createPromise();
937
- initPromise.promise.then(function() {
938
- kc.onReady && kc.onReady(kc.authenticated);
939
- promise.setSuccess(kc.authenticated);
940
- }).catch(function(error) {
941
- promise.setError(error);
942
- });
943
-
944
- var configPromise = loadConfig();
945
-
946
- function onLoad() {
947
- var doLogin = function(prompt) {
948
- if (!prompt) {
949
- options.prompt = 'none';
950
- }
951
-
952
- if (initOptions && initOptions.locale) {
953
- options.locale = initOptions.locale;
954
- }
955
- kc.login(options).then(function () {
956
- initPromise.setSuccess();
957
- }).catch(function (error) {
958
- initPromise.setError(error);
959
- });
960
- };
961
-
962
- var checkSsoSilently = function() {
963
- var ifrm = document.createElement("iframe");
964
- var src = kc.createLoginUrl({prompt: 'none', redirectUri: kc.silentCheckSsoRedirectUri});
965
- ifrm.setAttribute("src", src);
966
- ifrm.setAttribute("sandbox", "allow-storage-access-by-user-activation allow-scripts allow-same-origin");
967
- ifrm.setAttribute("title", "keycloak-silent-check-sso");
968
- ifrm.style.display = "none";
969
- document.body.appendChild(ifrm);
970
-
971
- var messageCallback = function(event) {
972
- if (event.origin !== window.location.origin || ifrm.contentWindow !== event.source) {
973
- return;
974
- }
975
-
976
- var oauth = parseCallback(event.data);
977
- processCallback(oauth, initPromise);
978
-
979
- document.body.removeChild(ifrm);
980
- window.removeEventListener("message", messageCallback);
981
- };
982
-
983
- window.addEventListener("message", messageCallback);
984
- };
985
-
986
- var options = {};
987
- switch (initOptions.onLoad) {
988
- case 'check-sso':
989
- if (loginIframe.enable) {
990
- setupCheckLoginIframe().then(function() {
991
- checkLoginIframe().then(function (unchanged) {
992
- if (!unchanged) {
993
- kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);
994
- } else {
995
- initPromise.setSuccess();
996
- }
997
- }).catch(function (error) {
998
- initPromise.setError(error);
999
- });
1000
- });
1001
- } else {
1002
- kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);
1003
- }
1004
- break;
1005
- case 'login-required':
1006
- doLogin(true);
1007
- break;
1008
- default:
1009
- throw 'Invalid value for onLoad';
1010
- }
1011
- }
1012
-
1013
- function processInit() {
1014
- var callback = parseCallback(window.location.href);
1015
-
1016
- if (callback) {
1017
- window.history.replaceState(window.history.state, null, callback.newUrl);
1018
- }
1019
-
1020
- if (callback && callback.valid) {
1021
- return setupCheckLoginIframe().then(function() {
1022
- processCallback(callback, initPromise);
1023
- }).catch(function (error) {
1024
- initPromise.setError(error);
1025
- });
1026
- } else if (initOptions) {
1027
- if (initOptions.token && initOptions.refreshToken) {
1028
- setToken(initOptions.token, initOptions.refreshToken, initOptions.idToken);
1029
-
1030
- if (loginIframe.enable) {
1031
- setupCheckLoginIframe().then(function() {
1032
- checkLoginIframe().then(function (unchanged) {
1033
- if (unchanged) {
1034
- kc.onAuthSuccess && kc.onAuthSuccess();
1035
- initPromise.setSuccess();
1036
- scheduleCheckIframe();
1037
- } else {
1038
- initPromise.setSuccess();
1039
- }
1040
- }).catch(function (error) {
1041
- initPromise.setError(error);
1042
- });
1043
- });
1044
- } else {
1045
- kc.updateToken(-1).then(function() {
1046
- kc.onAuthSuccess && kc.onAuthSuccess();
1047
- initPromise.setSuccess();
1048
- }).catch(function(error) {
1049
- kc.onAuthError && kc.onAuthError();
1050
- if (initOptions.onLoad) {
1051
- onLoad();
1052
- } else {
1053
- initPromise.setError(error);
1054
- }
1055
- });
1056
- }
1057
- } else if (initOptions.onLoad) {
1058
- onLoad();
1059
- } else {
1060
- initPromise.setSuccess();
1061
- }
1062
- } else {
1063
- initPromise.setSuccess();
1064
- }
1065
- }
1066
-
1067
- function domReady() {
1068
- var promise = createPromise();
1069
-
1070
- var checkReadyState = function () {
1071
- if (document.readyState === 'interactive' || document.readyState === 'complete') {
1072
- document.removeEventListener('readystatechange', checkReadyState);
1073
- promise.setSuccess();
1074
- }
1075
- };
1076
- document.addEventListener('readystatechange', checkReadyState);
1077
-
1078
- checkReadyState(); // just in case the event was already fired and we missed it (in case the init is done later than at the load time, i.e. it's done from code)
1079
-
1080
- return promise.promise;
1081
- }
1082
-
1083
- configPromise.then(function () {
1084
- domReady()
1085
- .then(check3pCookiesSupported)
1086
- .then(processInit)
1087
- .catch(function (error) {
1088
- promise.setError(error);
1089
- });
1090
- });
1091
- configPromise.catch(function (error) {
1092
- promise.setError(error);
1093
- });
1094
-
1095
- return promise.promise;
1096
- };
1097
-
1098
- kc.login = function (options) {
1099
- return adapter.login(options);
1100
- };
1101
-
1102
- function generateRandomData(len) {
1103
- // use web crypto APIs if possible
1104
- var array = null;
1105
- var crypto = window.crypto || window.msCrypto;
1106
- if (crypto && crypto.getRandomValues && window.Uint8Array) {
1107
- array = new Uint8Array(len);
1108
- crypto.getRandomValues(array);
1109
- return array;
1110
- }
1111
-
1112
- // fallback to Math random
1113
- array = new Array(len);
1114
- for (var j = 0; j < array.length; j++) {
1115
- array[j] = Math.floor(256 * Math.random());
1116
- }
1117
- return array;
1118
- }
1119
-
1120
- function generateCodeVerifier(len) {
1121
- return generateRandomString(len, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');
1122
- }
1123
-
1124
- function generateRandomString(len, alphabet){
1125
- var randomData = generateRandomData(len);
1126
- var chars = new Array(len);
1127
- for (var i = 0; i < len; i++) {
1128
- chars[i] = alphabet.charCodeAt(randomData[i] % alphabet.length);
1129
- }
1130
- return String.fromCharCode.apply(null, chars);
1131
- }
1132
-
1133
- function generatePkceChallenge(pkceMethod, codeVerifier) {
1134
- switch (pkceMethod) {
1135
- // The use of the "plain" method is considered insecure and therefore not supported.
1136
- case "S256":
1137
- // hash codeVerifier, then encode as url-safe base64 without padding
1138
- var hashBytes = new Uint8Array(sha256.arrayBuffer(codeVerifier));
1139
- var encodedHash = base64Js.fromByteArray(hashBytes)
1140
- .replace(/\+/g, '-')
1141
- .replace(/\//g, '_')
1142
- .replace(/\=/g, '');
1143
- return encodedHash;
1144
- default:
1145
- throw 'Invalid value for pkceMethod';
1146
- }
1147
- }
1148
-
1149
- function buildClaimsParameter(requestedAcr){
1150
- var claims = {
1151
- id_token: {
1152
- acr: requestedAcr
1153
- }
1154
- };
1155
- return JSON.stringify(claims);
1156
- }
1157
-
1158
- kc.createLoginUrl = function(options) {
1159
- var state = createUUID();
1160
- var nonce = createUUID();
1161
-
1162
- var redirectUri = adapter.redirectUri(options);
1163
-
1164
- var callbackState = {
1165
- state: state,
1166
- nonce: nonce,
1167
- redirectUri: encodeURIComponent(redirectUri)
1168
- };
1169
-
1170
- if (options && options.prompt) {
1171
- callbackState.prompt = options.prompt;
1172
- }
1173
-
1174
- var baseUrl;
1175
- if (options && options.action == 'register') {
1176
- baseUrl = kc.endpoints.register();
1177
- } else {
1178
- baseUrl = kc.endpoints.authorize();
1179
- }
1180
-
1181
- var scope = options && options.scope || kc.scope;
1182
- if (!scope) {
1183
- // if scope is not set, default to "openid"
1184
- scope = "openid";
1185
- } else if (scope.indexOf("openid") === -1) {
1186
- // if openid scope is missing, prefix the given scopes with it
1187
- scope = "openid " + scope;
1188
- }
1189
-
1190
- var url = baseUrl
1191
- + '?client_id=' + encodeURIComponent(kc.clientId)
1192
- + '&redirect_uri=' + encodeURIComponent(redirectUri)
1193
- + '&state=' + encodeURIComponent(state)
1194
- + '&response_mode=' + encodeURIComponent(kc.responseMode)
1195
- + '&response_type=' + encodeURIComponent(kc.responseType)
1196
- + '&scope=' + encodeURIComponent(scope);
1197
- if (useNonce) {
1198
- url = url + '&nonce=' + encodeURIComponent(nonce);
1199
- }
1200
-
1201
- if (options && options.prompt) {
1202
- url += '&prompt=' + encodeURIComponent(options.prompt);
1203
- }
1204
-
1205
- if (options && options.maxAge) {
1206
- url += '&max_age=' + encodeURIComponent(options.maxAge);
1207
- }
1208
-
1209
- if (options && options.loginHint) {
1210
- url += '&login_hint=' + encodeURIComponent(options.loginHint);
1211
- }
1212
-
1213
- if (options && options.idpHint) {
1214
- url += '&kc_idp_hint=' + encodeURIComponent(options.idpHint);
1215
- }
1216
-
1217
- if (options && options.action && options.action != 'register') {
1218
- url += '&kc_action=' + encodeURIComponent(options.action);
1219
- }
1220
-
1221
- if (options && options.locale) {
1222
- url += '&ui_locales=' + encodeURIComponent(options.locale);
1223
- }
1224
-
1225
- if (options && options.acr) {
1226
- var claimsParameter = buildClaimsParameter(options.acr);
1227
- url += '&claims=' + encodeURIComponent(claimsParameter);
1228
- }
1229
-
1230
- if ((options && options.acrValues) || kc.acrValues) {
1231
- url += '&acr_values=' + encodeURIComponent(options.acrValues || kc.acrValues);
1232
- }
1233
-
1234
- if (kc.pkceMethod) {
1235
- var codeVerifier = generateCodeVerifier(96);
1236
- callbackState.pkceCodeVerifier = codeVerifier;
1237
- var pkceChallenge = generatePkceChallenge(kc.pkceMethod, codeVerifier);
1238
- url += '&code_challenge=' + pkceChallenge;
1239
- url += '&code_challenge_method=' + kc.pkceMethod;
1240
- }
1241
-
1242
- callbackStorage.add(callbackState);
1243
-
1244
- return url;
1245
- };
1246
-
1247
- kc.logout = function(options) {
1248
- return adapter.logout(options);
1249
- };
1250
-
1251
- kc.createLogoutUrl = function(options) {
1252
- var url = kc.endpoints.logout()
1253
- + '?client_id=' + encodeURIComponent(kc.clientId)
1254
- + '&post_logout_redirect_uri=' + encodeURIComponent(adapter.redirectUri(options, false));
1255
-
1256
- if (kc.idToken) {
1257
- url += '&id_token_hint=' + encodeURIComponent(kc.idToken);
1258
- }
1259
-
1260
- return url;
1261
- };
1262
-
1263
- kc.register = function (options) {
1264
- return adapter.register(options);
1265
- };
1266
-
1267
- kc.createRegisterUrl = function(options) {
1268
- if (!options) {
1269
- options = {};
1270
- }
1271
- options.action = 'register';
1272
- return kc.createLoginUrl(options);
1273
- };
1274
-
1275
- kc.createAccountUrl = function(options) {
1276
- var realm = getRealmUrl();
1277
- var url = undefined;
1278
- if (typeof realm !== 'undefined') {
1279
- url = realm
1280
- + '/account'
1281
- + '?referrer=' + encodeURIComponent(kc.clientId)
1282
- + '&referrer_uri=' + encodeURIComponent(adapter.redirectUri(options));
1283
- }
1284
- return url;
1285
- };
1286
-
1287
- kc.accountManagement = function() {
1288
- return adapter.accountManagement();
1289
- };
1290
-
1291
- kc.hasRealmRole = function (role) {
1292
- var access = kc.realmAccess;
1293
- return !!access && access.roles.indexOf(role) >= 0;
1294
- };
1295
-
1296
- kc.hasResourceRole = function(role, resource) {
1297
- if (!kc.resourceAccess) {
1298
- return false;
1299
- }
1300
-
1301
- var access = kc.resourceAccess[resource || kc.clientId];
1302
- return !!access && access.roles.indexOf(role) >= 0;
1303
- };
1304
-
1305
- kc.loadUserProfile = function() {
1306
- var url = getRealmUrl() + '/account';
1307
- var req = new XMLHttpRequest();
1308
- req.open('GET', url, true);
1309
- req.setRequestHeader('Accept', 'application/json');
1310
- req.setRequestHeader('Authorization', 'bearer ' + kc.token);
1311
-
1312
- var promise = createPromise();
1313
-
1314
- req.onreadystatechange = function () {
1315
- if (req.readyState == 4) {
1316
- if (req.status == 200) {
1317
- kc.profile = JSON.parse(req.responseText);
1318
- promise.setSuccess(kc.profile);
1319
- } else {
1320
- promise.setError();
1321
- }
1322
- }
1323
- };
1324
-
1325
- req.send();
1326
-
1327
- return promise.promise;
1328
- };
1329
-
1330
- kc.loadUserInfo = function() {
1331
- var url = kc.endpoints.userinfo();
1332
- var req = new XMLHttpRequest();
1333
- req.open('GET', url, true);
1334
- req.setRequestHeader('Accept', 'application/json');
1335
- req.setRequestHeader('Authorization', 'bearer ' + kc.token);
1336
-
1337
- var promise = createPromise();
1338
-
1339
- req.onreadystatechange = function () {
1340
- if (req.readyState == 4) {
1341
- if (req.status == 200) {
1342
- kc.userInfo = JSON.parse(req.responseText);
1343
- promise.setSuccess(kc.userInfo);
1344
- } else {
1345
- promise.setError();
1346
- }
1347
- }
1348
- };
1349
-
1350
- req.send();
1351
-
1352
- return promise.promise;
1353
- };
1354
-
1355
- kc.isTokenExpired = function(minValidity) {
1356
- if (!kc.tokenParsed || (!kc.refreshToken && kc.flow != 'implicit' )) {
1357
- throw 'Not authenticated';
1358
- }
1359
-
1360
- if (kc.timeSkew == null) {
1361
- logInfo('[KEYCLOAK] Unable to determine if token is expired as timeskew is not set');
1362
- return true;
1363
- }
1364
-
1365
- var expiresIn = kc.tokenParsed['exp'] - Math.ceil(new Date().getTime() / 1000) + kc.timeSkew;
1366
- if (minValidity) {
1367
- if (isNaN(minValidity)) {
1368
- throw 'Invalid minValidity';
1369
- }
1370
- expiresIn -= minValidity;
1371
- }
1372
- return expiresIn < 0;
1373
- };
1374
-
1375
- kc.updateToken = function(minValidity) {
1376
- var promise = createPromise();
1377
-
1378
- if (!kc.refreshToken) {
1379
- promise.setError();
1380
- return promise.promise;
1381
- }
1382
-
1383
- minValidity = minValidity || 5;
1384
-
1385
- var exec = function() {
1386
- var refreshToken = false;
1387
- if (minValidity == -1) {
1388
- refreshToken = true;
1389
- logInfo('[KEYCLOAK] Refreshing token: forced refresh');
1390
- } else if (!kc.tokenParsed || kc.isTokenExpired(minValidity)) {
1391
- refreshToken = true;
1392
- logInfo('[KEYCLOAK] Refreshing token: token expired');
1393
- }
1394
-
1395
- if (!refreshToken) {
1396
- promise.setSuccess(false);
1397
- } else {
1398
- var params = 'grant_type=refresh_token&' + 'refresh_token=' + kc.refreshToken;
1399
- var url = kc.endpoints.token();
1400
-
1401
- refreshQueue.push(promise);
1402
-
1403
- if (refreshQueue.length == 1) {
1404
- var req = new XMLHttpRequest();
1405
- req.open('POST', url, true);
1406
- req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
1407
- req.withCredentials = true;
1408
-
1409
- params += '&client_id=' + encodeURIComponent(kc.clientId);
1410
-
1411
- var timeLocal = new Date().getTime();
1412
-
1413
- req.onreadystatechange = function () {
1414
- if (req.readyState == 4) {
1415
- if (req.status == 200) {
1416
- logInfo('[KEYCLOAK] Token refreshed');
1417
-
1418
- timeLocal = (timeLocal + new Date().getTime()) / 2;
1419
-
1420
- var tokenResponse = JSON.parse(req.responseText);
1421
-
1422
- setToken(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], timeLocal);
1423
-
1424
- kc.onAuthRefreshSuccess && kc.onAuthRefreshSuccess();
1425
- for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {
1426
- p.setSuccess(true);
1427
- }
1428
- } else {
1429
- logWarn('[KEYCLOAK] Failed to refresh token');
1430
-
1431
- if (req.status == 400) {
1432
- kc.clearToken();
1433
- }
1434
-
1435
- kc.onAuthRefreshError && kc.onAuthRefreshError();
1436
- for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {
1437
- p.setError(true);
1438
- }
1439
- }
1440
- }
1441
- };
1442
-
1443
- req.send(params);
1444
- }
1445
- }
1446
- };
1447
-
1448
- if (loginIframe.enable) {
1449
- var iframePromise = checkLoginIframe();
1450
- iframePromise.then(function() {
1451
- exec();
1452
- }).catch(function(error) {
1453
- promise.setError(error);
1454
- });
1455
- } else {
1456
- exec();
1457
- }
1458
-
1459
- return promise.promise;
1460
- };
1461
-
1462
- kc.clearToken = function() {
1463
- if (kc.token) {
1464
- setToken(null, null, null);
1465
- kc.onAuthLogout && kc.onAuthLogout();
1466
- if (kc.loginRequired) {
1467
- kc.login();
1468
- }
1469
- }
1470
- };
1471
-
1472
- function getRealmUrl() {
1473
- if (typeof kc.authServerUrl !== 'undefined') {
1474
- if (kc.authServerUrl.charAt(kc.authServerUrl.length - 1) == '/') {
1475
- return kc.authServerUrl + 'realms/' + encodeURIComponent(kc.realm);
1476
- } else {
1477
- return kc.authServerUrl + '/realms/' + encodeURIComponent(kc.realm);
1478
- }
1479
- } else {
1480
- return undefined;
1481
- }
1482
- }
1483
-
1484
- function getOrigin() {
1485
- if (!window.location.origin) {
1486
- return window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
1487
- } else {
1488
- return window.location.origin;
1489
- }
1490
- }
1491
-
1492
- function processCallback(oauth, promise) {
1493
- var code = oauth.code;
1494
- var error = oauth.error;
1495
- var prompt = oauth.prompt;
1496
-
1497
- var timeLocal = new Date().getTime();
1498
-
1499
- if (oauth['kc_action_status']) {
1500
- kc.onActionUpdate && kc.onActionUpdate(oauth['kc_action_status']);
1501
- }
1502
-
1503
- if (error) {
1504
- if (prompt != 'none') {
1505
- var errorData = { error: error, error_description: oauth.error_description };
1506
- kc.onAuthError && kc.onAuthError(errorData);
1507
- promise && promise.setError(errorData);
1508
- } else {
1509
- promise && promise.setSuccess();
1510
- }
1511
- return;
1512
- } else if ((kc.flow != 'standard') && (oauth.access_token || oauth.id_token)) {
1513
- authSuccess(oauth.access_token, null, oauth.id_token, true);
1514
- }
1515
-
1516
- if ((kc.flow != 'implicit') && code) {
1517
- var params = 'code=' + code + '&grant_type=authorization_code';
1518
- var url = kc.endpoints.token();
1519
-
1520
- var req = new XMLHttpRequest();
1521
- req.open('POST', url, true);
1522
- req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
1523
-
1524
- params += '&client_id=' + encodeURIComponent(kc.clientId);
1525
- params += '&redirect_uri=' + oauth.redirectUri;
1526
-
1527
- if (oauth.pkceCodeVerifier) {
1528
- params += '&code_verifier=' + oauth.pkceCodeVerifier;
1529
- }
1530
-
1531
- req.withCredentials = true;
1532
-
1533
- req.onreadystatechange = function() {
1534
- if (req.readyState == 4) {
1535
- if (req.status == 200) {
1536
-
1537
- var tokenResponse = JSON.parse(req.responseText);
1538
- authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');
1539
- scheduleCheckIframe();
1540
- } else {
1541
- kc.onAuthError && kc.onAuthError();
1542
- promise && promise.setError();
1543
- }
1544
- }
1545
- };
1546
-
1547
- req.send(params);
1548
- }
1549
-
1550
- function authSuccess(accessToken, refreshToken, idToken, fulfillPromise) {
1551
- timeLocal = (timeLocal + new Date().getTime()) / 2;
1552
-
1553
- setToken(accessToken, refreshToken, idToken, timeLocal);
1554
-
1555
- if (useNonce && ((kc.tokenParsed && kc.tokenParsed.nonce != oauth.storedNonce) ||
1556
- (kc.refreshTokenParsed && kc.refreshTokenParsed.nonce != oauth.storedNonce) ||
1557
- (kc.idTokenParsed && kc.idTokenParsed.nonce != oauth.storedNonce))) {
1558
-
1559
- logInfo('[KEYCLOAK] Invalid nonce, clearing token');
1560
- kc.clearToken();
1561
- promise && promise.setError();
1562
- } else {
1563
- if (fulfillPromise) {
1564
- kc.onAuthSuccess && kc.onAuthSuccess();
1565
- promise && promise.setSuccess();
1566
- }
1567
- }
1568
- }
1569
-
1570
- }
1571
-
1572
- function loadConfig(url) {
1573
- var promise = createPromise();
1574
- var configUrl;
1575
-
1576
- if (!config) {
1577
- configUrl = 'keycloak.json';
1578
- } else if (typeof config === 'string') {
1579
- configUrl = config;
1580
- }
1581
-
1582
- function setupOidcEndoints(oidcConfiguration) {
1583
- if (! oidcConfiguration) {
1584
- kc.endpoints = {
1585
- authorize: function() {
1586
- return getRealmUrl() + '/protocol/openid-connect/auth';
1587
- },
1588
- token: function() {
1589
- return getRealmUrl() + '/protocol/openid-connect/token';
1590
- },
1591
- logout: function() {
1592
- return getRealmUrl() + '/protocol/openid-connect/logout';
1593
- },
1594
- checkSessionIframe: function() {
1595
- var src = getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html';
1596
- if (kc.iframeVersion) {
1597
- src = src + '?version=' + kc.iframeVersion;
1598
- }
1599
- return src;
1600
- },
1601
- thirdPartyCookiesIframe: function() {
1602
- var src = getRealmUrl() + '/protocol/openid-connect/3p-cookies/step1.html';
1603
- if (kc.iframeVersion) {
1604
- src = src + '?version=' + kc.iframeVersion;
1605
- }
1606
- return src;
1607
- },
1608
- register: function() {
1609
- return getRealmUrl() + '/protocol/openid-connect/registrations';
1610
- },
1611
- userinfo: function() {
1612
- return getRealmUrl() + '/protocol/openid-connect/userinfo';
1613
- }
1614
- };
1615
- } else {
1616
- kc.endpoints = {
1617
- authorize: function() {
1618
- return oidcConfiguration.authorization_endpoint;
1619
- },
1620
- token: function() {
1621
- return oidcConfiguration.token_endpoint;
1622
- },
1623
- logout: function() {
1624
- if (!oidcConfiguration.end_session_endpoint) {
1625
- throw "Not supported by the OIDC server";
1626
- }
1627
- return oidcConfiguration.end_session_endpoint;
1628
- },
1629
- checkSessionIframe: function() {
1630
- if (!oidcConfiguration.check_session_iframe) {
1631
- throw "Not supported by the OIDC server";
1632
- }
1633
- return oidcConfiguration.check_session_iframe;
1634
- },
1635
- register: function() {
1636
- throw 'Redirection to "Register user" page not supported in standard OIDC mode';
1637
- },
1638
- userinfo: function() {
1639
- if (!oidcConfiguration.userinfo_endpoint) {
1640
- throw "Not supported by the OIDC server";
1641
- }
1642
- return oidcConfiguration.userinfo_endpoint;
1643
- }
1644
- };
1645
- }
1646
- }
1647
-
1648
- if (configUrl) {
1649
- var req = new XMLHttpRequest();
1650
- req.open('GET', configUrl, true);
1651
- req.setRequestHeader('Accept', 'application/json');
1652
-
1653
- req.onreadystatechange = function () {
1654
- if (req.readyState == 4) {
1655
- if (req.status == 200 || fileLoaded(req)) {
1656
- var config = JSON.parse(req.responseText);
1657
-
1658
- kc.authServerUrl = config['auth-server-url'];
1659
- kc.realm = config['realm'];
1660
- kc.clientId = config['resource'];
1661
- setupOidcEndoints(null);
1662
- promise.setSuccess();
1663
- } else {
1664
- promise.setError();
1665
- }
1666
- }
1667
- };
1668
-
1669
- req.send();
1670
- } else {
1671
- if (!config.clientId) {
1672
- throw 'clientId missing';
1673
- }
1674
-
1675
- kc.clientId = config.clientId;
1676
-
1677
- var oidcProvider = config['oidcProvider'];
1678
- if (!oidcProvider) {
1679
- if (!config['url']) {
1680
- var scripts = document.getElementsByTagName('script');
1681
- for (var i = 0; i < scripts.length; i++) {
1682
- if (scripts[i].src.match(/.*keycloak\.js/)) {
1683
- config.url = scripts[i].src.substr(0, scripts[i].src.indexOf('/js/keycloak.js'));
1684
- break;
1685
- }
1686
- }
1687
- }
1688
- if (!config.realm) {
1689
- throw 'realm missing';
1690
- }
1691
-
1692
- kc.authServerUrl = config.url;
1693
- kc.realm = config.realm;
1694
- setupOidcEndoints(null);
1695
- promise.setSuccess();
1696
- } else {
1697
- if (typeof oidcProvider === 'string') {
1698
- var oidcProviderConfigUrl;
1699
- if (oidcProvider.charAt(oidcProvider.length - 1) == '/') {
1700
- oidcProviderConfigUrl = oidcProvider + '.well-known/openid-configuration';
1701
- } else {
1702
- oidcProviderConfigUrl = oidcProvider + '/.well-known/openid-configuration';
1703
- }
1704
- var req = new XMLHttpRequest();
1705
- req.open('GET', oidcProviderConfigUrl, true);
1706
- req.setRequestHeader('Accept', 'application/json');
1707
-
1708
- req.onreadystatechange = function () {
1709
- if (req.readyState == 4) {
1710
- if (req.status == 200 || fileLoaded(req)) {
1711
- var oidcProviderConfig = JSON.parse(req.responseText);
1712
- setupOidcEndoints(oidcProviderConfig);
1713
- promise.setSuccess();
1714
- } else {
1715
- promise.setError();
1716
- }
1717
- }
1718
- };
1719
-
1720
- req.send();
1721
- } else {
1722
- setupOidcEndoints(oidcProvider);
1723
- promise.setSuccess();
1724
- }
1725
- }
1726
- }
1727
-
1728
- return promise.promise;
1729
- }
1730
-
1731
- function fileLoaded(xhr) {
1732
- return xhr.status == 0 && xhr.responseText && xhr.responseURL.startsWith('file:');
1733
- }
1734
-
1735
- function setToken(token, refreshToken, idToken, timeLocal) {
1736
- if (kc.tokenTimeoutHandle) {
1737
- clearTimeout(kc.tokenTimeoutHandle);
1738
- kc.tokenTimeoutHandle = null;
1739
- }
1740
-
1741
- if (refreshToken) {
1742
- kc.refreshToken = refreshToken;
1743
- kc.refreshTokenParsed = jwtDecode(refreshToken);
1744
- } else {
1745
- delete kc.refreshToken;
1746
- delete kc.refreshTokenParsed;
1747
- }
1748
-
1749
- if (idToken) {
1750
- kc.idToken = idToken;
1751
- kc.idTokenParsed = jwtDecode(idToken);
1752
- } else {
1753
- delete kc.idToken;
1754
- delete kc.idTokenParsed;
1755
- }
1756
-
1757
- if (token) {
1758
- kc.token = token;
1759
- kc.tokenParsed = jwtDecode(token);
1760
- kc.sessionId = kc.tokenParsed.session_state;
1761
- kc.authenticated = true;
1762
- kc.subject = kc.tokenParsed.sub;
1763
- kc.realmAccess = kc.tokenParsed.realm_access;
1764
- kc.resourceAccess = kc.tokenParsed.resource_access;
1765
-
1766
- if (timeLocal) {
1767
- kc.timeSkew = Math.floor(timeLocal / 1000) - kc.tokenParsed.iat;
1768
- }
1769
-
1770
- if (kc.timeSkew != null) {
1771
- logInfo('[KEYCLOAK] Estimated time difference between browser and server is ' + kc.timeSkew + ' seconds');
1772
-
1773
- if (kc.onTokenExpired) {
1774
- var expiresIn = (kc.tokenParsed['exp'] - (new Date().getTime() / 1000) + kc.timeSkew) * 1000;
1775
- logInfo('[KEYCLOAK] Token expires in ' + Math.round(expiresIn / 1000) + ' s');
1776
- if (expiresIn <= 0) {
1777
- kc.onTokenExpired();
1778
- } else {
1779
- kc.tokenTimeoutHandle = setTimeout(kc.onTokenExpired, expiresIn);
1780
- }
1781
- }
1782
- }
1783
- } else {
1784
- delete kc.token;
1785
- delete kc.tokenParsed;
1786
- delete kc.subject;
1787
- delete kc.realmAccess;
1788
- delete kc.resourceAccess;
1789
-
1790
- kc.authenticated = false;
1791
- }
1792
- }
1793
-
1794
- function createUUID() {
1795
- var hexDigits = '0123456789abcdef';
1796
- var s = generateRandomString(36, hexDigits).split("");
1797
- s[14] = '4';
1798
- s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
1799
- s[8] = s[13] = s[18] = s[23] = '-';
1800
- var uuid = s.join('');
1801
- return uuid;
1802
- }
1803
-
1804
- function parseCallback(url) {
1805
- var oauth = parseCallbackUrl(url);
1806
- if (!oauth) {
1807
- return;
1808
- }
1809
-
1810
- var oauthState = callbackStorage.get(oauth.state);
1811
-
1812
- if (oauthState) {
1813
- oauth.valid = true;
1814
- oauth.redirectUri = oauthState.redirectUri;
1815
- oauth.storedNonce = oauthState.nonce;
1816
- oauth.prompt = oauthState.prompt;
1817
- oauth.pkceCodeVerifier = oauthState.pkceCodeVerifier;
1818
- }
1819
-
1820
- return oauth;
1821
- }
1822
-
1823
- function parseCallbackUrl(url) {
1824
- var supportedParams;
1825
- switch (kc.flow) {
1826
- case 'standard':
1827
- supportedParams = ['code', 'state', 'session_state', 'kc_action_status', 'iss'];
1828
- break;
1829
- case 'implicit':
1830
- supportedParams = ['access_token', 'token_type', 'id_token', 'state', 'session_state', 'expires_in', 'kc_action_status', 'iss'];
1831
- break;
1832
- case 'hybrid':
1833
- supportedParams = ['access_token', 'token_type', 'id_token', 'code', 'state', 'session_state', 'expires_in', 'kc_action_status', 'iss'];
1834
- break;
1835
- }
1836
-
1837
- supportedParams.push('error');
1838
- supportedParams.push('error_description');
1839
- supportedParams.push('error_uri');
1840
-
1841
- var queryIndex = url.indexOf('?');
1842
- var fragmentIndex = url.indexOf('#');
1843
-
1844
- var newUrl;
1845
- var parsed;
1846
-
1847
- if (kc.responseMode === 'query' && queryIndex !== -1) {
1848
- newUrl = url.substring(0, queryIndex);
1849
- parsed = parseCallbackParams(url.substring(queryIndex + 1, fragmentIndex !== -1 ? fragmentIndex : url.length), supportedParams);
1850
- if (parsed.paramsString !== '') {
1851
- newUrl += '?' + parsed.paramsString;
1852
- }
1853
- if (fragmentIndex !== -1) {
1854
- newUrl += url.substring(fragmentIndex);
1855
- }
1856
- } else if (kc.responseMode === 'fragment' && fragmentIndex !== -1) {
1857
- newUrl = url.substring(0, fragmentIndex);
1858
- parsed = parseCallbackParams(url.substring(fragmentIndex + 1), supportedParams);
1859
- if (parsed.paramsString !== '') {
1860
- newUrl += '#' + parsed.paramsString;
1861
- }
1862
- }
1863
-
1864
- if (parsed && parsed.oauthParams) {
1865
- if (kc.flow === 'standard' || kc.flow === 'hybrid') {
1866
- if ((parsed.oauthParams.code || parsed.oauthParams.error) && parsed.oauthParams.state) {
1867
- parsed.oauthParams.newUrl = newUrl;
1868
- return parsed.oauthParams;
1869
- }
1870
- } else if (kc.flow === 'implicit') {
1871
- if ((parsed.oauthParams.access_token || parsed.oauthParams.error) && parsed.oauthParams.state) {
1872
- parsed.oauthParams.newUrl = newUrl;
1873
- return parsed.oauthParams;
1874
- }
1875
- }
1876
- }
1877
- }
1878
-
1879
- function parseCallbackParams(paramsString, supportedParams) {
1880
- var p = paramsString.split('&');
1881
- var result = {
1882
- paramsString: '',
1883
- oauthParams: {}
1884
- };
1885
- for (var i = 0; i < p.length; i++) {
1886
- var split = p[i].indexOf("=");
1887
- var key = p[i].slice(0, split);
1888
- if (supportedParams.indexOf(key) !== -1) {
1889
- result.oauthParams[key] = p[i].slice(split + 1);
1890
- } else {
1891
- if (result.paramsString !== '') {
1892
- result.paramsString += '&';
1893
- }
1894
- result.paramsString += p[i];
1895
- }
1896
- }
1897
- return result;
1898
- }
1899
-
1900
- function createPromise() {
1901
- // Need to create a native Promise which also preserves the
1902
- // interface of the custom promise type previously used by the API
1903
- var p = {
1904
- setSuccess: function(result) {
1905
- p.resolve(result);
1906
- },
1907
-
1908
- setError: function(result) {
1909
- p.reject(result);
1910
- }
1911
- };
1912
- p.promise = new Promise(function(resolve, reject) {
1913
- p.resolve = resolve;
1914
- p.reject = reject;
1915
- });
1916
-
1917
- return p;
1918
- }
1919
-
1920
- // Function to extend existing native Promise with timeout
1921
- function applyTimeoutToPromise(promise, timeout, errorMessage) {
1922
- var timeoutHandle = null;
1923
- var timeoutPromise = new Promise(function (resolve, reject) {
1924
- timeoutHandle = setTimeout(function () {
1925
- reject({ "error": errorMessage || "Promise is not settled within timeout of " + timeout + "ms" });
1926
- }, timeout);
1927
- });
1928
-
1929
- return Promise.race([promise, timeoutPromise]).finally(function () {
1930
- clearTimeout(timeoutHandle);
1931
- });
1932
- }
1933
-
1934
- function setupCheckLoginIframe() {
1935
- var promise = createPromise();
1936
-
1937
- if (!loginIframe.enable) {
1938
- promise.setSuccess();
1939
- return promise.promise;
1940
- }
1941
-
1942
- if (loginIframe.iframe) {
1943
- promise.setSuccess();
1944
- return promise.promise;
1945
- }
1946
-
1947
- var iframe = document.createElement('iframe');
1948
- loginIframe.iframe = iframe;
1949
-
1950
- iframe.onload = function() {
1951
- var authUrl = kc.endpoints.authorize();
1952
- if (authUrl.charAt(0) === '/') {
1953
- loginIframe.iframeOrigin = getOrigin();
1954
- } else {
1955
- loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));
1956
- }
1957
- promise.setSuccess();
1958
- };
1959
-
1960
- var src = kc.endpoints.checkSessionIframe();
1961
- iframe.setAttribute('src', src );
1962
- iframe.setAttribute('sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin');
1963
- iframe.setAttribute('title', 'keycloak-session-iframe' );
1964
- iframe.style.display = 'none';
1965
- document.body.appendChild(iframe);
1966
-
1967
- var messageCallback = function(event) {
1968
- if ((event.origin !== loginIframe.iframeOrigin) || (loginIframe.iframe.contentWindow !== event.source)) {
1969
- return;
1970
- }
1971
-
1972
- if (!(event.data == 'unchanged' || event.data == 'changed' || event.data == 'error')) {
1973
- return;
1974
- }
1975
-
1976
-
1977
- if (event.data != 'unchanged') {
1978
- kc.clearToken();
1979
- }
1980
-
1981
- var callbacks = loginIframe.callbackList.splice(0, loginIframe.callbackList.length);
1982
-
1983
- for (var i = callbacks.length - 1; i >= 0; --i) {
1984
- var promise = callbacks[i];
1985
- if (event.data == 'error') {
1986
- promise.setError();
1987
- } else {
1988
- promise.setSuccess(event.data == 'unchanged');
1989
- }
1990
- }
1991
- };
1992
-
1993
- window.addEventListener('message', messageCallback, false);
1994
-
1995
- return promise.promise;
1996
- }
1997
-
1998
- function scheduleCheckIframe() {
1999
- if (loginIframe.enable) {
2000
- if (kc.token) {
2001
- setTimeout(function() {
2002
- checkLoginIframe().then(function(unchanged) {
2003
- if (unchanged) {
2004
- scheduleCheckIframe();
2005
- }
2006
- });
2007
- }, loginIframe.interval * 1000);
2008
- }
2009
- }
2010
- }
2011
-
2012
- function checkLoginIframe() {
2013
- var promise = createPromise();
2014
-
2015
- if (loginIframe.iframe && loginIframe.iframeOrigin ) {
2016
- var msg = kc.clientId + ' ' + (kc.sessionId ? kc.sessionId : '');
2017
- loginIframe.callbackList.push(promise);
2018
- var origin = loginIframe.iframeOrigin;
2019
- if (loginIframe.callbackList.length == 1) {
2020
- loginIframe.iframe.contentWindow.postMessage(msg, origin);
2021
- }
2022
- } else {
2023
- promise.setSuccess();
2024
- }
2025
-
2026
- return promise.promise;
2027
- }
2028
-
2029
- function check3pCookiesSupported() {
2030
- var promise = createPromise();
2031
-
2032
- if (loginIframe.enable || kc.silentCheckSsoRedirectUri) {
2033
- var iframe = document.createElement('iframe');
2034
- iframe.setAttribute('src', kc.endpoints.thirdPartyCookiesIframe());
2035
- iframe.setAttribute('sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin');
2036
- iframe.setAttribute('title', 'keycloak-3p-check-iframe' );
2037
- iframe.style.display = 'none';
2038
- document.body.appendChild(iframe);
2039
-
2040
- var messageCallback = function(event) {
2041
- if (iframe.contentWindow !== event.source) {
2042
- return;
2043
- }
2044
-
2045
- if (event.data !== "supported" && event.data !== "unsupported") {
2046
- return;
2047
- } else if (event.data === "unsupported") {
2048
- logWarn(
2049
- "[KEYCLOAK] Your browser is blocking access to 3rd-party cookies, this means:\n\n" +
2050
- " - It is not possible to retrieve tokens without redirecting to the Keycloak server (a.k.a. no support for silent authentication).\n" +
2051
- " - It is not possible to automatically detect changes to the session status (such as the user logging out in another tab).\n\n" +
2052
- "For more information see: https://www.keycloak.org/docs/latest/securing_apps/#_modern_browsers"
2053
- );
2054
-
2055
- loginIframe.enable = false;
2056
- if (kc.silentCheckSsoFallback) {
2057
- kc.silentCheckSsoRedirectUri = false;
2058
- }
2059
- }
2060
-
2061
- document.body.removeChild(iframe);
2062
- window.removeEventListener("message", messageCallback);
2063
- promise.setSuccess();
2064
- };
2065
-
2066
- window.addEventListener('message', messageCallback, false);
2067
- } else {
2068
- promise.setSuccess();
2069
- }
2070
-
2071
- return applyTimeoutToPromise(promise.promise, kc.messageReceiveTimeout, "Timeout when waiting for 3rd party check iframe message.");
2072
- }
2073
-
2074
- function loadAdapter(type) {
2075
- if (!type || type == 'default') {
2076
- return {
2077
- login: function(options) {
2078
- window.location.assign(kc.createLoginUrl(options));
2079
- return createPromise().promise;
2080
- },
2081
-
2082
- logout: function(options) {
2083
- window.location.replace(kc.createLogoutUrl(options));
2084
- return createPromise().promise;
2085
- },
2086
-
2087
- register: function(options) {
2088
- window.location.assign(kc.createRegisterUrl(options));
2089
- return createPromise().promise;
2090
- },
2091
-
2092
- accountManagement : function() {
2093
- var accountUrl = kc.createAccountUrl();
2094
- if (typeof accountUrl !== 'undefined') {
2095
- window.location.href = accountUrl;
2096
- } else {
2097
- throw "Not supported by the OIDC server";
2098
- }
2099
- return createPromise().promise;
2100
- },
2101
-
2102
- redirectUri: function(options, encodeHash) {
2103
-
2104
- if (options && options.redirectUri) {
2105
- return options.redirectUri;
2106
- } else if (kc.redirectUri) {
2107
- return kc.redirectUri;
2108
- } else {
2109
- return location.href;
2110
- }
2111
- }
2112
- };
2113
- }
2114
-
2115
- if (type == 'cordova') {
2116
- loginIframe.enable = false;
2117
- var cordovaOpenWindowWrapper = function(loginUrl, target, options) {
2118
- if (window.cordova && window.cordova.InAppBrowser) {
2119
- // Use inappbrowser for IOS and Android if available
2120
- return window.cordova.InAppBrowser.open(loginUrl, target, options);
2121
- } else {
2122
- return window.open(loginUrl, target, options);
2123
- }
2124
- };
2125
-
2126
- var shallowCloneCordovaOptions = function (userOptions) {
2127
- if (userOptions && userOptions.cordovaOptions) {
2128
- return Object.keys(userOptions.cordovaOptions).reduce(function (options, optionName) {
2129
- options[optionName] = userOptions.cordovaOptions[optionName];
2130
- return options;
2131
- }, {});
2132
- } else {
2133
- return {};
2134
- }
2135
- };
2136
-
2137
- var formatCordovaOptions = function (cordovaOptions) {
2138
- return Object.keys(cordovaOptions).reduce(function (options, optionName) {
2139
- options.push(optionName+"="+cordovaOptions[optionName]);
2140
- return options;
2141
- }, []).join(",");
2142
- };
2143
-
2144
- var createCordovaOptions = function (userOptions) {
2145
- var cordovaOptions = shallowCloneCordovaOptions(userOptions);
2146
- cordovaOptions.location = 'no';
2147
- if (userOptions && userOptions.prompt == 'none') {
2148
- cordovaOptions.hidden = 'yes';
2149
- }
2150
- return formatCordovaOptions(cordovaOptions);
2151
- };
2152
-
2153
- var getCordovaRedirectUri = function() {
2154
- return kc.redirectUri || 'http://localhost';
2155
- };
2156
-
2157
- return {
2158
- login: function(options) {
2159
- var promise = createPromise();
2160
-
2161
- var cordovaOptions = createCordovaOptions(options);
2162
- var loginUrl = kc.createLoginUrl(options);
2163
- var ref = cordovaOpenWindowWrapper(loginUrl, '_blank', cordovaOptions);
2164
- var completed = false;
2165
-
2166
- var closed = false;
2167
- var closeBrowser = function() {
2168
- closed = true;
2169
- ref.close();
2170
- };
2171
-
2172
- ref.addEventListener('loadstart', function(event) {
2173
- if (event.url.indexOf(getCordovaRedirectUri()) == 0) {
2174
- var callback = parseCallback(event.url);
2175
- processCallback(callback, promise);
2176
- closeBrowser();
2177
- completed = true;
2178
- }
2179
- });
2180
-
2181
- ref.addEventListener('loaderror', function(event) {
2182
- if (!completed) {
2183
- if (event.url.indexOf(getCordovaRedirectUri()) == 0) {
2184
- var callback = parseCallback(event.url);
2185
- processCallback(callback, promise);
2186
- closeBrowser();
2187
- completed = true;
2188
- } else {
2189
- promise.setError();
2190
- closeBrowser();
2191
- }
2192
- }
2193
- });
2194
-
2195
- ref.addEventListener('exit', function(event) {
2196
- if (!closed) {
2197
- promise.setError({
2198
- reason: "closed_by_user"
2199
- });
2200
- }
2201
- });
2202
-
2203
- return promise.promise;
2204
- },
2205
-
2206
- logout: function(options) {
2207
- var promise = createPromise();
2208
-
2209
- var logoutUrl = kc.createLogoutUrl(options);
2210
- var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes,clearcache=yes');
2211
-
2212
- var error;
2213
-
2214
- ref.addEventListener('loadstart', function(event) {
2215
- if (event.url.indexOf(getCordovaRedirectUri()) == 0) {
2216
- ref.close();
2217
- }
2218
- });
2219
-
2220
- ref.addEventListener('loaderror', function(event) {
2221
- if (event.url.indexOf(getCordovaRedirectUri()) == 0) {
2222
- ref.close();
2223
- } else {
2224
- error = true;
2225
- ref.close();
2226
- }
2227
- });
2228
-
2229
- ref.addEventListener('exit', function(event) {
2230
- if (error) {
2231
- promise.setError();
2232
- } else {
2233
- kc.clearToken();
2234
- promise.setSuccess();
2235
- }
2236
- });
2237
-
2238
- return promise.promise;
2239
- },
2240
-
2241
- register : function(options) {
2242
- var promise = createPromise();
2243
- var registerUrl = kc.createRegisterUrl();
2244
- var cordovaOptions = createCordovaOptions(options);
2245
- var ref = cordovaOpenWindowWrapper(registerUrl, '_blank', cordovaOptions);
2246
- ref.addEventListener('loadstart', function(event) {
2247
- if (event.url.indexOf(getCordovaRedirectUri()) == 0) {
2248
- ref.close();
2249
- var oauth = parseCallback(event.url);
2250
- processCallback(oauth, promise);
2251
- }
2252
- });
2253
- return promise.promise;
2254
- },
2255
-
2256
- accountManagement : function() {
2257
- var accountUrl = kc.createAccountUrl();
2258
- if (typeof accountUrl !== 'undefined') {
2259
- var ref = cordovaOpenWindowWrapper(accountUrl, '_blank', 'location=no');
2260
- ref.addEventListener('loadstart', function(event) {
2261
- if (event.url.indexOf(getCordovaRedirectUri()) == 0) {
2262
- ref.close();
2263
- }
2264
- });
2265
- } else {
2266
- throw "Not supported by the OIDC server";
2267
- }
2268
- },
2269
-
2270
- redirectUri: function(options) {
2271
- return getCordovaRedirectUri();
2272
- }
2273
- }
2274
- }
2275
-
2276
- if (type == 'cordova-native') {
2277
- loginIframe.enable = false;
2278
-
2279
- return {
2280
- login: function(options) {
2281
- var promise = createPromise();
2282
- var loginUrl = kc.createLoginUrl(options);
2283
-
2284
- universalLinks.subscribe('keycloak', function(event) {
2285
- universalLinks.unsubscribe('keycloak');
2286
- window.cordova.plugins.browsertab.close();
2287
- var oauth = parseCallback(event.url);
2288
- processCallback(oauth, promise);
2289
- });
2290
-
2291
- window.cordova.plugins.browsertab.openUrl(loginUrl);
2292
- return promise.promise;
2293
- },
2294
-
2295
- logout: function(options) {
2296
- var promise = createPromise();
2297
- var logoutUrl = kc.createLogoutUrl(options);
2298
-
2299
- universalLinks.subscribe('keycloak', function(event) {
2300
- universalLinks.unsubscribe('keycloak');
2301
- window.cordova.plugins.browsertab.close();
2302
- kc.clearToken();
2303
- promise.setSuccess();
2304
- });
2305
-
2306
- window.cordova.plugins.browsertab.openUrl(logoutUrl);
2307
- return promise.promise;
2308
- },
2309
-
2310
- register : function(options) {
2311
- var promise = createPromise();
2312
- var registerUrl = kc.createRegisterUrl(options);
2313
- universalLinks.subscribe('keycloak' , function(event) {
2314
- universalLinks.unsubscribe('keycloak');
2315
- window.cordova.plugins.browsertab.close();
2316
- var oauth = parseCallback(event.url);
2317
- processCallback(oauth, promise);
2318
- });
2319
- window.cordova.plugins.browsertab.openUrl(registerUrl);
2320
- return promise.promise;
2321
-
2322
- },
2323
-
2324
- accountManagement : function() {
2325
- var accountUrl = kc.createAccountUrl();
2326
- if (typeof accountUrl !== 'undefined') {
2327
- window.cordova.plugins.browsertab.openUrl(accountUrl);
2328
- } else {
2329
- throw "Not supported by the OIDC server";
2330
- }
2331
- },
2332
-
2333
- redirectUri: function(options) {
2334
- if (options && options.redirectUri) {
2335
- return options.redirectUri;
2336
- } else if (kc.redirectUri) {
2337
- return kc.redirectUri;
2338
- } else {
2339
- return "http://localhost";
2340
- }
2341
- }
2342
- }
2343
- }
2344
-
2345
- throw 'invalid adapter type: ' + type;
2346
- }
2347
-
2348
- var LocalStorage = function() {
2349
- if (!(this instanceof LocalStorage)) {
2350
- return new LocalStorage();
2351
- }
2352
-
2353
- localStorage.setItem('kc-test', 'test');
2354
- localStorage.removeItem('kc-test');
2355
-
2356
- var cs = this;
2357
-
2358
- function clearExpired() {
2359
- var time = new Date().getTime();
2360
- for (var i = 0; i < localStorage.length; i++) {
2361
- var key = localStorage.key(i);
2362
- if (key && key.indexOf('kc-callback-') == 0) {
2363
- var value = localStorage.getItem(key);
2364
- if (value) {
2365
- try {
2366
- var expires = JSON.parse(value).expires;
2367
- if (!expires || expires < time) {
2368
- localStorage.removeItem(key);
2369
- }
2370
- } catch (err) {
2371
- localStorage.removeItem(key);
2372
- }
2373
- }
2374
- }
2375
- }
2376
- }
2377
-
2378
- cs.get = function(state) {
2379
- if (!state) {
2380
- return;
2381
- }
2382
-
2383
- var key = 'kc-callback-' + state;
2384
- var value = localStorage.getItem(key);
2385
- if (value) {
2386
- localStorage.removeItem(key);
2387
- value = JSON.parse(value);
2388
- }
2389
-
2390
- clearExpired();
2391
- return value;
2392
- };
2393
-
2394
- cs.add = function(state) {
2395
- clearExpired();
2396
-
2397
- var key = 'kc-callback-' + state.state;
2398
- state.expires = new Date().getTime() + (60 * 60 * 1000);
2399
- localStorage.setItem(key, JSON.stringify(state));
2400
- };
2401
- };
2402
-
2403
- var CookieStorage = function() {
2404
- if (!(this instanceof CookieStorage)) {
2405
- return new CookieStorage();
2406
- }
2407
-
2408
- var cs = this;
2409
-
2410
- cs.get = function(state) {
2411
- if (!state) {
2412
- return;
2413
- }
2414
-
2415
- var value = getCookie('kc-callback-' + state);
2416
- setCookie('kc-callback-' + state, '', cookieExpiration(-100));
2417
- if (value) {
2418
- return JSON.parse(value);
2419
- }
2420
- };
2421
-
2422
- cs.add = function(state) {
2423
- setCookie('kc-callback-' + state.state, JSON.stringify(state), cookieExpiration(60));
2424
- };
2425
-
2426
- cs.removeItem = function(key) {
2427
- setCookie(key, '', cookieExpiration(-100));
2428
- };
2429
-
2430
- var cookieExpiration = function (minutes) {
2431
- var exp = new Date();
2432
- exp.setTime(exp.getTime() + (minutes*60*1000));
2433
- return exp;
2434
- };
2435
-
2436
- var getCookie = function (key) {
2437
- var name = key + '=';
2438
- var ca = document.cookie.split(';');
2439
- for (var i = 0; i < ca.length; i++) {
2440
- var c = ca[i];
2441
- while (c.charAt(0) == ' ') {
2442
- c = c.substring(1);
2443
- }
2444
- if (c.indexOf(name) == 0) {
2445
- return c.substring(name.length, c.length);
2446
- }
2447
- }
2448
- return '';
2449
- };
2450
-
2451
- var setCookie = function (key, value, expirationDate) {
2452
- var cookie = key + '=' + value + '; '
2453
- + 'expires=' + expirationDate.toUTCString() + '; ';
2454
- document.cookie = cookie;
2455
- };
2456
- };
2457
-
2458
- function createCallbackStorage() {
2459
- try {
2460
- return new LocalStorage();
2461
- } catch (err) {
2462
- }
2463
-
2464
- return new CookieStorage();
2465
- }
2466
-
2467
- function createLogger(fn) {
2468
- return function() {
2469
- if (kc.enableLogging) {
2470
- fn.apply(console, Array.prototype.slice.call(arguments));
2471
- }
2472
- };
2473
- }
2474
- }
2475
-
2476
- /**
2477
- * Jdenticon 3.3.0
2478
- * http://jdenticon.com
2479
- *
2480
- * Built: 2024-05-10T09:48:41.921Z
2481
- *
2482
- * MIT License
2483
- *
2484
- * Copyright (c) 2014-2024 Daniel Mester Pirttijärvi
2485
- *
2486
- * Permission is hereby granted, free of charge, to any person obtaining a copy
2487
- * of this software and associated documentation files (the "Software"), to deal
2488
- * in the Software without restriction, including without limitation the rights
2489
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2490
- * copies of the Software, and to permit persons to whom the Software is
2491
- * furnished to do so, subject to the following conditions:
2492
- *
2493
- * The above copyright notice and this permission notice shall be included in all
2494
- * copies or substantial portions of the Software.
2495
- *
2496
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2497
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2498
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2499
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2500
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2501
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2502
- * SOFTWARE.
2503
- */
2504
-
2505
- /**
2506
- * Parses a substring of the hash as a number.
2507
- * @param {number} startPosition
2508
- * @param {number=} octets
2509
- */
2510
- function parseHex(hash, startPosition, octets) {
2511
- return parseInt(hash.substr(startPosition, octets), 16);
2512
- }
2513
-
2514
- function decToHex(v) {
2515
- v |= 0; // Ensure integer value
2516
- return v < 0 ? "00" :
2517
- v < 16 ? "0" + v.toString(16) :
2518
- v < 256 ? v.toString(16) :
2519
- "ff";
2520
- }
2521
-
2522
- function hueToRgb(m1, m2, h) {
2523
- h = h < 0 ? h + 6 : h > 6 ? h - 6 : h;
2524
- return decToHex(255 * (
2525
- h < 1 ? m1 + (m2 - m1) * h :
2526
- h < 3 ? m2 :
2527
- h < 4 ? m1 + (m2 - m1) * (4 - h) :
2528
- m1));
2529
- }
2530
-
2531
- /**
2532
- * @param {string} color Color value to parse. Currently hexadecimal strings on the format #rgb[a] and #rrggbb[aa] are supported.
2533
- * @returns {string}
2534
- */
2535
- function parseColor(color) {
2536
- if (/^#[0-9a-f]{3,8}$/i.test(color)) {
2537
- var result;
2538
- var colorLength = color.length;
2539
-
2540
- if (colorLength < 6) {
2541
- var r = color[1],
2542
- g = color[2],
2543
- b = color[3],
2544
- a = color[4] || "";
2545
- result = "#" + r + r + g + g + b + b + a + a;
2546
- }
2547
- if (colorLength == 7 || colorLength > 8) {
2548
- result = color;
2549
- }
2550
-
2551
- return result;
2552
- }
2553
- }
2554
-
2555
- /**
2556
- * Converts a hexadecimal color to a CSS3 compatible color.
2557
- * @param {string} hexColor Color on the format "#RRGGBB" or "#RRGGBBAA"
2558
- * @returns {string}
2559
- */
2560
- function toCss3Color(hexColor) {
2561
- var a = parseHex(hexColor, 7, 2);
2562
- var result;
2563
-
2564
- if (isNaN(a)) {
2565
- result = hexColor;
2566
- } else {
2567
- var r = parseHex(hexColor, 1, 2),
2568
- g = parseHex(hexColor, 3, 2),
2569
- b = parseHex(hexColor, 5, 2);
2570
- result = "rgba(" + r + "," + g + "," + b + "," + (a / 255).toFixed(2) + ")";
2571
- }
2572
-
2573
- return result;
2574
- }
2575
-
2576
- /**
2577
- * Converts an HSL color to a hexadecimal RGB color.
2578
- * @param {number} hue Hue in range [0, 1]
2579
- * @param {number} saturation Saturation in range [0, 1]
2580
- * @param {number} lightness Lightness in range [0, 1]
2581
- * @returns {string}
2582
- */
2583
- function hsl(hue, saturation, lightness) {
2584
- // Based on http://www.w3.org/TR/2011/REC-css3-color-20110607/#hsl-color
2585
- var result;
2586
-
2587
- if (saturation == 0) {
2588
- var partialHex = decToHex(lightness * 255);
2589
- result = partialHex + partialHex + partialHex;
2590
- }
2591
- else {
2592
- var m2 = lightness <= 0.5 ? lightness * (saturation + 1) : lightness + saturation - lightness * saturation,
2593
- m1 = lightness * 2 - m2;
2594
- result =
2595
- hueToRgb(m1, m2, hue * 6 + 2) +
2596
- hueToRgb(m1, m2, hue * 6) +
2597
- hueToRgb(m1, m2, hue * 6 - 2);
2598
- }
2599
-
2600
- return "#" + result;
2601
- }
2602
-
2603
- /**
2604
- * Converts an HSL color to a hexadecimal RGB color. This function will correct the lightness for the "dark" hues
2605
- * @param {number} hue Hue in range [0, 1]
2606
- * @param {number} saturation Saturation in range [0, 1]
2607
- * @param {number} lightness Lightness in range [0, 1]
2608
- * @returns {string}
2609
- */
2610
- function correctedHsl(hue, saturation, lightness) {
2611
- // The corrector specifies the perceived middle lightness for each hue
2612
- var correctors = [ 0.55, 0.5, 0.5, 0.46, 0.6, 0.55, 0.55 ],
2613
- corrector = correctors[(hue * 6 + 0.5) | 0];
2614
-
2615
- // Adjust the input lightness relative to the corrector
2616
- lightness = lightness < 0.5 ? lightness * corrector * 2 : corrector + (lightness - 0.5) * (1 - corrector) * 2;
2617
-
2618
- return hsl(hue, saturation, lightness);
2619
- }
2620
-
2621
- // In the future we can replace `GLOBAL` with `globalThis`, but for now use the old school global detection for
2622
- // backward compatibility.
2623
-
2624
- var GLOBAL =
2625
- typeof window !== "undefined" ? window :
2626
- typeof self !== "undefined" ? self :
2627
- typeof commonjsGlobal !== "undefined" ? commonjsGlobal :
2628
- {};
2629
-
2630
- /**
2631
- * @typedef {Object} ParsedConfiguration
2632
- * @property {number} colorSaturation
2633
- * @property {number} grayscaleSaturation
2634
- * @property {string} backColor
2635
- * @property {number} iconPadding
2636
- * @property {function(number):number} hue
2637
- * @property {function(number):number} colorLightness
2638
- * @property {function(number):number} grayscaleLightness
2639
- */
2640
-
2641
- var CONFIG_PROPERTIES = {
2642
- W/*GLOBAL*/: "jdenticon_config",
2643
- n/*MODULE*/: "config",
2644
- };
2645
-
2646
- var rootConfigurationHolder = {};
2647
-
2648
- /**
2649
- * Defines the deprecated `config` property on the root Jdenticon object without printing a warning in the console
2650
- * when it is being used.
2651
- * @param {!Object} rootObject
2652
- */
2653
- function defineConfigProperty(rootObject) {
2654
- rootConfigurationHolder = rootObject;
2655
- }
2656
-
2657
- /**
2658
- * Sets a new icon style configuration. The new configuration is not merged with the previous one. *
2659
- * @param {Object} newConfiguration - New configuration object.
2660
- */
2661
- function configure(newConfiguration) {
2662
- if (arguments.length) {
2663
- rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/] = newConfiguration;
2664
- }
2665
- return rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/];
2666
- }
2667
-
2668
- /**
2669
- * Gets the normalized current Jdenticon color configuration. Missing fields have default values.
2670
- * @param {Object|number|undefined} paddingOrLocalConfig - Configuration passed to the called API method. A
2671
- * local configuration overrides the global configuration in it entirety. This parameter can for backward
2672
- * compatibility also contain a padding value. A padding value only overrides the global padding, not the
2673
- * entire global configuration.
2674
- * @param {number} defaultPadding - Padding used if no padding is specified in neither the configuration nor
2675
- * explicitly to the API method.
2676
- * @returns {ParsedConfiguration}
2677
- */
2678
- function getConfiguration(paddingOrLocalConfig, defaultPadding) {
2679
- var configObject =
2680
- typeof paddingOrLocalConfig == "object" && paddingOrLocalConfig ||
2681
- rootConfigurationHolder[CONFIG_PROPERTIES.n/*MODULE*/] ||
2682
- GLOBAL[CONFIG_PROPERTIES.W/*GLOBAL*/] ||
2683
- { },
2684
-
2685
- lightnessConfig = configObject["lightness"] || { },
2686
-
2687
- // In versions < 2.1.0 there was no grayscale saturation -
2688
- // saturation was the color saturation.
2689
- saturation = configObject["saturation"] || { },
2690
- colorSaturation = "color" in saturation ? saturation["color"] : saturation,
2691
- grayscaleSaturation = saturation["grayscale"],
2692
-
2693
- backColor = configObject["backColor"],
2694
- padding = configObject["padding"];
2695
-
2696
- /**
2697
- * Creates a lightness range.
2698
- */
2699
- function lightness(configName, defaultRange) {
2700
- var range = lightnessConfig[configName];
2701
-
2702
- // Check if the lightness range is an array-like object. This way we ensure the
2703
- // array contain two values at the same time.
2704
- if (!(range && range.length > 1)) {
2705
- range = defaultRange;
2706
- }
2707
-
2708
- /**
2709
- * Gets a lightness relative the specified value in the specified lightness range.
2710
- */
2711
- return function (value) {
2712
- value = range[0] + value * (range[1] - range[0]);
2713
- return value < 0 ? 0 : value > 1 ? 1 : value;
2714
- };
2715
- }
2716
-
2717
- /**
2718
- * Gets a hue allowed by the configured hue restriction,
2719
- * provided the originally computed hue.
2720
- */
2721
- function hueFunction(originalHue) {
2722
- var hueConfig = configObject["hues"];
2723
- var hue;
2724
-
2725
- // Check if 'hues' is an array-like object. This way we also ensure that
2726
- // the array is not empty, which would mean no hue restriction.
2727
- if (hueConfig && hueConfig.length > 0) {
2728
- // originalHue is in the range [0, 1]
2729
- // Multiply with 0.999 to change the range to [0, 1) and then truncate the index.
2730
- hue = hueConfig[0 | (0.999 * originalHue * hueConfig.length)];
2731
- }
2732
-
2733
- return typeof hue == "number" ?
2734
-
2735
- // A hue was specified. We need to convert the hue from
2736
- // degrees on any turn - e.g. 746° is a perfectly valid hue -
2737
- // to turns in the range [0, 1).
2738
- ((((hue / 360) % 1) + 1) % 1) :
2739
-
2740
- // No hue configured => use original hue
2741
- originalHue;
2742
- }
2743
-
2744
- return {
2745
- X/*hue*/: hueFunction,
2746
- o/*colorSaturation*/: typeof colorSaturation == "number" ? colorSaturation : 0.5,
2747
- F/*grayscaleSaturation*/: typeof grayscaleSaturation == "number" ? grayscaleSaturation : 0,
2748
- p/*colorLightness*/: lightness("color", [0.4, 0.8]),
2749
- G/*grayscaleLightness*/: lightness("grayscale", [0.3, 0.9]),
2750
- H/*backColor*/: parseColor(backColor),
2751
- Y/*iconPadding*/:
2752
- typeof paddingOrLocalConfig == "number" ? paddingOrLocalConfig :
2753
- typeof padding == "number" ? padding :
2754
- defaultPadding
2755
- }
2756
- }
2757
-
2758
- /**
2759
- * Represents a point.
2760
- */
2761
- function Point(x, y) {
2762
- this.x = x;
2763
- this.y = y;
2764
- }
2765
-
2766
- /**
2767
- * Translates and rotates a point before being passed on to the canvas context. This was previously done by the canvas context itself,
2768
- * but this caused a rendering issue in Chrome on sizes > 256 where the rotation transformation of inverted paths was not done properly.
2769
- */
2770
- function Transform(x, y, size, rotation) {
2771
- this.q/*_x*/ = x;
2772
- this.t/*_y*/ = y;
2773
- this.I/*_size*/ = size;
2774
- this.Z/*_rotation*/ = rotation;
2775
- }
2776
-
2777
- /**
2778
- * Transforms the specified point based on the translation and rotation specification for this Transform.
2779
- * @param {number} x x-coordinate
2780
- * @param {number} y y-coordinate
2781
- * @param {number=} w The width of the transformed rectangle. If greater than 0, this will ensure the returned point is of the upper left corner of the transformed rectangle.
2782
- * @param {number=} h The height of the transformed rectangle. If greater than 0, this will ensure the returned point is of the upper left corner of the transformed rectangle.
2783
- */
2784
- Transform.prototype.J/*transformIconPoint*/ = function transformIconPoint (x, y, w, h) {
2785
- var right = this.q/*_x*/ + this.I/*_size*/,
2786
- bottom = this.t/*_y*/ + this.I/*_size*/,
2787
- rotation = this.Z/*_rotation*/;
2788
- return rotation === 1 ? new Point(right - y - (h || 0), this.t/*_y*/ + x) :
2789
- rotation === 2 ? new Point(right - x - (w || 0), bottom - y - (h || 0)) :
2790
- rotation === 3 ? new Point(this.q/*_x*/ + y, bottom - x - (w || 0)) :
2791
- new Point(this.q/*_x*/ + x, this.t/*_y*/ + y);
2792
- };
2793
-
2794
- var NO_TRANSFORM = new Transform(0, 0, 0, 0);
2795
-
2796
-
2797
-
2798
- /**
2799
- * Provides helper functions for rendering common basic shapes.
2800
- */
2801
- function Graphics(renderer) {
2802
- /**
2803
- * @type {Renderer}
2804
- * @private
2805
- */
2806
- this.K/*_renderer*/ = renderer;
2807
-
2808
- /**
2809
- * @type {Transform}
2810
- */
2811
- this.u/*currentTransform*/ = NO_TRANSFORM;
2812
- }
2813
- var Graphics__prototype = Graphics.prototype;
2814
-
2815
- /**
2816
- * Adds a polygon to the underlying renderer.
2817
- * @param {Array<number>} points The points of the polygon clockwise on the format [ x0, y0, x1, y1, ..., xn, yn ]
2818
- * @param {boolean=} invert Specifies if the polygon will be inverted.
2819
- */
2820
- Graphics__prototype.g/*addPolygon*/ = function addPolygon (points, invert) {
2821
- var this$1$1 = this;
2822
-
2823
- var di = invert ? -2 : 2,
2824
- transformedPoints = [];
2825
-
2826
- for (var i = invert ? points.length - 2 : 0; i < points.length && i >= 0; i += di) {
2827
- transformedPoints.push(this$1$1.u/*currentTransform*/.J/*transformIconPoint*/(points[i], points[i + 1]));
2828
- }
2829
-
2830
- this.K/*_renderer*/.g/*addPolygon*/(transformedPoints);
2831
- };
2832
-
2833
- /**
2834
- * Adds a polygon to the underlying renderer.
2835
- * Source: http://stackoverflow.com/a/2173084
2836
- * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the entire ellipse.
2837
- * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the entire ellipse.
2838
- * @param {number} size The size of the ellipse.
2839
- * @param {boolean=} invert Specifies if the ellipse will be inverted.
2840
- */
2841
- Graphics__prototype.h/*addCircle*/ = function addCircle (x, y, size, invert) {
2842
- var p = this.u/*currentTransform*/.J/*transformIconPoint*/(x, y, size, size);
2843
- this.K/*_renderer*/.h/*addCircle*/(p, size, invert);
2844
- };
2845
-
2846
- /**
2847
- * Adds a rectangle to the underlying renderer.
2848
- * @param {number} x The x-coordinate of the upper left corner of the rectangle.
2849
- * @param {number} y The y-coordinate of the upper left corner of the rectangle.
2850
- * @param {number} w The width of the rectangle.
2851
- * @param {number} h The height of the rectangle.
2852
- * @param {boolean=} invert Specifies if the rectangle will be inverted.
2853
- */
2854
- Graphics__prototype.i/*addRectangle*/ = function addRectangle (x, y, w, h, invert) {
2855
- this.g/*addPolygon*/([
2856
- x, y,
2857
- x + w, y,
2858
- x + w, y + h,
2859
- x, y + h
2860
- ], invert);
2861
- };
2862
-
2863
- /**
2864
- * Adds a right triangle to the underlying renderer.
2865
- * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the triangle.
2866
- * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the triangle.
2867
- * @param {number} w The width of the triangle.
2868
- * @param {number} h The height of the triangle.
2869
- * @param {number} r The rotation of the triangle (clockwise). 0 = right corner of the triangle in the lower left corner of the bounding rectangle.
2870
- * @param {boolean=} invert Specifies if the triangle will be inverted.
2871
- */
2872
- Graphics__prototype.j/*addTriangle*/ = function addTriangle (x, y, w, h, r, invert) {
2873
- var points = [
2874
- x + w, y,
2875
- x + w, y + h,
2876
- x, y + h,
2877
- x, y
2878
- ];
2879
- points.splice(((r || 0) % 4) * 2, 2);
2880
- this.g/*addPolygon*/(points, invert);
2881
- };
2882
-
2883
- /**
2884
- * Adds a rhombus to the underlying renderer.
2885
- * @param {number} x The x-coordinate of the upper left corner of the rectangle holding the rhombus.
2886
- * @param {number} y The y-coordinate of the upper left corner of the rectangle holding the rhombus.
2887
- * @param {number} w The width of the rhombus.
2888
- * @param {number} h The height of the rhombus.
2889
- * @param {boolean=} invert Specifies if the rhombus will be inverted.
2890
- */
2891
- Graphics__prototype.L/*addRhombus*/ = function addRhombus (x, y, w, h, invert) {
2892
- this.g/*addPolygon*/([
2893
- x + w / 2, y,
2894
- x + w, y + h / 2,
2895
- x + w / 2, y + h,
2896
- x, y + h / 2
2897
- ], invert);
2898
- };
2899
-
2900
- /**
2901
- * @param {number} index
2902
- * @param {Graphics} g
2903
- * @param {number} cell
2904
- * @param {number} positionIndex
2905
- */
2906
- function centerShape(index, g, cell, positionIndex) {
2907
- index = index % 14;
2908
-
2909
- var k, m, w, h, inner, outer;
2910
-
2911
- !index ? (
2912
- k = cell * 0.42,
2913
- g.g/*addPolygon*/([
2914
- 0, 0,
2915
- cell, 0,
2916
- cell, cell - k * 2,
2917
- cell - k, cell,
2918
- 0, cell
2919
- ])) :
2920
-
2921
- index == 1 ? (
2922
- w = 0 | (cell * 0.5),
2923
- h = 0 | (cell * 0.8),
2924
-
2925
- g.j/*addTriangle*/(cell - w, 0, w, h, 2)) :
2926
-
2927
- index == 2 ? (
2928
- w = 0 | (cell / 3),
2929
- g.i/*addRectangle*/(w, w, cell - w, cell - w)) :
2930
-
2931
- index == 3 ? (
2932
- inner = cell * 0.1,
2933
- // Use fixed outer border widths in small icons to ensure the border is drawn
2934
- outer =
2935
- cell < 6 ? 1 :
2936
- cell < 8 ? 2 :
2937
- (0 | (cell * 0.25)),
2938
-
2939
- inner =
2940
- inner > 1 ? (0 | inner) : // large icon => truncate decimals
2941
- inner > 0.5 ? 1 : // medium size icon => fixed width
2942
- inner, // small icon => anti-aliased border
2943
-
2944
- g.i/*addRectangle*/(outer, outer, cell - inner - outer, cell - inner - outer)) :
2945
-
2946
- index == 4 ? (
2947
- m = 0 | (cell * 0.15),
2948
- w = 0 | (cell * 0.5),
2949
- g.h/*addCircle*/(cell - w - m, cell - w - m, w)) :
2950
-
2951
- index == 5 ? (
2952
- inner = cell * 0.1,
2953
- outer = inner * 4,
2954
-
2955
- // Align edge to nearest pixel in large icons
2956
- outer > 3 && (outer = 0 | outer),
2957
-
2958
- g.i/*addRectangle*/(0, 0, cell, cell),
2959
- g.g/*addPolygon*/([
2960
- outer, outer,
2961
- cell - inner, outer,
2962
- outer + (cell - outer - inner) / 2, cell - inner
2963
- ], true)) :
2964
-
2965
- index == 6 ?
2966
- g.g/*addPolygon*/([
2967
- 0, 0,
2968
- cell, 0,
2969
- cell, cell * 0.7,
2970
- cell * 0.4, cell * 0.4,
2971
- cell * 0.7, cell,
2972
- 0, cell
2973
- ]) :
2974
-
2975
- index == 7 ?
2976
- g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 3) :
2977
-
2978
- index == 8 ? (
2979
- g.i/*addRectangle*/(0, 0, cell, cell / 2),
2980
- g.i/*addRectangle*/(0, cell / 2, cell / 2, cell / 2),
2981
- g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 1)) :
2982
-
2983
- index == 9 ? (
2984
- inner = cell * 0.14,
2985
- // Use fixed outer border widths in small icons to ensure the border is drawn
2986
- outer =
2987
- cell < 4 ? 1 :
2988
- cell < 6 ? 2 :
2989
- (0 | (cell * 0.35)),
2990
-
2991
- inner =
2992
- cell < 8 ? inner : // small icon => anti-aliased border
2993
- (0 | inner), // large icon => truncate decimals
2994
-
2995
- g.i/*addRectangle*/(0, 0, cell, cell),
2996
- g.i/*addRectangle*/(outer, outer, cell - outer - inner, cell - outer - inner, true)) :
2997
-
2998
- index == 10 ? (
2999
- inner = cell * 0.12,
3000
- outer = inner * 3,
3001
-
3002
- g.i/*addRectangle*/(0, 0, cell, cell),
3003
- g.h/*addCircle*/(outer, outer, cell - inner - outer, true)) :
3004
-
3005
- index == 11 ?
3006
- g.j/*addTriangle*/(cell / 2, cell / 2, cell / 2, cell / 2, 3) :
3007
-
3008
- index == 12 ? (
3009
- m = cell * 0.25,
3010
- g.i/*addRectangle*/(0, 0, cell, cell),
3011
- g.L/*addRhombus*/(m, m, cell - m, cell - m, true)) :
3012
-
3013
- // 13
3014
- (
3015
- !positionIndex && (
3016
- m = cell * 0.4, w = cell * 1.2,
3017
- g.h/*addCircle*/(m, m, w)
3018
- )
3019
- );
3020
- }
3021
-
3022
- /**
3023
- * @param {number} index
3024
- * @param {Graphics} g
3025
- * @param {number} cell
3026
- */
3027
- function outerShape(index, g, cell) {
3028
- index = index % 4;
3029
-
3030
- var m;
3031
-
3032
- !index ?
3033
- g.j/*addTriangle*/(0, 0, cell, cell, 0) :
3034
-
3035
- index == 1 ?
3036
- g.j/*addTriangle*/(0, cell / 2, cell, cell / 2, 0) :
3037
-
3038
- index == 2 ?
3039
- g.L/*addRhombus*/(0, 0, cell, cell) :
3040
-
3041
- // 3
3042
- (
3043
- m = cell / 6,
3044
- g.h/*addCircle*/(m, m, cell - 2 * m)
3045
- );
3046
- }
3047
-
3048
- /**
3049
- * Gets a set of identicon color candidates for a specified hue and config.
3050
- * @param {number} hue
3051
- * @param {ParsedConfiguration} config
3052
- */
3053
- function colorTheme(hue, config) {
3054
- hue = config.X/*hue*/(hue);
3055
- return [
3056
- // Dark gray
3057
- correctedHsl(hue, config.F/*grayscaleSaturation*/, config.G/*grayscaleLightness*/(0)),
3058
- // Mid color
3059
- correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(0.5)),
3060
- // Light gray
3061
- correctedHsl(hue, config.F/*grayscaleSaturation*/, config.G/*grayscaleLightness*/(1)),
3062
- // Light color
3063
- correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(1)),
3064
- // Dark color
3065
- correctedHsl(hue, config.o/*colorSaturation*/, config.p/*colorLightness*/(0))
3066
- ];
3067
- }
3068
-
3069
- /**
3070
- * Draws an identicon to a specified renderer.
3071
- * @param {Renderer} renderer
3072
- * @param {string} hash
3073
- * @param {Object|number=} config
3074
- */
3075
- function iconGenerator(renderer, hash, config) {
3076
- var parsedConfig = getConfiguration(config, 0.08);
3077
-
3078
- // Set background color
3079
- if (parsedConfig.H/*backColor*/) {
3080
- renderer.m/*setBackground*/(parsedConfig.H/*backColor*/);
3081
- }
3082
-
3083
- // Calculate padding and round to nearest integer
3084
- var size = renderer.k/*iconSize*/;
3085
- var padding = (0.5 + size * parsedConfig.Y/*iconPadding*/) | 0;
3086
- size -= padding * 2;
3087
-
3088
- var graphics = new Graphics(renderer);
3089
-
3090
- // Calculate cell size and ensure it is an integer
3091
- var cell = 0 | (size / 4);
3092
-
3093
- // Since the cell size is integer based, the actual icon will be slightly smaller than specified => center icon
3094
- var x = 0 | (padding + size / 2 - cell * 2);
3095
- var y = 0 | (padding + size / 2 - cell * 2);
3096
-
3097
- function renderShape(colorIndex, shapes, index, rotationIndex, positions) {
3098
- var shapeIndex = parseHex(hash, index, 1);
3099
- var r = rotationIndex ? parseHex(hash, rotationIndex, 1) : 0;
3100
-
3101
- renderer.M/*beginShape*/(availableColors[selectedColorIndexes[colorIndex]]);
3102
-
3103
- for (var i = 0; i < positions.length; i++) {
3104
- graphics.u/*currentTransform*/ = new Transform(x + positions[i][0] * cell, y + positions[i][1] * cell, cell, r++ % 4);
3105
- shapes(shapeIndex, graphics, cell, i);
3106
- }
3107
-
3108
- renderer.N/*endShape*/();
3109
- }
3110
-
3111
- // AVAILABLE COLORS
3112
- var hue = parseHex(hash, -7) / 0xfffffff,
3113
-
3114
- // Available colors for this icon
3115
- availableColors = colorTheme(hue, parsedConfig),
3116
-
3117
- // The index of the selected colors
3118
- selectedColorIndexes = [];
3119
-
3120
- var index;
3121
-
3122
- function isDuplicate(values) {
3123
- if (values.indexOf(index) >= 0) {
3124
- for (var i = 0; i < values.length; i++) {
3125
- if (selectedColorIndexes.indexOf(values[i]) >= 0) {
3126
- return true;
3127
- }
3128
- }
3129
- }
3130
- }
3131
-
3132
- for (var i = 0; i < 3; i++) {
3133
- index = parseHex(hash, 8 + i, 1) % availableColors.length;
3134
- if (isDuplicate([0, 4]) || // Disallow dark gray and dark color combo
3135
- isDuplicate([2, 3])) { // Disallow light gray and light color combo
3136
- index = 1;
3137
- }
3138
- selectedColorIndexes.push(index);
3139
- }
3140
-
3141
- // ACTUAL RENDERING
3142
- // Sides
3143
- renderShape(0, outerShape, 2, 3, [[1, 0], [2, 0], [2, 3], [1, 3], [0, 1], [3, 1], [3, 2], [0, 2]]);
3144
- // Corners
3145
- renderShape(1, outerShape, 4, 5, [[0, 0], [3, 0], [3, 3], [0, 3]]);
3146
- // Center
3147
- renderShape(2, centerShape, 1, null, [[1, 1], [2, 1], [2, 2], [1, 2]]);
3148
-
3149
- renderer.finish();
3150
- }
3151
-
3152
- /**
3153
- * Computes a SHA1 hash for any value and returns it as a hexadecimal string.
3154
- *
3155
- * This function is optimized for minimal code size and rather short messages.
3156
- *
3157
- * @param {string} message
3158
- */
3159
- function sha1(message) {
3160
- var HASH_SIZE_HALF_BYTES = 40;
3161
- var BLOCK_SIZE_WORDS = 16;
3162
-
3163
- // Variables
3164
- // `var` is used to be able to minimize the number of `var` keywords.
3165
- var i = 0,
3166
- f = 0,
3167
-
3168
- // Use `encodeURI` to UTF8 encode the message without any additional libraries
3169
- // We could use `unescape` + `encodeURI` to minimize the code, but that would be slightly risky
3170
- // since `unescape` is deprecated.
3171
- urlEncodedMessage = encodeURI(message) + "%80", // trailing '1' bit padding
3172
-
3173
- // This can be changed to a preallocated Uint32Array array for greater performance and larger code size
3174
- data = [],
3175
- dataSize,
3176
-
3177
- hashBuffer = [],
3178
-
3179
- a = 0x67452301,
3180
- b = 0xefcdab89,
3181
- c = ~a,
3182
- d = ~b,
3183
- e = 0xc3d2e1f0,
3184
- hash = [a, b, c, d, e],
3185
-
3186
- blockStartIndex = 0,
3187
- hexHash = "";
3188
-
3189
- /**
3190
- * Rotates the value a specified number of bits to the left.
3191
- * @param {number} value Value to rotate
3192
- * @param {number} shift Bit count to shift.
3193
- */
3194
- function rotl(value, shift) {
3195
- return (value << shift) | (value >>> (32 - shift));
3196
- }
3197
-
3198
- // Message data
3199
- for ( ; i < urlEncodedMessage.length; f++) {
3200
- data[f >> 2] = data[f >> 2] |
3201
- (
3202
- (
3203
- urlEncodedMessage[i] == "%"
3204
- // Percent encoded byte
3205
- ? parseInt(urlEncodedMessage.substring(i + 1, i += 3), 16)
3206
- // Unencoded byte
3207
- : urlEncodedMessage.charCodeAt(i++)
3208
- )
3209
-
3210
- // Read bytes in reverse order (big endian words)
3211
- << ((3 - (f & 3)) * 8)
3212
- );
3213
- }
3214
-
3215
- // f is now the length of the utf8 encoded message
3216
- // 7 = 8 bytes (64 bit) for message size, -1 to round down
3217
- // >> 6 = integer division with block size
3218
- dataSize = (((f + 7) >> 6) + 1) * BLOCK_SIZE_WORDS;
3219
-
3220
- // Message size in bits.
3221
- // SHA1 uses a 64 bit integer to represent the size, but since we only support short messages only the least
3222
- // significant 32 bits are set. -8 is for the '1' bit padding byte.
3223
- data[dataSize - 1] = f * 8 - 8;
3224
-
3225
- // Compute hash
3226
- for ( ; blockStartIndex < dataSize; blockStartIndex += BLOCK_SIZE_WORDS) {
3227
- for (i = 0; i < 80; i++) {
3228
- f = rotl(a, 5) + e + (
3229
- // Ch
3230
- i < 20 ? ((b & c) ^ ((~b) & d)) + 0x5a827999 :
3231
-
3232
- // Parity
3233
- i < 40 ? (b ^ c ^ d) + 0x6ed9eba1 :
3234
-
3235
- // Maj
3236
- i < 60 ? ((b & c) ^ (b & d) ^ (c & d)) + 0x8f1bbcdc :
3237
-
3238
- // Parity
3239
- (b ^ c ^ d) + 0xca62c1d6
3240
- ) + (
3241
- hashBuffer[i] = i < BLOCK_SIZE_WORDS
3242
- // Bitwise OR is used to coerse `undefined` to 0
3243
- ? (data[blockStartIndex + i] | 0)
3244
- : rotl(hashBuffer[i - 3] ^ hashBuffer[i - 8] ^ hashBuffer[i - 14] ^ hashBuffer[i - 16], 1)
3245
- );
3246
-
3247
- e = d;
3248
- d = c;
3249
- c = rotl(b, 30);
3250
- b = a;
3251
- a = f;
3252
- }
3253
-
3254
- hash[0] = a = ((hash[0] + a) | 0);
3255
- hash[1] = b = ((hash[1] + b) | 0);
3256
- hash[2] = c = ((hash[2] + c) | 0);
3257
- hash[3] = d = ((hash[3] + d) | 0);
3258
- hash[4] = e = ((hash[4] + e) | 0);
3259
- }
3260
-
3261
- // Format hex hash
3262
- for (i = 0; i < HASH_SIZE_HALF_BYTES; i++) {
3263
- hexHash += (
3264
- (
3265
- // Get word (2^3 half-bytes per word)
3266
- hash[i >> 3] >>>
3267
-
3268
- // Append half-bytes in reverse order
3269
- ((7 - (i & 7)) * 4)
3270
- )
3271
- // Clamp to half-byte
3272
- & 0xf
3273
- ).toString(16);
3274
- }
3275
-
3276
- return hexHash;
3277
- }
3278
-
3279
- /**
3280
- * Inputs a value that might be a valid hash string for Jdenticon and returns it
3281
- * if it is determined valid, otherwise a falsy value is returned.
3282
- */
3283
- function isValidHash(hashCandidate) {
3284
- return /^[0-9a-f]{11,}$/i.test(hashCandidate) && hashCandidate;
3285
- }
3286
-
3287
- /**
3288
- * Computes a hash for the specified value. Currently SHA1 is used. This function
3289
- * always returns a valid hash.
3290
- */
3291
- function computeHash(value) {
3292
- return sha1(value == null ? "" : "" + value);
3293
- }
3294
-
3295
-
3296
-
3297
- /**
3298
- * Renderer redirecting drawing commands to a canvas context.
3299
- * @implements {Renderer}
3300
- */
3301
- function CanvasRenderer(ctx, iconSize) {
3302
- var canvas = ctx.canvas;
3303
- var width = canvas.width;
3304
- var height = canvas.height;
3305
-
3306
- ctx.save();
3307
-
3308
- if (!iconSize) {
3309
- iconSize = Math.min(width, height);
3310
-
3311
- ctx.translate(
3312
- ((width - iconSize) / 2) | 0,
3313
- ((height - iconSize) / 2) | 0);
3314
- }
3315
-
3316
- /**
3317
- * @private
3318
- */
3319
- this.l/*_ctx*/ = ctx;
3320
- this.k/*iconSize*/ = iconSize;
3321
-
3322
- ctx.clearRect(0, 0, iconSize, iconSize);
3323
- }
3324
- var CanvasRenderer__prototype = CanvasRenderer.prototype;
3325
-
3326
- /**
3327
- * Fills the background with the specified color.
3328
- * @param {string} fillColor Fill color on the format #rrggbb[aa].
3329
- */
3330
- CanvasRenderer__prototype.m/*setBackground*/ = function setBackground (fillColor) {
3331
- var ctx = this.l/*_ctx*/;
3332
- var iconSize = this.k/*iconSize*/;
3333
-
3334
- ctx.fillStyle = toCss3Color(fillColor);
3335
- ctx.fillRect(0, 0, iconSize, iconSize);
3336
- };
3337
-
3338
- /**
3339
- * Marks the beginning of a new shape of the specified color. Should be ended with a call to endShape.
3340
- * @param {string} fillColor Fill color on format #rrggbb[aa].
3341
- */
3342
- CanvasRenderer__prototype.M/*beginShape*/ = function beginShape (fillColor) {
3343
- var ctx = this.l/*_ctx*/;
3344
- ctx.fillStyle = toCss3Color(fillColor);
3345
- ctx.beginPath();
3346
- };
3347
-
3348
- /**
3349
- * Marks the end of the currently drawn shape. This causes the queued paths to be rendered on the canvas.
3350
- */
3351
- CanvasRenderer__prototype.N/*endShape*/ = function endShape () {
3352
- this.l/*_ctx*/.fill();
3353
- };
3354
-
3355
- /**
3356
- * Adds a polygon to the rendering queue.
3357
- * @param points An array of Point objects.
3358
- */
3359
- CanvasRenderer__prototype.g/*addPolygon*/ = function addPolygon (points) {
3360
- var ctx = this.l/*_ctx*/;
3361
- ctx.moveTo(points[0].x, points[0].y);
3362
- for (var i = 1; i < points.length; i++) {
3363
- ctx.lineTo(points[i].x, points[i].y);
3364
- }
3365
- ctx.closePath();
3366
- };
3367
-
3368
- /**
3369
- * Adds a circle to the rendering queue.
3370
- * @param {Point} point The upper left corner of the circle bounding box.
3371
- * @param {number} diameter The diameter of the circle.
3372
- * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3373
- */
3374
- CanvasRenderer__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3375
- var ctx = this.l/*_ctx*/,
3376
- radius = diameter / 2;
3377
- ctx.moveTo(point.x + radius, point.y + radius);
3378
- ctx.arc(point.x + radius, point.y + radius, radius, 0, Math.PI * 2, counterClockwise);
3379
- ctx.closePath();
3380
- };
3381
-
3382
- /**
3383
- * Called when the icon has been completely drawn.
3384
- */
3385
- CanvasRenderer__prototype.finish = function finish () {
3386
- this.l/*_ctx*/.restore();
3387
- };
3388
-
3389
- var ICON_TYPE_SVG = 1;
3390
-
3391
- var ICON_TYPE_CANVAS = 2;
3392
-
3393
- var ATTRIBUTES = {
3394
- O/*HASH*/: "data-jdenticon-hash",
3395
- v/*VALUE*/: "data-jdenticon-value"
3396
- };
3397
-
3398
- var IS_RENDERED_PROPERTY = "jdenticonRendered";
3399
-
3400
- var ICON_SELECTOR = "[" + ATTRIBUTES.O/*HASH*/ +"],[" + ATTRIBUTES.v/*VALUE*/ +"]";
3401
-
3402
- var documentQuerySelectorAll = /** @type {!Function} */ (
3403
- typeof document !== "undefined" && document.querySelectorAll.bind(document));
3404
-
3405
- function getIdenticonType(el) {
3406
- if (el) {
3407
- var tagName = el["tagName"];
3408
-
3409
- if (/^svg$/i.test(tagName)) {
3410
- return ICON_TYPE_SVG;
3411
- }
3412
-
3413
- if (/^canvas$/i.test(tagName) && "getContext" in el) {
3414
- return ICON_TYPE_CANVAS;
3415
- }
3416
- }
3417
- }
3418
-
3419
- /**
3420
- * Draws an identicon to a context.
3421
- * @param {CanvasRenderingContext2D} ctx - Canvas context on which the icon will be drawn at location (0, 0).
3422
- * @param {*} hashOrValue - A hexadecimal hash string or any value that will be hashed by Jdenticon.
3423
- * @param {number} size - Icon size in pixels.
3424
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3425
- * global configuration in its entirety. For backward compatibility a padding value in the range [0.0, 0.5) can be
3426
- * specified in place of a configuration object.
3427
- */
3428
- function drawIcon(ctx, hashOrValue, size, config) {
3429
- if (!ctx) {
3430
- throw new Error("No canvas specified.");
3431
- }
3432
-
3433
- iconGenerator(new CanvasRenderer(ctx, size),
3434
- isValidHash(hashOrValue) || computeHash(hashOrValue),
3435
- config);
3436
-
3437
- var canvas = ctx.canvas;
3438
- if (canvas) {
3439
- canvas[IS_RENDERED_PROPERTY] = true;
3440
- }
3441
- }
3442
-
3443
- /**
3444
- * Prepares a measure to be used as a measure in an SVG path, by
3445
- * rounding the measure to a single decimal. This reduces the file
3446
- * size of the generated SVG with more than 50% in some cases.
3447
- */
3448
- function svgValue(value) {
3449
- return ((value * 10 + 0.5) | 0) / 10;
3450
- }
3451
-
3452
- /**
3453
- * Represents an SVG path element.
3454
- */
3455
- function SvgPath() {
3456
- /**
3457
- * This property holds the data string (path.d) of the SVG path.
3458
- * @type {string}
3459
- */
3460
- this.A/*dataString*/ = "";
3461
- }
3462
- var SvgPath__prototype = SvgPath.prototype;
3463
-
3464
- /**
3465
- * Adds a polygon with the current fill color to the SVG path.
3466
- * @param points An array of Point objects.
3467
- */
3468
- SvgPath__prototype.g/*addPolygon*/ = function addPolygon (points) {
3469
- var dataString = "";
3470
- for (var i = 0; i < points.length; i++) {
3471
- dataString += (i ? "L" : "M") + svgValue(points[i].x) + " " + svgValue(points[i].y);
3472
- }
3473
- this.A/*dataString*/ += dataString + "Z";
3474
- };
3475
-
3476
- /**
3477
- * Adds a circle with the current fill color to the SVG path.
3478
- * @param {Point} point The upper left corner of the circle bounding box.
3479
- * @param {number} diameter The diameter of the circle.
3480
- * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3481
- */
3482
- SvgPath__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3483
- var sweepFlag = counterClockwise ? 0 : 1,
3484
- svgRadius = svgValue(diameter / 2),
3485
- svgDiameter = svgValue(diameter),
3486
- svgArc = "a" + svgRadius + "," + svgRadius + " 0 1," + sweepFlag + " ";
3487
-
3488
- this.A/*dataString*/ +=
3489
- "M" + svgValue(point.x) + " " + svgValue(point.y + diameter / 2) +
3490
- svgArc + svgDiameter + ",0" +
3491
- svgArc + (-svgDiameter) + ",0";
3492
- };
3493
-
3494
-
3495
-
3496
- /**
3497
- * Renderer producing SVG output.
3498
- * @implements {Renderer}
3499
- */
3500
- function SvgRenderer(target) {
3501
-
3502
- /**
3503
- * @type {Object.<string,SvgPath>}
3504
- * @private
3505
- */
3506
- this.C/*_pathsByColor*/ = { };
3507
-
3508
- /**
3509
- * @type {SvgElement|SvgWriter}
3510
- * @private
3511
- */
3512
- this.P/*_target*/ = target;
3513
-
3514
- /**
3515
- * @type {number}
3516
- */
3517
- this.k/*iconSize*/ = target.k/*iconSize*/;
3518
- }
3519
- var SvgRenderer__prototype = SvgRenderer.prototype;
3520
-
3521
- /**
3522
- * Fills the background with the specified color.
3523
- * @param {string} fillColor Fill color on the format #rrggbb[aa].
3524
- */
3525
- SvgRenderer__prototype.m/*setBackground*/ = function setBackground (fillColor) {
3526
- var match = /^(#......)(..)?/.exec(fillColor),
3527
- opacity = match[2] ? parseHex(match[2], 0) / 255 : 1;
3528
- this.P/*_target*/.m/*setBackground*/(match[1], opacity);
3529
- };
3530
-
3531
- /**
3532
- * Marks the beginning of a new shape of the specified color. Should be ended with a call to endShape.
3533
- * @param {string} color Fill color on format #xxxxxx.
3534
- */
3535
- SvgRenderer__prototype.M/*beginShape*/ = function beginShape (color) {
3536
- this.B/*_path*/ = this.C/*_pathsByColor*/[color] || (this.C/*_pathsByColor*/[color] = new SvgPath());
3537
- };
3538
-
3539
- /**
3540
- * Marks the end of the currently drawn shape.
3541
- */
3542
- SvgRenderer__prototype.N/*endShape*/ = function endShape () { };
3543
-
3544
- /**
3545
- * Adds a polygon with the current fill color to the SVG.
3546
- * @param points An array of Point objects.
3547
- */
3548
- SvgRenderer__prototype.g/*addPolygon*/ = function addPolygon (points) {
3549
- this.B/*_path*/.g/*addPolygon*/(points);
3550
- };
3551
-
3552
- /**
3553
- * Adds a circle with the current fill color to the SVG.
3554
- * @param {Point} point The upper left corner of the circle bounding box.
3555
- * @param {number} diameter The diameter of the circle.
3556
- * @param {boolean} counterClockwise True if the circle is drawn counter-clockwise (will result in a hole if rendered on a clockwise path).
3557
- */
3558
- SvgRenderer__prototype.h/*addCircle*/ = function addCircle (point, diameter, counterClockwise) {
3559
- this.B/*_path*/.h/*addCircle*/(point, diameter, counterClockwise);
3560
- };
3561
-
3562
- /**
3563
- * Called when the icon has been completely drawn.
3564
- */
3565
- SvgRenderer__prototype.finish = function finish () {
3566
- var this$1$1 = this;
3567
-
3568
- var pathsByColor = this.C/*_pathsByColor*/;
3569
- for (var color in pathsByColor) {
3570
- // hasOwnProperty cannot be shadowed in pathsByColor
3571
- // eslint-disable-next-line no-prototype-builtins
3572
- if (pathsByColor.hasOwnProperty(color)) {
3573
- this$1$1.P/*_target*/.R/*appendPath*/(color, pathsByColor[color].A/*dataString*/);
3574
- }
3575
- }
3576
- };
3577
-
3578
- var SVG_CONSTANTS = {
3579
- S/*XMLNS*/: "http://www.w3.org/2000/svg",
3580
- T/*WIDTH*/: "width",
3581
- U/*HEIGHT*/: "height",
3582
- };
3583
-
3584
- /**
3585
- * Renderer producing SVG output.
3586
- */
3587
- function SvgWriter(iconSize) {
3588
- /**
3589
- * @type {number}
3590
- */
3591
- this.k/*iconSize*/ = iconSize;
3592
-
3593
- /**
3594
- * @type {string}
3595
- * @private
3596
- */
3597
- this.D/*_s*/ =
3598
- '<svg xmlns="' + SVG_CONSTANTS.S/*XMLNS*/ + '" width="' +
3599
- iconSize + '" height="' + iconSize + '" viewBox="0 0 ' +
3600
- iconSize + ' ' + iconSize + '">';
3601
- }
3602
- var SvgWriter__prototype = SvgWriter.prototype;
3603
-
3604
- /**
3605
- * Fills the background with the specified color.
3606
- * @param {string} fillColor Fill color on the format #rrggbb.
3607
- * @param {number} opacity Opacity in the range [0.0, 1.0].
3608
- */
3609
- SvgWriter__prototype.m/*setBackground*/ = function setBackground (fillColor, opacity) {
3610
- if (opacity) {
3611
- this.D/*_s*/ += '<rect width="100%" height="100%" fill="' +
3612
- fillColor + '" opacity="' + opacity.toFixed(2) + '"/>';
3613
- }
3614
- };
3615
-
3616
- /**
3617
- * Writes a path to the SVG string.
3618
- * @param {string} color Fill color on format #rrggbb.
3619
- * @param {string} dataString The SVG path data string.
3620
- */
3621
- SvgWriter__prototype.R/*appendPath*/ = function appendPath (color, dataString) {
3622
- this.D/*_s*/ += '<path fill="' + color + '" d="' + dataString + '"/>';
3623
- };
3624
-
3625
- /**
3626
- * Gets the rendered image as an SVG string.
3627
- */
3628
- SvgWriter__prototype.toString = function toString () {
3629
- return this.D/*_s*/ + "</svg>";
3630
- };
3631
-
3632
- /**
3633
- * Draws an identicon as an SVG string.
3634
- * @param {*} hashOrValue - A hexadecimal hash string or any value that will be hashed by Jdenticon.
3635
- * @param {number} size - Icon size in pixels.
3636
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3637
- * global configuration in its entirety. For backward compatibility a padding value in the range [0.0, 0.5) can be
3638
- * specified in place of a configuration object.
3639
- * @returns {string} SVG string
3640
- */
3641
- function toSvg(hashOrValue, size, config) {
3642
- var writer = new SvgWriter(size);
3643
- iconGenerator(new SvgRenderer(writer),
3644
- isValidHash(hashOrValue) || computeHash(hashOrValue),
3645
- config);
3646
- return writer.toString();
3647
- }
3648
-
3649
- /**
3650
- * Creates a new element and adds it to the specified parent.
3651
- * @param {Element} parentNode
3652
- * @param {string} name
3653
- * @param {...(string|number)} keyValuePairs
3654
- */
3655
- function SvgElement_append(parentNode, name) {
3656
- var keyValuePairs = [], len = arguments.length - 2;
3657
- while ( len-- > 0 ) keyValuePairs[ len ] = arguments[ len + 2 ];
3658
-
3659
- var el = document.createElementNS(SVG_CONSTANTS.S/*XMLNS*/, name);
3660
-
3661
- for (var i = 0; i + 1 < keyValuePairs.length; i += 2) {
3662
- el.setAttribute(
3663
- /** @type {string} */(keyValuePairs[i]),
3664
- /** @type {string} */(keyValuePairs[i + 1])
3665
- );
3666
- }
3667
-
3668
- parentNode.appendChild(el);
3669
- }
3670
-
3671
-
3672
- /**
3673
- * Renderer producing SVG output.
3674
- */
3675
- function SvgElement(element) {
3676
- // Don't use the clientWidth and clientHeight properties on SVG elements
3677
- // since Firefox won't serve a proper value of these properties on SVG
3678
- // elements (https://bugzilla.mozilla.org/show_bug.cgi?id=874811)
3679
- // Instead use 100px as a hardcoded size (the svg viewBox will rescale
3680
- // the icon to the correct dimensions)
3681
- var iconSize = this.k/*iconSize*/ = Math.min(
3682
- (Number(element.getAttribute(SVG_CONSTANTS.T/*WIDTH*/)) || 100),
3683
- (Number(element.getAttribute(SVG_CONSTANTS.U/*HEIGHT*/)) || 100)
3684
- );
3685
-
3686
- /**
3687
- * @type {Element}
3688
- * @private
3689
- */
3690
- this.V/*_el*/ = element;
3691
-
3692
- // Clear current SVG child elements
3693
- while (element.firstChild) {
3694
- element.removeChild(element.firstChild);
3695
- }
3696
-
3697
- // Set viewBox attribute to ensure the svg scales nicely.
3698
- element.setAttribute("viewBox", "0 0 " + iconSize + " " + iconSize);
3699
- element.setAttribute("preserveAspectRatio", "xMidYMid meet");
3700
- }
3701
- var SvgElement__prototype = SvgElement.prototype;
3702
-
3703
- /**
3704
- * Fills the background with the specified color.
3705
- * @param {string} fillColor Fill color on the format #rrggbb.
3706
- * @param {number} opacity Opacity in the range [0.0, 1.0].
3707
- */
3708
- SvgElement__prototype.m/*setBackground*/ = function setBackground (fillColor, opacity) {
3709
- if (opacity) {
3710
- SvgElement_append(this.V/*_el*/, "rect",
3711
- SVG_CONSTANTS.T/*WIDTH*/, "100%",
3712
- SVG_CONSTANTS.U/*HEIGHT*/, "100%",
3713
- "fill", fillColor,
3714
- "opacity", opacity);
3715
- }
3716
- };
3717
-
3718
- /**
3719
- * Appends a path to the SVG element.
3720
- * @param {string} color Fill color on format #xxxxxx.
3721
- * @param {string} dataString The SVG path data string.
3722
- */
3723
- SvgElement__prototype.R/*appendPath*/ = function appendPath (color, dataString) {
3724
- SvgElement_append(this.V/*_el*/, "path",
3725
- "fill", color,
3726
- "d", dataString);
3727
- };
3728
-
3729
- /**
3730
- * Updates all canvas elements with the `data-jdenticon-hash` or `data-jdenticon-value` attribute.
3731
- */
3732
- function updateAll() {
3733
- if (documentQuerySelectorAll) {
3734
- update(ICON_SELECTOR);
3735
- }
3736
- }
3737
-
3738
- /**
3739
- * Updates the identicon in the specified `<canvas>` or `<svg>` elements.
3740
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3741
- * `<svg>` or `<canvas>`, or a CSS selector to such an element.
3742
- * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3743
- * `data-jdenticon-value` attribute will be evaluated.
3744
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3745
- * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3746
- * specified in place of a configuration object.
3747
- */
3748
- function update(el, hashOrValue, config) {
3749
- renderDomElement(el, hashOrValue, config, function (el, iconType) {
3750
- if (iconType) {
3751
- return iconType == ICON_TYPE_SVG ?
3752
- new SvgRenderer(new SvgElement(el)) :
3753
- new CanvasRenderer(/** @type {HTMLCanvasElement} */(el).getContext("2d"));
3754
- }
3755
- });
3756
- }
3757
-
3758
- /**
3759
- * Updates the identicon in the specified `<canvas>` elements.
3760
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3761
- * `<canvas>`, or a CSS selector to such an element.
3762
- * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3763
- * `data-jdenticon-value` attribute will be evaluated.
3764
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3765
- * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3766
- * specified in place of a configuration object.
3767
- */
3768
- function updateCanvas(el, hashOrValue, config) {
3769
- renderDomElement(el, hashOrValue, config, function (el, iconType) {
3770
- if (iconType == ICON_TYPE_CANVAS) {
3771
- return new CanvasRenderer(/** @type {HTMLCanvasElement} */(el).getContext("2d"));
3772
- }
3773
- });
3774
- }
3775
-
3776
- /**
3777
- * Updates the identicon in the specified `<svg>` elements.
3778
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3779
- * `<svg>`, or a CSS selector to such an element.
3780
- * @param {*=} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3781
- * `data-jdenticon-value` attribute will be evaluated.
3782
- * @param {Object|number=} config - Optional configuration. If specified, this configuration object overrides any
3783
- * global configuration in its entirety. For backward compability a padding value in the range [0.0, 0.5) can be
3784
- * specified in place of a configuration object.
3785
- */
3786
- function updateSvg(el, hashOrValue, config) {
3787
- renderDomElement(el, hashOrValue, config, function (el, iconType) {
3788
- if (iconType == ICON_TYPE_SVG) {
3789
- return new SvgRenderer(new SvgElement(el));
3790
- }
3791
- });
3792
- }
3793
-
3794
- /**
3795
- * Updates the identicon in the specified canvas or svg elements.
3796
- * @param {(string|Element)} el - Specifies the container in which the icon is rendered as a DOM element of the type
3797
- * `<svg>` or `<canvas>`, or a CSS selector to such an element.
3798
- * @param {*} hashOrValue - Optional hash or value to be rendered. If not specified, the `data-jdenticon-hash` or
3799
- * `data-jdenticon-value` attribute will be evaluated.
3800
- * @param {Object|number|undefined} config
3801
- * @param {function(Element,number):Renderer} rendererFactory - Factory function for creating an icon renderer.
3802
- */
3803
- function renderDomElement(el, hashOrValue, config, rendererFactory) {
3804
- if (typeof el === "string") {
3805
- if (documentQuerySelectorAll) {
3806
- var elements = documentQuerySelectorAll(el);
3807
- for (var i = 0; i < elements.length; i++) {
3808
- renderDomElement(elements[i], hashOrValue, config, rendererFactory);
3809
- }
3810
- }
3811
- return;
3812
- }
3813
-
3814
- // Hash selection. The result from getValidHash or computeHash is
3815
- // accepted as a valid hash.
3816
- var hash =
3817
- // 1. Explicit valid hash
3818
- isValidHash(hashOrValue) ||
3819
-
3820
- // 2. Explicit value (`!= null` catches both null and undefined)
3821
- hashOrValue != null && computeHash(hashOrValue) ||
3822
-
3823
- // 3. `data-jdenticon-hash` attribute
3824
- isValidHash(el.getAttribute(ATTRIBUTES.O/*HASH*/)) ||
3825
-
3826
- // 4. `data-jdenticon-value` attribute.
3827
- // We want to treat an empty attribute as an empty value.
3828
- // Some browsers return empty string even if the attribute
3829
- // is not specified, so use hasAttribute to determine if
3830
- // the attribute is specified.
3831
- el.hasAttribute(ATTRIBUTES.v/*VALUE*/) && computeHash(el.getAttribute(ATTRIBUTES.v/*VALUE*/));
3832
-
3833
- if (!hash) {
3834
- // No hash specified. Don't render an icon.
3835
- return;
3836
- }
3837
-
3838
- var renderer = rendererFactory(el, getIdenticonType(el));
3839
- if (renderer) {
3840
- // Draw icon
3841
- iconGenerator(renderer, hash, config);
3842
- el[IS_RENDERED_PROPERTY] = true;
3843
- }
3844
- }
3845
-
3846
- // This file is compiled to dist/jdenticon-module.js
3847
-
3848
- var jdenticon = updateAll;
3849
-
3850
- defineConfigProperty(jdenticon);
3851
-
3852
- // Export public API
3853
- jdenticon["configure"] = configure;
3854
- jdenticon["drawIcon"] = drawIcon;
3855
- jdenticon["toSvg"] = toSvg;
3856
- jdenticon["update"] = update;
3857
- jdenticon["updateCanvas"] = updateCanvas;
3858
- jdenticon["updateSvg"] = updateSvg;
3859
-
3860
- /**
3861
- * Specifies the version of the Jdenticon package in use.
3862
- * @type {string}
3863
- */
3864
- jdenticon["version"] = "3.3.0";
3865
-
3866
- /**
3867
- * Specifies which bundle of Jdenticon that is used.
3868
- * @type {string}
3869
- */
3870
- jdenticon["bundle"] = "browser-cjs";
3871
-
3872
- var jdenticonModule = jdenticon;
3873
-
3874
- const DEFAULT_CONFIG = {
3875
- keycloak: {
3876
- url: 'https://keycloak.ds2.icelab.cloud',
3877
- realm: 'ds2',
3878
- clientId: 'dashbtn'
3879
- },
3880
- defaultLink: { name: 'Portal', url: 'https://portal.ds2.icelab.cloud' },
3881
- menuViewType: 'grid',
3882
- cookieName: 'ZDZW_cookie',
3883
- menu: {
3884
- global: {
3885
- name: 'Applications',
3886
- links: []
3887
- },
3888
- local: {
3889
- name: 'Applications',
3890
- enableCustomLocalMenu: true,
3891
- links: []
3892
- }
3893
- },
3894
- loading: {
3895
- isLoading: true,
3896
- duration: 800
3897
- },
3898
- };
3899
- // Fetch config from API
3900
- class ConfigService {
3901
- constructor() {
3902
- this._config = DEFAULT_CONFIG;
3903
- }
3904
- static getInstance() {
3905
- if (!ConfigService.instance) {
3906
- ConfigService.instance = new ConfigService();
3907
- }
3908
- return ConfigService.instance;
3909
- }
3910
- async fetchConfig(portalApiUrl) {
3911
- try {
3912
- const res = await fetch(portalApiUrl + '/developer/dashbuttons/config');
3913
- if (!res.ok)
3914
- throw new Error('Failed to fetch config');
3915
- const data = await res.json();
3916
- this._config = Object.assign(Object.assign({}, DEFAULT_CONFIG), data); // Merge API data with defaults
3917
- }
3918
- catch (e) {
3919
- console.warn('Using default config due to API failure', e);
3920
- this._config = DEFAULT_CONFIG; // fallback to defaults
3921
- }
3922
- return this._config;
3923
- }
3924
- /**
3925
- * Return cached config without calling API
3926
- */
3927
- get config() {
3928
- return this._config;
3929
- }
3930
- }
3931
- const configService = ConfigService.getInstance();
3932
-
3933
- // const getRootDomain = (hostOrUrl: string): string => {
3934
- // // Ensure we can parse it with URL
3935
- // const url = hostOrUrl.startsWith("http") ? new URL(hostOrUrl) : new URL(`https://${hostOrUrl}`);
3936
- // const hostname = url.hostname;
3937
- // const port = url.port ? `:${url.port}` : "";
3938
- // const parts = hostname.split(".");
3939
- // // localhost → return with port
3940
- // if (hostname === "localhost") return hostname + port;
3941
- // // sslip.io → keep last 3 parts
3942
- // if (hostname.endsWith(".sslip.io")) return parts.slice(-5).join(".") + port;
3943
- // // Normal domains → remove first label
3944
- // return parts.slice(1).join(".") + port;
3945
- // };
3946
- const getRootDomain = (hostOrUrl) => {
3947
- const url = hostOrUrl.startsWith("http")
3948
- ? new URL(hostOrUrl)
3949
- : new URL(`https://${hostOrUrl}`);
3950
- const hostname = url.hostname;
3951
- const port = url.port ? `:${url.port}` : "";
3952
- const parts = hostname.split(".");
3953
- // localhost → return with port
3954
- if (hostname === "localhost")
3955
- return hostname + port;
3956
- // sslip.io → keep last 3 parts
3957
- if (hostname.endsWith(".sslip.io"))
3958
- return parts.slice(-5).join(".") + port;
3959
- // Keep full hostname
3960
- return hostname + port;
3961
- };
3962
- const getUrlProtocol = (url, defaultProtocol = "https://") => {
3963
- if (!url)
3964
- return defaultProtocol;
3965
- const trimmed = url.trim();
3966
- // Match protocol (http:// or https://)
3967
- const match = trimmed.match(/^(https?:\/\/)/i);
3968
- return match ? match[1] : defaultProtocol;
3969
- };
3970
- class MenuService {
3971
- async getMenuConfig(url) {
3972
- try {
3973
- const res = await fetch(url);
3974
- if (!res.ok)
3975
- throw new Error('API error');
3976
- return await res.json();
3977
- }
3978
- catch (_a) {
3979
- return { data: [], total: 0, page: 1, perPage: 0, totalPages: 0 };
3980
- }
3981
- }
3982
- setDefaultProtocol(url) {
3983
- // If protocol already exists (http:// or https://), keep it
3984
- if (/^https?:\/\//i.test(url)) {
3985
- return url;
3986
- }
3987
- // Otherwise default to https
3988
- return `https://${url}`;
3989
- }
3990
- async getMenuLinks(BASE_URL) {
3991
- const normalizedBaseUrl = this.setDefaultProtocol(BASE_URL);
3992
- // Create a URL object from normalizedBaseUrl
3993
- const urlObj = new URL(normalizedBaseUrl);
3994
- // Add the 'containerisationbackend' subdomain
3995
- urlObj.hostname = `containerisationbackend.${urlObj.hostname}`;
3996
- const { data } = await this.getMenuConfig(`${urlObj.origin}/developer/charts/installed`);
3997
- return data.map(d => {
3998
- var _a, _b, _c;
3999
- const frontendUrlPrefix = (_a = d.metadata) === null || _a === void 0 ? void 0 : _a.frontendUrlPrefix;
4000
- const rootDomain = getRootDomain(BASE_URL);
4001
- const generatedUrl = `${getUrlProtocol(BASE_URL)}${frontendUrlPrefix}.${rootDomain}`;
4002
- return {
4003
- name: d.installChartName,
4004
- url: frontendUrlPrefix ? generatedUrl : "",
4005
- category: (_c = (_b = d.metadata) === null || _b === void 0 ? void 0 : _b.category) !== null && _c !== void 0 ? _c : "",
4006
- };
4007
- });
4008
- }
4009
- }
4010
- const menuService = new MenuService();
4011
-
4012
- const dashButtonCss = "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */.fa{font-family:var(--fa-style-family,\"Font Awesome 6 Free\");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:\"Font Awesome 6 Free\"}.fa-brands,.fab{font-family:\"Font Awesome 6 Brands\"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:\"\\30\"}.fa-1{--fa:\"\\31\"}.fa-2{--fa:\"\\32\"}.fa-3{--fa:\"\\33\"}.fa-4{--fa:\"\\34\"}.fa-5{--fa:\"\\35\"}.fa-6{--fa:\"\\36\"}.fa-7{--fa:\"\\37\"}.fa-8{--fa:\"\\38\"}.fa-9{--fa:\"\\39\"}.fa-fill-drip{--fa:\"\\f576\"}.fa-arrows-to-circle{--fa:\"\\e4bd\"}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:\"\\f138\"}.fa-at{--fa:\"\\40\"}.fa-trash-alt,.fa-trash-can{--fa:\"\\f2ed\"}.fa-text-height{--fa:\"\\f034\"}.fa-user-times,.fa-user-xmark{--fa:\"\\f235\"}.fa-stethoscope{--fa:\"\\f0f1\"}.fa-comment-alt,.fa-message{--fa:\"\\f27a\"}.fa-info{--fa:\"\\f129\"}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:\"\\f422\"}.fa-explosion{--fa:\"\\e4e9\"}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:\"\\f15c\"}.fa-wave-square{--fa:\"\\f83e\"}.fa-ring{--fa:\"\\f70b\"}.fa-building-un{--fa:\"\\e4d9\"}.fa-dice-three{--fa:\"\\f527\"}.fa-calendar-alt,.fa-calendar-days{--fa:\"\\f073\"}.fa-anchor-circle-check{--fa:\"\\e4aa\"}.fa-building-circle-arrow-right{--fa:\"\\e4d1\"}.fa-volleyball,.fa-volleyball-ball{--fa:\"\\f45f\"}.fa-arrows-up-to-line{--fa:\"\\e4c2\"}.fa-sort-desc,.fa-sort-down{--fa:\"\\f0dd\"}.fa-circle-minus,.fa-minus-circle{--fa:\"\\f056\"}.fa-door-open{--fa:\"\\f52b\"}.fa-right-from-bracket,.fa-sign-out-alt{--fa:\"\\f2f5\"}.fa-atom{--fa:\"\\f5d2\"}.fa-soap{--fa:\"\\e06e\"}.fa-heart-music-camera-bolt,.fa-icons{--fa:\"\\f86d\"}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:\"\\f539\"}.fa-bridge-circle-check{--fa:\"\\e4c9\"}.fa-pump-medical{--fa:\"\\e06a\"}.fa-fingerprint{--fa:\"\\f577\"}.fa-hand-point-right{--fa:\"\\f0a4\"}.fa-magnifying-glass-location,.fa-search-location{--fa:\"\\f689\"}.fa-forward-step,.fa-step-forward{--fa:\"\\f051\"}.fa-face-smile-beam,.fa-smile-beam{--fa:\"\\f5b8\"}.fa-flag-checkered{--fa:\"\\f11e\"}.fa-football,.fa-football-ball{--fa:\"\\f44e\"}.fa-school-circle-exclamation{--fa:\"\\e56c\"}.fa-crop{--fa:\"\\f125\"}.fa-angle-double-down,.fa-angles-down{--fa:\"\\f103\"}.fa-users-rectangle{--fa:\"\\e594\"}.fa-people-roof{--fa:\"\\e537\"}.fa-people-line{--fa:\"\\e534\"}.fa-beer,.fa-beer-mug-empty{--fa:\"\\f0fc\"}.fa-diagram-predecessor{--fa:\"\\e477\"}.fa-arrow-up-long,.fa-long-arrow-up{--fa:\"\\f176\"}.fa-burn,.fa-fire-flame-simple{--fa:\"\\f46a\"}.fa-male,.fa-person{--fa:\"\\f183\"}.fa-laptop{--fa:\"\\f109\"}.fa-file-csv{--fa:\"\\f6dd\"}.fa-menorah{--fa:\"\\f676\"}.fa-truck-plane{--fa:\"\\e58f\"}.fa-record-vinyl{--fa:\"\\f8d9\"}.fa-face-grin-stars,.fa-grin-stars{--fa:\"\\f587\"}.fa-bong{--fa:\"\\f55c\"}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:\"\\f67b\"}.fa-arrow-down-up-across-line{--fa:\"\\e4af\"}.fa-spoon,.fa-utensil-spoon{--fa:\"\\f2e5\"}.fa-jar-wheat{--fa:\"\\e517\"}.fa-envelopes-bulk,.fa-mail-bulk{--fa:\"\\f674\"}.fa-file-circle-exclamation{--fa:\"\\e4eb\"}.fa-circle-h,.fa-hospital-symbol{--fa:\"\\f47e\"}.fa-pager{--fa:\"\\f815\"}.fa-address-book,.fa-contact-book{--fa:\"\\f2b9\"}.fa-strikethrough{--fa:\"\\f0cc\"}.fa-k{--fa:\"\\4b\"}.fa-landmark-flag{--fa:\"\\e51c\"}.fa-pencil,.fa-pencil-alt{--fa:\"\\f303\"}.fa-backward{--fa:\"\\f04a\"}.fa-caret-right{--fa:\"\\f0da\"}.fa-comments{--fa:\"\\f086\"}.fa-file-clipboard,.fa-paste{--fa:\"\\f0ea\"}.fa-code-pull-request{--fa:\"\\e13c\"}.fa-clipboard-list{--fa:\"\\f46d\"}.fa-truck-loading,.fa-truck-ramp-box{--fa:\"\\f4de\"}.fa-user-check{--fa:\"\\f4fc\"}.fa-vial-virus{--fa:\"\\e597\"}.fa-sheet-plastic{--fa:\"\\e571\"}.fa-blog{--fa:\"\\f781\"}.fa-user-ninja{--fa:\"\\f504\"}.fa-person-arrow-up-from-line{--fa:\"\\e539\"}.fa-scroll-torah,.fa-torah{--fa:\"\\f6a0\"}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:\"\\f458\"}.fa-toggle-off{--fa:\"\\f204\"}.fa-archive,.fa-box-archive{--fa:\"\\f187\"}.fa-person-drowning{--fa:\"\\e545\"}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:\"\\f886\"}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:\"\\f58a\"}.fa-spray-can{--fa:\"\\f5bd\"}.fa-truck-monster{--fa:\"\\f63b\"}.fa-w{--fa:\"\\57\"}.fa-earth-africa,.fa-globe-africa{--fa:\"\\f57c\"}.fa-rainbow{--fa:\"\\f75b\"}.fa-circle-notch{--fa:\"\\f1ce\"}.fa-tablet-alt,.fa-tablet-screen-button{--fa:\"\\f3fa\"}.fa-paw{--fa:\"\\f1b0\"}.fa-cloud{--fa:\"\\f0c2\"}.fa-trowel-bricks{--fa:\"\\e58a\"}.fa-face-flushed,.fa-flushed{--fa:\"\\f579\"}.fa-hospital-user{--fa:\"\\f80d\"}.fa-tent-arrow-left-right{--fa:\"\\e57f\"}.fa-gavel,.fa-legal{--fa:\"\\f0e3\"}.fa-binoculars{--fa:\"\\f1e5\"}.fa-microphone-slash{--fa:\"\\f131\"}.fa-box-tissue{--fa:\"\\e05b\"}.fa-motorcycle{--fa:\"\\f21c\"}.fa-bell-concierge,.fa-concierge-bell{--fa:\"\\f562\"}.fa-pen-ruler,.fa-pencil-ruler{--fa:\"\\f5ae\"}.fa-people-arrows,.fa-people-arrows-left-right{--fa:\"\\e068\"}.fa-mars-and-venus-burst{--fa:\"\\e523\"}.fa-caret-square-right,.fa-square-caret-right{--fa:\"\\f152\"}.fa-cut,.fa-scissors{--fa:\"\\f0c4\"}.fa-sun-plant-wilt{--fa:\"\\e57a\"}.fa-toilets-portable{--fa:\"\\e584\"}.fa-hockey-puck{--fa:\"\\f453\"}.fa-table{--fa:\"\\f0ce\"}.fa-magnifying-glass-arrow-right{--fa:\"\\e521\"}.fa-digital-tachograph,.fa-tachograph-digital{--fa:\"\\f566\"}.fa-users-slash{--fa:\"\\e073\"}.fa-clover{--fa:\"\\e139\"}.fa-mail-reply,.fa-reply{--fa:\"\\f3e5\"}.fa-star-and-crescent{--fa:\"\\f699\"}.fa-house-fire{--fa:\"\\e50c\"}.fa-minus-square,.fa-square-minus{--fa:\"\\f146\"}.fa-helicopter{--fa:\"\\f533\"}.fa-compass{--fa:\"\\f14e\"}.fa-caret-square-down,.fa-square-caret-down{--fa:\"\\f150\"}.fa-file-circle-question{--fa:\"\\e4ef\"}.fa-laptop-code{--fa:\"\\f5fc\"}.fa-swatchbook{--fa:\"\\f5c3\"}.fa-prescription-bottle{--fa:\"\\f485\"}.fa-bars,.fa-navicon{--fa:\"\\f0c9\"}.fa-people-group{--fa:\"\\e533\"}.fa-hourglass-3,.fa-hourglass-end{--fa:\"\\f253\"}.fa-heart-broken,.fa-heart-crack{--fa:\"\\f7a9\"}.fa-external-link-square-alt,.fa-square-up-right{--fa:\"\\f360\"}.fa-face-kiss-beam,.fa-kiss-beam{--fa:\"\\f597\"}.fa-film{--fa:\"\\f008\"}.fa-ruler-horizontal{--fa:\"\\f547\"}.fa-people-robbery{--fa:\"\\e536\"}.fa-lightbulb{--fa:\"\\f0eb\"}.fa-caret-left{--fa:\"\\f0d9\"}.fa-circle-exclamation,.fa-exclamation-circle{--fa:\"\\f06a\"}.fa-school-circle-xmark{--fa:\"\\e56d\"}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:\"\\f08b\"}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:\"\\f13a\"}.fa-unlock-alt,.fa-unlock-keyhole{--fa:\"\\f13e\"}.fa-cloud-showers-heavy{--fa:\"\\f740\"}.fa-headphones-alt,.fa-headphones-simple{--fa:\"\\f58f\"}.fa-sitemap{--fa:\"\\f0e8\"}.fa-circle-dollar-to-slot,.fa-donate{--fa:\"\\f4b9\"}.fa-memory{--fa:\"\\f538\"}.fa-road-spikes{--fa:\"\\e568\"}.fa-fire-burner{--fa:\"\\e4f1\"}.fa-flag{--fa:\"\\f024\"}.fa-hanukiah{--fa:\"\\f6e6\"}.fa-feather{--fa:\"\\f52d\"}.fa-volume-down,.fa-volume-low{--fa:\"\\f027\"}.fa-comment-slash{--fa:\"\\f4b3\"}.fa-cloud-sun-rain{--fa:\"\\f743\"}.fa-compress{--fa:\"\\f066\"}.fa-wheat-alt,.fa-wheat-awn{--fa:\"\\e2cd\"}.fa-ankh{--fa:\"\\f644\"}.fa-hands-holding-child{--fa:\"\\e4fa\"}.fa-asterisk{--fa:\"\\2a\"}.fa-check-square,.fa-square-check{--fa:\"\\f14a\"}.fa-peseta-sign{--fa:\"\\e221\"}.fa-header,.fa-heading{--fa:\"\\f1dc\"}.fa-ghost{--fa:\"\\f6e2\"}.fa-list,.fa-list-squares{--fa:\"\\f03a\"}.fa-phone-square-alt,.fa-square-phone-flip{--fa:\"\\f87b\"}.fa-cart-plus{--fa:\"\\f217\"}.fa-gamepad{--fa:\"\\f11b\"}.fa-circle-dot,.fa-dot-circle{--fa:\"\\f192\"}.fa-dizzy,.fa-face-dizzy{--fa:\"\\f567\"}.fa-egg{--fa:\"\\f7fb\"}.fa-house-medical-circle-xmark{--fa:\"\\e513\"}.fa-campground{--fa:\"\\f6bb\"}.fa-folder-plus{--fa:\"\\f65e\"}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:\"\\f1e3\"}.fa-paint-brush,.fa-paintbrush{--fa:\"\\f1fc\"}.fa-lock{--fa:\"\\f023\"}.fa-gas-pump{--fa:\"\\f52f\"}.fa-hot-tub,.fa-hot-tub-person{--fa:\"\\f593\"}.fa-map-location,.fa-map-marked{--fa:\"\\f59f\"}.fa-house-flood-water{--fa:\"\\e50e\"}.fa-tree{--fa:\"\\f1bb\"}.fa-bridge-lock{--fa:\"\\e4cc\"}.fa-sack-dollar{--fa:\"\\f81d\"}.fa-edit,.fa-pen-to-square{--fa:\"\\f044\"}.fa-car-side{--fa:\"\\f5e4\"}.fa-share-alt,.fa-share-nodes{--fa:\"\\f1e0\"}.fa-heart-circle-minus{--fa:\"\\e4ff\"}.fa-hourglass-2,.fa-hourglass-half{--fa:\"\\f252\"}.fa-microscope{--fa:\"\\f610\"}.fa-sink{--fa:\"\\e06d\"}.fa-bag-shopping,.fa-shopping-bag{--fa:\"\\f290\"}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:\"\\f881\"}.fa-mitten{--fa:\"\\f7b5\"}.fa-person-rays{--fa:\"\\e54d\"}.fa-users{--fa:\"\\f0c0\"}.fa-eye-slash{--fa:\"\\f070\"}.fa-flask-vial{--fa:\"\\e4f3\"}.fa-hand,.fa-hand-paper{--fa:\"\\f256\"}.fa-om{--fa:\"\\f679\"}.fa-worm{--fa:\"\\e599\"}.fa-house-circle-xmark{--fa:\"\\e50b\"}.fa-plug{--fa:\"\\f1e6\"}.fa-chevron-up{--fa:\"\\f077\"}.fa-hand-spock{--fa:\"\\f259\"}.fa-stopwatch{--fa:\"\\f2f2\"}.fa-face-kiss,.fa-kiss{--fa:\"\\f596\"}.fa-bridge-circle-xmark{--fa:\"\\e4cb\"}.fa-face-grin-tongue,.fa-grin-tongue{--fa:\"\\f589\"}.fa-chess-bishop{--fa:\"\\f43a\"}.fa-face-grin-wink,.fa-grin-wink{--fa:\"\\f58c\"}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:\"\\f2a4\"}.fa-road-circle-check{--fa:\"\\e564\"}.fa-dice-five{--fa:\"\\f523\"}.fa-rss-square,.fa-square-rss{--fa:\"\\f143\"}.fa-land-mine-on{--fa:\"\\e51b\"}.fa-i-cursor{--fa:\"\\f246\"}.fa-stamp{--fa:\"\\f5bf\"}.fa-stairs{--fa:\"\\e289\"}.fa-i{--fa:\"\\49\"}.fa-hryvnia,.fa-hryvnia-sign{--fa:\"\\f6f2\"}.fa-pills{--fa:\"\\f484\"}.fa-face-grin-wide,.fa-grin-alt{--fa:\"\\f581\"}.fa-tooth{--fa:\"\\f5c9\"}.fa-v{--fa:\"\\56\"}.fa-bangladeshi-taka-sign{--fa:\"\\e2e6\"}.fa-bicycle{--fa:\"\\f206\"}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:\"\\e579\"}.fa-head-side-cough-slash{--fa:\"\\e062\"}.fa-ambulance,.fa-truck-medical{--fa:\"\\f0f9\"}.fa-wheat-awn-circle-exclamation{--fa:\"\\e598\"}.fa-snowman{--fa:\"\\f7d0\"}.fa-mortar-pestle{--fa:\"\\f5a7\"}.fa-road-barrier{--fa:\"\\e562\"}.fa-school{--fa:\"\\f549\"}.fa-igloo{--fa:\"\\f7ae\"}.fa-joint{--fa:\"\\f595\"}.fa-angle-right{--fa:\"\\f105\"}.fa-horse{--fa:\"\\f6f0\"}.fa-q{--fa:\"\\51\"}.fa-g{--fa:\"\\47\"}.fa-notes-medical{--fa:\"\\f481\"}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:\"\\f2c9\"}.fa-dong-sign{--fa:\"\\e169\"}.fa-capsules{--fa:\"\\f46b\"}.fa-poo-bolt,.fa-poo-storm{--fa:\"\\f75a\"}.fa-face-frown-open,.fa-frown-open{--fa:\"\\f57a\"}.fa-hand-point-up{--fa:\"\\f0a6\"}.fa-money-bill{--fa:\"\\f0d6\"}.fa-bookmark{--fa:\"\\f02e\"}.fa-align-justify{--fa:\"\\f039\"}.fa-umbrella-beach{--fa:\"\\f5ca\"}.fa-helmet-un{--fa:\"\\e503\"}.fa-bullseye{--fa:\"\\f140\"}.fa-bacon{--fa:\"\\f7e5\"}.fa-hand-point-down{--fa:\"\\f0a7\"}.fa-arrow-up-from-bracket{--fa:\"\\e09a\"}.fa-folder,.fa-folder-blank{--fa:\"\\f07b\"}.fa-file-medical-alt,.fa-file-waveform{--fa:\"\\f478\"}.fa-radiation{--fa:\"\\f7b9\"}.fa-chart-simple{--fa:\"\\e473\"}.fa-mars-stroke{--fa:\"\\f229\"}.fa-vial{--fa:\"\\f492\"}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:\"\\f624\"}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:\"\\e2ca\"}.fa-e{--fa:\"\\45\"}.fa-pen-alt,.fa-pen-clip{--fa:\"\\f305\"}.fa-bridge-circle-exclamation{--fa:\"\\e4ca\"}.fa-user{--fa:\"\\f007\"}.fa-school-circle-check{--fa:\"\\e56b\"}.fa-dumpster{--fa:\"\\f793\"}.fa-shuttle-van,.fa-van-shuttle{--fa:\"\\f5b6\"}.fa-building-user{--fa:\"\\e4da\"}.fa-caret-square-left,.fa-square-caret-left{--fa:\"\\f191\"}.fa-highlighter{--fa:\"\\f591\"}.fa-key{--fa:\"\\f084\"}.fa-bullhorn{--fa:\"\\f0a1\"}.fa-globe{--fa:\"\\f0ac\"}.fa-synagogue{--fa:\"\\f69b\"}.fa-person-half-dress{--fa:\"\\e548\"}.fa-road-bridge{--fa:\"\\e563\"}.fa-location-arrow{--fa:\"\\f124\"}.fa-c{--fa:\"\\43\"}.fa-tablet-button{--fa:\"\\f10a\"}.fa-building-lock{--fa:\"\\e4d6\"}.fa-pizza-slice{--fa:\"\\f818\"}.fa-money-bill-wave{--fa:\"\\f53a\"}.fa-area-chart,.fa-chart-area{--fa:\"\\f1fe\"}.fa-house-flag{--fa:\"\\e50d\"}.fa-person-circle-minus{--fa:\"\\e540\"}.fa-ban,.fa-cancel{--fa:\"\\f05e\"}.fa-camera-rotate{--fa:\"\\e0d8\"}.fa-air-freshener,.fa-spray-can-sparkles{--fa:\"\\f5d0\"}.fa-star{--fa:\"\\f005\"}.fa-repeat{--fa:\"\\f363\"}.fa-cross{--fa:\"\\f654\"}.fa-box{--fa:\"\\f466\"}.fa-venus-mars{--fa:\"\\f228\"}.fa-arrow-pointer,.fa-mouse-pointer{--fa:\"\\f245\"}.fa-expand-arrows-alt,.fa-maximize{--fa:\"\\f31e\"}.fa-charging-station{--fa:\"\\f5e7\"}.fa-shapes,.fa-triangle-circle-square{--fa:\"\\f61f\"}.fa-random,.fa-shuffle{--fa:\"\\f074\"}.fa-person-running,.fa-running{--fa:\"\\f70c\"}.fa-mobile-retro{--fa:\"\\e527\"}.fa-grip-lines-vertical{--fa:\"\\f7a5\"}.fa-spider{--fa:\"\\f717\"}.fa-hands-bound{--fa:\"\\e4f9\"}.fa-file-invoice-dollar{--fa:\"\\f571\"}.fa-plane-circle-exclamation{--fa:\"\\e556\"}.fa-x-ray{--fa:\"\\f497\"}.fa-spell-check{--fa:\"\\f891\"}.fa-slash{--fa:\"\\f715\"}.fa-computer-mouse,.fa-mouse{--fa:\"\\f8cc\"}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:\"\\f090\"}.fa-shop-slash,.fa-store-alt-slash{--fa:\"\\e070\"}.fa-server{--fa:\"\\f233\"}.fa-virus-covid-slash{--fa:\"\\e4a9\"}.fa-shop-lock{--fa:\"\\e4a5\"}.fa-hourglass-1,.fa-hourglass-start{--fa:\"\\f251\"}.fa-blender-phone{--fa:\"\\f6b6\"}.fa-building-wheat{--fa:\"\\e4db\"}.fa-person-breastfeeding{--fa:\"\\e53a\"}.fa-right-to-bracket,.fa-sign-in-alt{--fa:\"\\f2f6\"}.fa-venus{--fa:\"\\f221\"}.fa-passport{--fa:\"\\f5ab\"}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:\"\\e68f\"}.fa-heart-pulse,.fa-heartbeat{--fa:\"\\f21e\"}.fa-people-carry,.fa-people-carry-box{--fa:\"\\f4ce\"}.fa-temperature-high{--fa:\"\\f769\"}.fa-microchip{--fa:\"\\f2db\"}.fa-crown{--fa:\"\\f521\"}.fa-weight-hanging{--fa:\"\\f5cd\"}.fa-xmarks-lines{--fa:\"\\e59a\"}.fa-file-prescription{--fa:\"\\f572\"}.fa-weight,.fa-weight-scale{--fa:\"\\f496\"}.fa-user-friends,.fa-user-group{--fa:\"\\f500\"}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:\"\\f15e\"}.fa-chess-knight{--fa:\"\\f441\"}.fa-face-laugh-squint,.fa-laugh-squint{--fa:\"\\f59b\"}.fa-wheelchair{--fa:\"\\f193\"}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:\"\\f0aa\"}.fa-toggle-on{--fa:\"\\f205\"}.fa-person-walking,.fa-walking{--fa:\"\\f554\"}.fa-l{--fa:\"\\4c\"}.fa-fire{--fa:\"\\f06d\"}.fa-bed-pulse,.fa-procedures{--fa:\"\\f487\"}.fa-shuttle-space,.fa-space-shuttle{--fa:\"\\f197\"}.fa-face-laugh,.fa-laugh{--fa:\"\\f599\"}.fa-folder-open{--fa:\"\\f07c\"}.fa-heart-circle-plus{--fa:\"\\e500\"}.fa-code-fork{--fa:\"\\e13b\"}.fa-city{--fa:\"\\f64f\"}.fa-microphone-alt,.fa-microphone-lines{--fa:\"\\f3c9\"}.fa-pepper-hot{--fa:\"\\f816\"}.fa-unlock{--fa:\"\\f09c\"}.fa-colon-sign{--fa:\"\\e140\"}.fa-headset{--fa:\"\\f590\"}.fa-store-slash{--fa:\"\\e071\"}.fa-road-circle-xmark{--fa:\"\\e566\"}.fa-user-minus{--fa:\"\\f503\"}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:\"\\f22a\"}.fa-champagne-glasses,.fa-glass-cheers{--fa:\"\\f79f\"}.fa-clipboard{--fa:\"\\f328\"}.fa-house-circle-exclamation{--fa:\"\\e50a\"}.fa-file-arrow-up,.fa-file-upload{--fa:\"\\f574\"}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:\"\\f1eb\"}.fa-bath,.fa-bathtub{--fa:\"\\f2cd\"}.fa-underline{--fa:\"\\f0cd\"}.fa-user-edit,.fa-user-pen{--fa:\"\\f4ff\"}.fa-signature{--fa:\"\\f5b7\"}.fa-stroopwafel{--fa:\"\\f551\"}.fa-bold{--fa:\"\\f032\"}.fa-anchor-lock{--fa:\"\\e4ad\"}.fa-building-ngo{--fa:\"\\e4d7\"}.fa-manat-sign{--fa:\"\\e1d5\"}.fa-not-equal{--fa:\"\\f53e\"}.fa-border-style,.fa-border-top-left{--fa:\"\\f853\"}.fa-map-location-dot,.fa-map-marked-alt{--fa:\"\\f5a0\"}.fa-jedi{--fa:\"\\f669\"}.fa-poll,.fa-square-poll-vertical{--fa:\"\\f681\"}.fa-mug-hot{--fa:\"\\f7b6\"}.fa-battery-car,.fa-car-battery{--fa:\"\\f5df\"}.fa-gift{--fa:\"\\f06b\"}.fa-dice-two{--fa:\"\\f528\"}.fa-chess-queen{--fa:\"\\f445\"}.fa-glasses{--fa:\"\\f530\"}.fa-chess-board{--fa:\"\\f43c\"}.fa-building-circle-check{--fa:\"\\e4d2\"}.fa-person-chalkboard{--fa:\"\\e53d\"}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:\"\\f22b\"}.fa-hand-back-fist,.fa-hand-rock{--fa:\"\\f255\"}.fa-caret-square-up,.fa-square-caret-up{--fa:\"\\f151\"}.fa-cloud-showers-water{--fa:\"\\e4e4\"}.fa-bar-chart,.fa-chart-bar{--fa:\"\\f080\"}.fa-hands-bubbles,.fa-hands-wash{--fa:\"\\e05e\"}.fa-less-than-equal{--fa:\"\\f537\"}.fa-train{--fa:\"\\f238\"}.fa-eye-low-vision,.fa-low-vision{--fa:\"\\f2a8\"}.fa-crow{--fa:\"\\f520\"}.fa-sailboat{--fa:\"\\e445\"}.fa-window-restore{--fa:\"\\f2d2\"}.fa-plus-square,.fa-square-plus{--fa:\"\\f0fe\"}.fa-torii-gate{--fa:\"\\f6a1\"}.fa-frog{--fa:\"\\f52e\"}.fa-bucket{--fa:\"\\e4cf\"}.fa-image{--fa:\"\\f03e\"}.fa-microphone{--fa:\"\\f130\"}.fa-cow{--fa:\"\\f6c8\"}.fa-caret-up{--fa:\"\\f0d8\"}.fa-screwdriver{--fa:\"\\f54a\"}.fa-folder-closed{--fa:\"\\e185\"}.fa-house-tsunami{--fa:\"\\e515\"}.fa-square-nfi{--fa:\"\\e576\"}.fa-arrow-up-from-ground-water{--fa:\"\\e4b5\"}.fa-glass-martini-alt,.fa-martini-glass{--fa:\"\\f57b\"}.fa-square-binary{--fa:\"\\e69b\"}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:\"\\f2ea\"}.fa-columns,.fa-table-columns{--fa:\"\\f0db\"}.fa-lemon{--fa:\"\\f094\"}.fa-head-side-mask{--fa:\"\\e063\"}.fa-handshake{--fa:\"\\f2b5\"}.fa-gem{--fa:\"\\f3a5\"}.fa-dolly,.fa-dolly-box{--fa:\"\\f472\"}.fa-smoking{--fa:\"\\f48d\"}.fa-compress-arrows-alt,.fa-minimize{--fa:\"\\f78c\"}.fa-monument{--fa:\"\\f5a6\"}.fa-snowplow{--fa:\"\\f7d2\"}.fa-angle-double-right,.fa-angles-right{--fa:\"\\f101\"}.fa-cannabis{--fa:\"\\f55f\"}.fa-circle-play,.fa-play-circle{--fa:\"\\f144\"}.fa-tablets{--fa:\"\\f490\"}.fa-ethernet{--fa:\"\\f796\"}.fa-eur,.fa-euro,.fa-euro-sign{--fa:\"\\f153\"}.fa-chair{--fa:\"\\f6c0\"}.fa-check-circle,.fa-circle-check{--fa:\"\\f058\"}.fa-circle-stop,.fa-stop-circle{--fa:\"\\f28d\"}.fa-compass-drafting,.fa-drafting-compass{--fa:\"\\f568\"}.fa-plate-wheat{--fa:\"\\e55a\"}.fa-icicles{--fa:\"\\f7ad\"}.fa-person-shelter{--fa:\"\\e54f\"}.fa-neuter{--fa:\"\\f22c\"}.fa-id-badge{--fa:\"\\f2c1\"}.fa-marker{--fa:\"\\f5a1\"}.fa-face-laugh-beam,.fa-laugh-beam{--fa:\"\\f59a\"}.fa-helicopter-symbol{--fa:\"\\e502\"}.fa-universal-access{--fa:\"\\f29a\"}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:\"\\f139\"}.fa-lari-sign{--fa:\"\\e1c8\"}.fa-volcano{--fa:\"\\f770\"}.fa-person-walking-dashed-line-arrow-right{--fa:\"\\e553\"}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:\"\\f154\"}.fa-viruses{--fa:\"\\e076\"}.fa-square-person-confined{--fa:\"\\e577\"}.fa-user-tie{--fa:\"\\f508\"}.fa-arrow-down-long,.fa-long-arrow-down{--fa:\"\\f175\"}.fa-tent-arrow-down-to-line{--fa:\"\\e57e\"}.fa-certificate{--fa:\"\\f0a3\"}.fa-mail-reply-all,.fa-reply-all{--fa:\"\\f122\"}.fa-suitcase{--fa:\"\\f0f2\"}.fa-person-skating,.fa-skating{--fa:\"\\f7c5\"}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:\"\\f662\"}.fa-camera-retro{--fa:\"\\f083\"}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:\"\\f0ab\"}.fa-arrow-right-to-file,.fa-file-import{--fa:\"\\f56f\"}.fa-external-link-square,.fa-square-arrow-up-right{--fa:\"\\f14c\"}.fa-box-open{--fa:\"\\f49e\"}.fa-scroll{--fa:\"\\f70e\"}.fa-spa{--fa:\"\\f5bb\"}.fa-location-pin-lock{--fa:\"\\e51f\"}.fa-pause{--fa:\"\\f04c\"}.fa-hill-avalanche{--fa:\"\\e507\"}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:\"\\f2cb\"}.fa-bomb{--fa:\"\\f1e2\"}.fa-registered{--fa:\"\\f25d\"}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:\"\\f2bb\"}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:\"\\f516\"}.fa-subscript{--fa:\"\\f12c\"}.fa-diamond-turn-right,.fa-directions{--fa:\"\\f5eb\"}.fa-burst{--fa:\"\\e4dc\"}.fa-house-laptop,.fa-laptop-house{--fa:\"\\e066\"}.fa-face-tired,.fa-tired{--fa:\"\\f5c8\"}.fa-money-bills{--fa:\"\\e1f3\"}.fa-smog{--fa:\"\\f75f\"}.fa-crutch{--fa:\"\\f7f7\"}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:\"\\f0ee\"}.fa-palette{--fa:\"\\f53f\"}.fa-arrows-turn-right{--fa:\"\\e4c0\"}.fa-vest{--fa:\"\\e085\"}.fa-ferry{--fa:\"\\e4ea\"}.fa-arrows-down-to-people{--fa:\"\\e4b9\"}.fa-seedling,.fa-sprout{--fa:\"\\f4d8\"}.fa-arrows-alt-h,.fa-left-right{--fa:\"\\f337\"}.fa-boxes-packing{--fa:\"\\e4c7\"}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:\"\\f0a8\"}.fa-group-arrows-rotate{--fa:\"\\e4f6\"}.fa-bowl-food{--fa:\"\\e4c6\"}.fa-candy-cane{--fa:\"\\f786\"}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:\"\\f160\"}.fa-cloud-bolt,.fa-thunderstorm{--fa:\"\\f76c\"}.fa-remove-format,.fa-text-slash{--fa:\"\\f87d\"}.fa-face-smile-wink,.fa-smile-wink{--fa:\"\\f4da\"}.fa-file-word{--fa:\"\\f1c2\"}.fa-file-powerpoint{--fa:\"\\f1c4\"}.fa-arrows-h,.fa-arrows-left-right{--fa:\"\\f07e\"}.fa-house-lock{--fa:\"\\e510\"}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:\"\\f0ed\"}.fa-children{--fa:\"\\e4e1\"}.fa-blackboard,.fa-chalkboard{--fa:\"\\f51b\"}.fa-user-alt-slash,.fa-user-large-slash{--fa:\"\\f4fa\"}.fa-envelope-open{--fa:\"\\f2b6\"}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:\"\\e05f\"}.fa-mattress-pillow{--fa:\"\\e525\"}.fa-guarani-sign{--fa:\"\\e19a\"}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:\"\\f021\"}.fa-fire-extinguisher{--fa:\"\\f134\"}.fa-cruzeiro-sign{--fa:\"\\e152\"}.fa-greater-than-equal{--fa:\"\\f532\"}.fa-shield-alt,.fa-shield-halved{--fa:\"\\f3ed\"}.fa-atlas,.fa-book-atlas{--fa:\"\\f558\"}.fa-virus{--fa:\"\\e074\"}.fa-envelope-circle-check{--fa:\"\\e4e8\"}.fa-layer-group{--fa:\"\\f5fd\"}.fa-arrows-to-dot{--fa:\"\\e4be\"}.fa-archway{--fa:\"\\f557\"}.fa-heart-circle-check{--fa:\"\\e4fd\"}.fa-house-chimney-crack,.fa-house-damage{--fa:\"\\f6f1\"}.fa-file-archive,.fa-file-zipper{--fa:\"\\f1c6\"}.fa-square{--fa:\"\\f0c8\"}.fa-glass-martini,.fa-martini-glass-empty{--fa:\"\\f000\"}.fa-couch{--fa:\"\\f4b8\"}.fa-cedi-sign{--fa:\"\\e0df\"}.fa-italic{--fa:\"\\f033\"}.fa-table-cells-column-lock{--fa:\"\\e678\"}.fa-church{--fa:\"\\f51d\"}.fa-comments-dollar{--fa:\"\\f653\"}.fa-democrat{--fa:\"\\f747\"}.fa-z{--fa:\"\\5a\"}.fa-person-skiing,.fa-skiing{--fa:\"\\f7c9\"}.fa-road-lock{--fa:\"\\e567\"}.fa-a{--fa:\"\\41\"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:\"\\e03f\"}.fa-feather-alt,.fa-feather-pointed{--fa:\"\\f56b\"}.fa-p{--fa:\"\\50\"}.fa-snowflake{--fa:\"\\f2dc\"}.fa-newspaper{--fa:\"\\f1ea\"}.fa-ad,.fa-rectangle-ad{--fa:\"\\f641\"}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:\"\\f0a9\"}.fa-filter-circle-xmark{--fa:\"\\e17b\"}.fa-locust{--fa:\"\\e520\"}.fa-sort,.fa-unsorted{--fa:\"\\f0dc\"}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:\"\\f0cb\"}.fa-person-dress-burst{--fa:\"\\e544\"}.fa-money-check-alt,.fa-money-check-dollar{--fa:\"\\f53d\"}.fa-vector-square{--fa:\"\\f5cb\"}.fa-bread-slice{--fa:\"\\f7ec\"}.fa-language{--fa:\"\\f1ab\"}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:\"\\f598\"}.fa-filter{--fa:\"\\f0b0\"}.fa-question{--fa:\"\\3f\"}.fa-file-signature{--fa:\"\\f573\"}.fa-arrows-alt,.fa-up-down-left-right{--fa:\"\\f0b2\"}.fa-house-chimney-user{--fa:\"\\e065\"}.fa-hand-holding-heart{--fa:\"\\f4be\"}.fa-puzzle-piece{--fa:\"\\f12e\"}.fa-money-check{--fa:\"\\f53c\"}.fa-star-half-alt,.fa-star-half-stroke{--fa:\"\\f5c0\"}.fa-code{--fa:\"\\f121\"}.fa-glass-whiskey,.fa-whiskey-glass{--fa:\"\\f7a0\"}.fa-building-circle-exclamation{--fa:\"\\e4d3\"}.fa-magnifying-glass-chart{--fa:\"\\e522\"}.fa-arrow-up-right-from-square,.fa-external-link{--fa:\"\\f08e\"}.fa-cubes-stacked{--fa:\"\\e4e6\"}.fa-krw,.fa-won,.fa-won-sign{--fa:\"\\f159\"}.fa-virus-covid{--fa:\"\\e4a8\"}.fa-austral-sign{--fa:\"\\e0a9\"}.fa-f{--fa:\"\\46\"}.fa-leaf{--fa:\"\\f06c\"}.fa-road{--fa:\"\\f018\"}.fa-cab,.fa-taxi{--fa:\"\\f1ba\"}.fa-person-circle-plus{--fa:\"\\e541\"}.fa-chart-pie,.fa-pie-chart{--fa:\"\\f200\"}.fa-bolt-lightning{--fa:\"\\e0b7\"}.fa-sack-xmark{--fa:\"\\e56a\"}.fa-file-excel{--fa:\"\\f1c3\"}.fa-file-contract{--fa:\"\\f56c\"}.fa-fish-fins{--fa:\"\\e4f2\"}.fa-building-flag{--fa:\"\\e4d5\"}.fa-face-grin-beam,.fa-grin-beam{--fa:\"\\f582\"}.fa-object-ungroup{--fa:\"\\f248\"}.fa-poop{--fa:\"\\f619\"}.fa-location-pin,.fa-map-marker{--fa:\"\\f041\"}.fa-kaaba{--fa:\"\\f66b\"}.fa-toilet-paper{--fa:\"\\f71e\"}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:\"\\f807\"}.fa-eject{--fa:\"\\f052\"}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:\"\\f35a\"}.fa-plane-circle-check{--fa:\"\\e555\"}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:\"\\f5a5\"}.fa-object-group{--fa:\"\\f247\"}.fa-chart-line,.fa-line-chart{--fa:\"\\f201\"}.fa-mask-ventilator{--fa:\"\\e524\"}.fa-arrow-right{--fa:\"\\f061\"}.fa-map-signs,.fa-signs-post{--fa:\"\\f277\"}.fa-cash-register{--fa:\"\\f788\"}.fa-person-circle-question{--fa:\"\\e542\"}.fa-h{--fa:\"\\48\"}.fa-tarp{--fa:\"\\e57b\"}.fa-screwdriver-wrench,.fa-tools{--fa:\"\\f7d9\"}.fa-arrows-to-eye{--fa:\"\\e4bf\"}.fa-plug-circle-bolt{--fa:\"\\e55b\"}.fa-heart{--fa:\"\\f004\"}.fa-mars-and-venus{--fa:\"\\f224\"}.fa-home-user,.fa-house-user{--fa:\"\\e1b0\"}.fa-dumpster-fire{--fa:\"\\f794\"}.fa-house-crack{--fa:\"\\e3b1\"}.fa-cocktail,.fa-martini-glass-citrus{--fa:\"\\f561\"}.fa-face-surprise,.fa-surprise{--fa:\"\\f5c2\"}.fa-bottle-water{--fa:\"\\e4c5\"}.fa-circle-pause,.fa-pause-circle{--fa:\"\\f28b\"}.fa-toilet-paper-slash{--fa:\"\\e072\"}.fa-apple-alt,.fa-apple-whole{--fa:\"\\f5d1\"}.fa-kitchen-set{--fa:\"\\e51a\"}.fa-r{--fa:\"\\52\"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:\"\\f2ca\"}.fa-cube{--fa:\"\\f1b2\"}.fa-bitcoin-sign{--fa:\"\\e0b4\"}.fa-shield-dog{--fa:\"\\e573\"}.fa-solar-panel{--fa:\"\\f5ba\"}.fa-lock-open{--fa:\"\\f3c1\"}.fa-elevator{--fa:\"\\e16d\"}.fa-money-bill-transfer{--fa:\"\\e528\"}.fa-money-bill-trend-up{--fa:\"\\e529\"}.fa-house-flood-water-circle-arrow-right{--fa:\"\\e50f\"}.fa-poll-h,.fa-square-poll-horizontal{--fa:\"\\f682\"}.fa-circle{--fa:\"\\f111\"}.fa-backward-fast,.fa-fast-backward{--fa:\"\\f049\"}.fa-recycle{--fa:\"\\f1b8\"}.fa-user-astronaut{--fa:\"\\f4fb\"}.fa-plane-slash{--fa:\"\\e069\"}.fa-trademark{--fa:\"\\f25c\"}.fa-basketball,.fa-basketball-ball{--fa:\"\\f434\"}.fa-satellite-dish{--fa:\"\\f7c0\"}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:\"\\f35b\"}.fa-mobile-alt,.fa-mobile-screen-button{--fa:\"\\f3cd\"}.fa-volume-high,.fa-volume-up{--fa:\"\\f028\"}.fa-users-rays{--fa:\"\\e593\"}.fa-wallet{--fa:\"\\f555\"}.fa-clipboard-check{--fa:\"\\f46c\"}.fa-file-audio{--fa:\"\\f1c7\"}.fa-burger,.fa-hamburger{--fa:\"\\f805\"}.fa-wrench{--fa:\"\\f0ad\"}.fa-bugs{--fa:\"\\e4d0\"}.fa-rupee,.fa-rupee-sign{--fa:\"\\f156\"}.fa-file-image{--fa:\"\\f1c5\"}.fa-circle-question,.fa-question-circle{--fa:\"\\f059\"}.fa-plane-departure{--fa:\"\\f5b0\"}.fa-handshake-slash{--fa:\"\\e060\"}.fa-book-bookmark{--fa:\"\\e0bb\"}.fa-code-branch{--fa:\"\\f126\"}.fa-hat-cowboy{--fa:\"\\f8c0\"}.fa-bridge{--fa:\"\\e4c8\"}.fa-phone-alt,.fa-phone-flip{--fa:\"\\f879\"}.fa-truck-front{--fa:\"\\e2b7\"}.fa-cat{--fa:\"\\f6be\"}.fa-anchor-circle-exclamation{--fa:\"\\e4ab\"}.fa-truck-field{--fa:\"\\e58d\"}.fa-route{--fa:\"\\f4d7\"}.fa-clipboard-question{--fa:\"\\e4e3\"}.fa-panorama{--fa:\"\\e209\"}.fa-comment-medical{--fa:\"\\f7f5\"}.fa-teeth-open{--fa:\"\\f62f\"}.fa-file-circle-minus{--fa:\"\\e4ed\"}.fa-tags{--fa:\"\\f02c\"}.fa-wine-glass{--fa:\"\\f4e3\"}.fa-fast-forward,.fa-forward-fast{--fa:\"\\f050\"}.fa-face-meh-blank,.fa-meh-blank{--fa:\"\\f5a4\"}.fa-parking,.fa-square-parking{--fa:\"\\f540\"}.fa-house-signal{--fa:\"\\e012\"}.fa-bars-progress,.fa-tasks-alt{--fa:\"\\f828\"}.fa-faucet-drip{--fa:\"\\e006\"}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:\"\\f474\"}.fa-ban-smoking,.fa-smoking-ban{--fa:\"\\f54d\"}.fa-terminal{--fa:\"\\f120\"}.fa-mobile-button{--fa:\"\\f10b\"}.fa-house-medical-flag{--fa:\"\\e514\"}.fa-basket-shopping,.fa-shopping-basket{--fa:\"\\f291\"}.fa-tape{--fa:\"\\f4db\"}.fa-bus-alt,.fa-bus-simple{--fa:\"\\f55e\"}.fa-eye{--fa:\"\\f06e\"}.fa-face-sad-cry,.fa-sad-cry{--fa:\"\\f5b3\"}.fa-audio-description{--fa:\"\\f29e\"}.fa-person-military-to-person{--fa:\"\\e54c\"}.fa-file-shield{--fa:\"\\e4f0\"}.fa-user-slash{--fa:\"\\f506\"}.fa-pen{--fa:\"\\f304\"}.fa-tower-observation{--fa:\"\\e586\"}.fa-file-code{--fa:\"\\f1c9\"}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:\"\\f012\"}.fa-bus{--fa:\"\\f207\"}.fa-heart-circle-xmark{--fa:\"\\e501\"}.fa-home-lg,.fa-house-chimney{--fa:\"\\e3af\"}.fa-window-maximize{--fa:\"\\f2d0\"}.fa-face-frown,.fa-frown{--fa:\"\\f119\"}.fa-prescription{--fa:\"\\f5b1\"}.fa-shop,.fa-store-alt{--fa:\"\\f54f\"}.fa-floppy-disk,.fa-save{--fa:\"\\f0c7\"}.fa-vihara{--fa:\"\\f6a7\"}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:\"\\f515\"}.fa-sort-asc,.fa-sort-up{--fa:\"\\f0de\"}.fa-comment-dots,.fa-commenting{--fa:\"\\f4ad\"}.fa-plant-wilt{--fa:\"\\e5aa\"}.fa-diamond{--fa:\"\\f219\"}.fa-face-grin-squint,.fa-grin-squint{--fa:\"\\f585\"}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:\"\\f4c0\"}.fa-chart-diagram{--fa:\"\\e695\"}.fa-bacterium{--fa:\"\\e05a\"}.fa-hand-pointer{--fa:\"\\f25a\"}.fa-drum-steelpan{--fa:\"\\f56a\"}.fa-hand-scissors{--fa:\"\\f257\"}.fa-hands-praying,.fa-praying-hands{--fa:\"\\f684\"}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:\"\\f01e\"}.fa-biohazard{--fa:\"\\f780\"}.fa-location,.fa-location-crosshairs{--fa:\"\\f601\"}.fa-mars-double{--fa:\"\\f227\"}.fa-child-dress{--fa:\"\\e59c\"}.fa-users-between-lines{--fa:\"\\e591\"}.fa-lungs-virus{--fa:\"\\e067\"}.fa-face-grin-tears,.fa-grin-tears{--fa:\"\\f588\"}.fa-phone{--fa:\"\\f095\"}.fa-calendar-times,.fa-calendar-xmark{--fa:\"\\f273\"}.fa-child-reaching{--fa:\"\\e59d\"}.fa-head-side-virus{--fa:\"\\e064\"}.fa-user-cog,.fa-user-gear{--fa:\"\\f4fe\"}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:\"\\f163\"}.fa-door-closed{--fa:\"\\f52a\"}.fa-shield-virus{--fa:\"\\e06c\"}.fa-dice-six{--fa:\"\\f526\"}.fa-mosquito-net{--fa:\"\\e52c\"}.fa-file-fragment{--fa:\"\\e697\"}.fa-bridge-water{--fa:\"\\e4ce\"}.fa-person-booth{--fa:\"\\f756\"}.fa-text-width{--fa:\"\\f035\"}.fa-hat-wizard{--fa:\"\\f6e8\"}.fa-pen-fancy{--fa:\"\\f5ac\"}.fa-digging,.fa-person-digging{--fa:\"\\f85e\"}.fa-trash{--fa:\"\\f1f8\"}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:\"\\f629\"}.fa-book-medical{--fa:\"\\f7e6\"}.fa-poo{--fa:\"\\f2fe\"}.fa-quote-right,.fa-quote-right-alt{--fa:\"\\f10e\"}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:\"\\f553\"}.fa-cubes{--fa:\"\\f1b3\"}.fa-divide{--fa:\"\\f529\"}.fa-tenge,.fa-tenge-sign{--fa:\"\\f7d7\"}.fa-headphones{--fa:\"\\f025\"}.fa-hands-holding{--fa:\"\\f4c2\"}.fa-hands-clapping{--fa:\"\\e1a8\"}.fa-republican{--fa:\"\\f75e\"}.fa-arrow-left{--fa:\"\\f060\"}.fa-person-circle-xmark{--fa:\"\\e543\"}.fa-ruler{--fa:\"\\f545\"}.fa-align-left{--fa:\"\\f036\"}.fa-dice-d6{--fa:\"\\f6d1\"}.fa-restroom{--fa:\"\\f7bd\"}.fa-j{--fa:\"\\4a\"}.fa-users-viewfinder{--fa:\"\\e595\"}.fa-file-video{--fa:\"\\f1c8\"}.fa-external-link-alt,.fa-up-right-from-square{--fa:\"\\f35d\"}.fa-table-cells,.fa-th{--fa:\"\\f00a\"}.fa-file-pdf{--fa:\"\\f1c1\"}.fa-bible,.fa-book-bible{--fa:\"\\f647\"}.fa-o{--fa:\"\\4f\"}.fa-medkit,.fa-suitcase-medical{--fa:\"\\f0fa\"}.fa-user-secret{--fa:\"\\f21b\"}.fa-otter{--fa:\"\\f700\"}.fa-female,.fa-person-dress{--fa:\"\\f182\"}.fa-comment-dollar{--fa:\"\\f651\"}.fa-briefcase-clock,.fa-business-time{--fa:\"\\f64a\"}.fa-table-cells-large,.fa-th-large{--fa:\"\\f009\"}.fa-book-tanakh,.fa-tanakh{--fa:\"\\f827\"}.fa-phone-volume,.fa-volume-control-phone{--fa:\"\\f2a0\"}.fa-hat-cowboy-side{--fa:\"\\f8c1\"}.fa-clipboard-user{--fa:\"\\f7f3\"}.fa-child{--fa:\"\\f1ae\"}.fa-lira-sign{--fa:\"\\f195\"}.fa-satellite{--fa:\"\\f7bf\"}.fa-plane-lock{--fa:\"\\e558\"}.fa-tag{--fa:\"\\f02b\"}.fa-comment{--fa:\"\\f075\"}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:\"\\f1fd\"}.fa-envelope{--fa:\"\\f0e0\"}.fa-angle-double-up,.fa-angles-up{--fa:\"\\f102\"}.fa-paperclip{--fa:\"\\f0c6\"}.fa-arrow-right-to-city{--fa:\"\\e4b3\"}.fa-ribbon{--fa:\"\\f4d6\"}.fa-lungs{--fa:\"\\f604\"}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:\"\\f887\"}.fa-litecoin-sign{--fa:\"\\e1d3\"}.fa-border-none{--fa:\"\\f850\"}.fa-circle-nodes{--fa:\"\\e4e2\"}.fa-parachute-box{--fa:\"\\f4cd\"}.fa-indent{--fa:\"\\f03c\"}.fa-truck-field-un{--fa:\"\\e58e\"}.fa-hourglass,.fa-hourglass-empty{--fa:\"\\f254\"}.fa-mountain{--fa:\"\\f6fc\"}.fa-user-doctor,.fa-user-md{--fa:\"\\f0f0\"}.fa-circle-info,.fa-info-circle{--fa:\"\\f05a\"}.fa-cloud-meatball{--fa:\"\\f73b\"}.fa-camera,.fa-camera-alt{--fa:\"\\f030\"}.fa-square-virus{--fa:\"\\e578\"}.fa-meteor{--fa:\"\\f753\"}.fa-car-on{--fa:\"\\e4dd\"}.fa-sleigh{--fa:\"\\f7cc\"}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:\"\\f162\"}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:\"\\f4c1\"}.fa-water{--fa:\"\\f773\"}.fa-calendar-check{--fa:\"\\f274\"}.fa-braille{--fa:\"\\f2a1\"}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:\"\\f486\"}.fa-landmark{--fa:\"\\f66f\"}.fa-truck{--fa:\"\\f0d1\"}.fa-crosshairs{--fa:\"\\f05b\"}.fa-person-cane{--fa:\"\\e53c\"}.fa-tent{--fa:\"\\e57d\"}.fa-vest-patches{--fa:\"\\e086\"}.fa-check-double{--fa:\"\\f560\"}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:\"\\f15d\"}.fa-money-bill-wheat{--fa:\"\\e52a\"}.fa-cookie{--fa:\"\\f563\"}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:\"\\f0e2\"}.fa-hard-drive,.fa-hdd{--fa:\"\\f0a0\"}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:\"\\f586\"}.fa-dumbbell{--fa:\"\\f44b\"}.fa-list-alt,.fa-rectangle-list{--fa:\"\\f022\"}.fa-tarp-droplet{--fa:\"\\e57c\"}.fa-house-medical-circle-check{--fa:\"\\e511\"}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:\"\\f7ca\"}.fa-calendar-plus{--fa:\"\\f271\"}.fa-plane-arrival{--fa:\"\\f5af\"}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:\"\\f359\"}.fa-subway,.fa-train-subway{--fa:\"\\f239\"}.fa-chart-gantt{--fa:\"\\e0e4\"}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:\"\\e1bc\"}.fa-crop-alt,.fa-crop-simple{--fa:\"\\f565\"}.fa-money-bill-1,.fa-money-bill-alt{--fa:\"\\f3d1\"}.fa-left-long,.fa-long-arrow-alt-left{--fa:\"\\f30a\"}.fa-dna{--fa:\"\\f471\"}.fa-virus-slash{--fa:\"\\e075\"}.fa-minus,.fa-subtract{--fa:\"\\f068\"}.fa-chess{--fa:\"\\f439\"}.fa-arrow-left-long,.fa-long-arrow-left{--fa:\"\\f177\"}.fa-plug-circle-check{--fa:\"\\e55c\"}.fa-street-view{--fa:\"\\f21d\"}.fa-franc-sign{--fa:\"\\e18f\"}.fa-volume-off{--fa:\"\\f026\"}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:\"\\f2a3\"}.fa-cog,.fa-gear{--fa:\"\\f013\"}.fa-droplet-slash,.fa-tint-slash{--fa:\"\\f5c7\"}.fa-mosque{--fa:\"\\f678\"}.fa-mosquito{--fa:\"\\e52b\"}.fa-star-of-david{--fa:\"\\f69a\"}.fa-person-military-rifle{--fa:\"\\e54b\"}.fa-cart-shopping,.fa-shopping-cart{--fa:\"\\f07a\"}.fa-vials{--fa:\"\\f493\"}.fa-plug-circle-plus{--fa:\"\\e55f\"}.fa-place-of-worship{--fa:\"\\f67f\"}.fa-grip-vertical{--fa:\"\\f58e\"}.fa-hexagon-nodes{--fa:\"\\e699\"}.fa-arrow-turn-up,.fa-level-up{--fa:\"\\f148\"}.fa-u{--fa:\"\\55\"}.fa-square-root-alt,.fa-square-root-variable{--fa:\"\\f698\"}.fa-clock,.fa-clock-four{--fa:\"\\f017\"}.fa-backward-step,.fa-step-backward{--fa:\"\\f048\"}.fa-pallet{--fa:\"\\f482\"}.fa-faucet{--fa:\"\\e005\"}.fa-baseball-bat-ball{--fa:\"\\f432\"}.fa-s{--fa:\"\\53\"}.fa-timeline{--fa:\"\\e29c\"}.fa-keyboard{--fa:\"\\f11c\"}.fa-caret-down{--fa:\"\\f0d7\"}.fa-clinic-medical,.fa-house-chimney-medical{--fa:\"\\f7f2\"}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:\"\\f2c8\"}.fa-mobile-android-alt,.fa-mobile-screen{--fa:\"\\f3cf\"}.fa-plane-up{--fa:\"\\e22d\"}.fa-piggy-bank{--fa:\"\\f4d3\"}.fa-battery-3,.fa-battery-half{--fa:\"\\f242\"}.fa-mountain-city{--fa:\"\\e52e\"}.fa-coins{--fa:\"\\f51e\"}.fa-khanda{--fa:\"\\f66d\"}.fa-sliders,.fa-sliders-h{--fa:\"\\f1de\"}.fa-folder-tree{--fa:\"\\f802\"}.fa-network-wired{--fa:\"\\f6ff\"}.fa-map-pin{--fa:\"\\f276\"}.fa-hamsa{--fa:\"\\f665\"}.fa-cent-sign{--fa:\"\\e3f5\"}.fa-flask{--fa:\"\\f0c3\"}.fa-person-pregnant{--fa:\"\\e31e\"}.fa-wand-sparkles{--fa:\"\\f72b\"}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:\"\\f142\"}.fa-ticket{--fa:\"\\f145\"}.fa-power-off{--fa:\"\\f011\"}.fa-long-arrow-alt-right,.fa-right-long{--fa:\"\\f30b\"}.fa-flag-usa{--fa:\"\\f74d\"}.fa-laptop-file{--fa:\"\\e51d\"}.fa-teletype,.fa-tty{--fa:\"\\f1e4\"}.fa-diagram-next{--fa:\"\\e476\"}.fa-person-rifle{--fa:\"\\e54e\"}.fa-house-medical-circle-exclamation{--fa:\"\\e512\"}.fa-closed-captioning{--fa:\"\\f20a\"}.fa-hiking,.fa-person-hiking{--fa:\"\\f6ec\"}.fa-venus-double{--fa:\"\\f226\"}.fa-images{--fa:\"\\f302\"}.fa-calculator{--fa:\"\\f1ec\"}.fa-people-pulling{--fa:\"\\e535\"}.fa-n{--fa:\"\\4e\"}.fa-cable-car,.fa-tram{--fa:\"\\f7da\"}.fa-cloud-rain{--fa:\"\\f73d\"}.fa-building-circle-xmark{--fa:\"\\e4d4\"}.fa-ship{--fa:\"\\f21a\"}.fa-arrows-down-to-line{--fa:\"\\e4b8\"}.fa-download{--fa:\"\\f019\"}.fa-face-grin,.fa-grin{--fa:\"\\f580\"}.fa-backspace,.fa-delete-left{--fa:\"\\f55a\"}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:\"\\f1fb\"}.fa-file-circle-check{--fa:\"\\e5a0\"}.fa-forward{--fa:\"\\f04e\"}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:\"\\f3ce\"}.fa-face-meh,.fa-meh{--fa:\"\\f11a\"}.fa-align-center{--fa:\"\\f037\"}.fa-book-dead,.fa-book-skull{--fa:\"\\f6b7\"}.fa-drivers-license,.fa-id-card{--fa:\"\\f2c2\"}.fa-dedent,.fa-outdent{--fa:\"\\f03b\"}.fa-heart-circle-exclamation{--fa:\"\\e4fe\"}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:\"\\f015\"}.fa-calendar-week{--fa:\"\\f784\"}.fa-laptop-medical{--fa:\"\\f812\"}.fa-b{--fa:\"\\42\"}.fa-file-medical{--fa:\"\\f477\"}.fa-dice-one{--fa:\"\\f525\"}.fa-kiwi-bird{--fa:\"\\f535\"}.fa-arrow-right-arrow-left,.fa-exchange{--fa:\"\\f0ec\"}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:\"\\f2f9\"}.fa-cutlery,.fa-utensils{--fa:\"\\f2e7\"}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:\"\\f161\"}.fa-mill-sign{--fa:\"\\e1ed\"}.fa-bowl-rice{--fa:\"\\e2eb\"}.fa-skull{--fa:\"\\f54c\"}.fa-broadcast-tower,.fa-tower-broadcast{--fa:\"\\f519\"}.fa-truck-pickup{--fa:\"\\f63c\"}.fa-long-arrow-alt-up,.fa-up-long{--fa:\"\\f30c\"}.fa-stop{--fa:\"\\f04d\"}.fa-code-merge{--fa:\"\\f387\"}.fa-upload{--fa:\"\\f093\"}.fa-hurricane{--fa:\"\\f751\"}.fa-mound{--fa:\"\\e52d\"}.fa-toilet-portable{--fa:\"\\e583\"}.fa-compact-disc{--fa:\"\\f51f\"}.fa-file-arrow-down,.fa-file-download{--fa:\"\\f56d\"}.fa-caravan{--fa:\"\\f8ff\"}.fa-shield-cat{--fa:\"\\e572\"}.fa-bolt,.fa-zap{--fa:\"\\f0e7\"}.fa-glass-water{--fa:\"\\e4f4\"}.fa-oil-well{--fa:\"\\e532\"}.fa-vault{--fa:\"\\e2c5\"}.fa-mars{--fa:\"\\f222\"}.fa-toilet{--fa:\"\\f7d8\"}.fa-plane-circle-xmark{--fa:\"\\e557\"}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:\"\\f157\"}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:\"\\f158\"}.fa-sun{--fa:\"\\f185\"}.fa-guitar{--fa:\"\\f7a6\"}.fa-face-laugh-wink,.fa-laugh-wink{--fa:\"\\f59c\"}.fa-horse-head{--fa:\"\\f7ab\"}.fa-bore-hole{--fa:\"\\e4c3\"}.fa-industry{--fa:\"\\f275\"}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:\"\\f358\"}.fa-arrows-turn-to-dots{--fa:\"\\e4c1\"}.fa-florin-sign{--fa:\"\\e184\"}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:\"\\f884\"}.fa-less-than{--fa:\"\\3c\"}.fa-angle-down{--fa:\"\\f107\"}.fa-car-tunnel{--fa:\"\\e4de\"}.fa-head-side-cough{--fa:\"\\e061\"}.fa-grip-lines{--fa:\"\\f7a4\"}.fa-thumbs-down{--fa:\"\\f165\"}.fa-user-lock{--fa:\"\\f502\"}.fa-arrow-right-long,.fa-long-arrow-right{--fa:\"\\f178\"}.fa-anchor-circle-xmark{--fa:\"\\e4ac\"}.fa-ellipsis,.fa-ellipsis-h{--fa:\"\\f141\"}.fa-chess-pawn{--fa:\"\\f443\"}.fa-first-aid,.fa-kit-medical{--fa:\"\\f479\"}.fa-person-through-window{--fa:\"\\e5a9\"}.fa-toolbox{--fa:\"\\f552\"}.fa-hands-holding-circle{--fa:\"\\e4fb\"}.fa-bug{--fa:\"\\f188\"}.fa-credit-card,.fa-credit-card-alt{--fa:\"\\f09d\"}.fa-automobile,.fa-car{--fa:\"\\f1b9\"}.fa-hand-holding-hand{--fa:\"\\e4f7\"}.fa-book-open-reader,.fa-book-reader{--fa:\"\\f5da\"}.fa-mountain-sun{--fa:\"\\e52f\"}.fa-arrows-left-right-to-line{--fa:\"\\e4ba\"}.fa-dice-d20{--fa:\"\\f6cf\"}.fa-truck-droplet{--fa:\"\\e58c\"}.fa-file-circle-xmark{--fa:\"\\e5a1\"}.fa-temperature-arrow-up,.fa-temperature-up{--fa:\"\\e040\"}.fa-medal{--fa:\"\\f5a2\"}.fa-bed{--fa:\"\\f236\"}.fa-h-square,.fa-square-h{--fa:\"\\f0fd\"}.fa-podcast{--fa:\"\\f2ce\"}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:\"\\f2c7\"}.fa-bell{--fa:\"\\f0f3\"}.fa-superscript{--fa:\"\\f12b\"}.fa-plug-circle-xmark{--fa:\"\\e560\"}.fa-star-of-life{--fa:\"\\f621\"}.fa-phone-slash{--fa:\"\\f3dd\"}.fa-paint-roller{--fa:\"\\f5aa\"}.fa-hands-helping,.fa-handshake-angle{--fa:\"\\f4c4\"}.fa-location-dot,.fa-map-marker-alt{--fa:\"\\f3c5\"}.fa-file{--fa:\"\\f15b\"}.fa-greater-than{--fa:\"\\3e\"}.fa-person-swimming,.fa-swimmer{--fa:\"\\f5c4\"}.fa-arrow-down{--fa:\"\\f063\"}.fa-droplet,.fa-tint{--fa:\"\\f043\"}.fa-eraser{--fa:\"\\f12d\"}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:\"\\f57d\"}.fa-person-burst{--fa:\"\\e53b\"}.fa-dove{--fa:\"\\f4ba\"}.fa-battery-0,.fa-battery-empty{--fa:\"\\f244\"}.fa-socks{--fa:\"\\f696\"}.fa-inbox{--fa:\"\\f01c\"}.fa-section{--fa:\"\\e447\"}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:\"\\f625\"}.fa-envelope-open-text{--fa:\"\\f658\"}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:\"\\f0f8\"}.fa-wine-bottle{--fa:\"\\f72f\"}.fa-chess-rook{--fa:\"\\f447\"}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:\"\\f550\"}.fa-dharmachakra{--fa:\"\\f655\"}.fa-hotdog{--fa:\"\\f80f\"}.fa-blind,.fa-person-walking-with-cane{--fa:\"\\f29d\"}.fa-drum{--fa:\"\\f569\"}.fa-ice-cream{--fa:\"\\f810\"}.fa-heart-circle-bolt{--fa:\"\\e4fc\"}.fa-fax{--fa:\"\\f1ac\"}.fa-paragraph{--fa:\"\\f1dd\"}.fa-check-to-slot,.fa-vote-yea{--fa:\"\\f772\"}.fa-star-half{--fa:\"\\f089\"}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:\"\\f468\"}.fa-chain,.fa-link{--fa:\"\\f0c1\"}.fa-assistive-listening-systems,.fa-ear-listen{--fa:\"\\f2a2\"}.fa-tree-city{--fa:\"\\e587\"}.fa-play{--fa:\"\\f04b\"}.fa-font{--fa:\"\\f031\"}.fa-table-cells-row-lock{--fa:\"\\e67a\"}.fa-rupiah-sign{--fa:\"\\e23d\"}.fa-magnifying-glass,.fa-search{--fa:\"\\f002\"}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:\"\\f45d\"}.fa-diagnoses,.fa-person-dots-from-line{--fa:\"\\f470\"}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:\"\\f82a\"}.fa-naira-sign{--fa:\"\\e1f6\"}.fa-cart-arrow-down{--fa:\"\\f218\"}.fa-walkie-talkie{--fa:\"\\f8ef\"}.fa-file-edit,.fa-file-pen{--fa:\"\\f31c\"}.fa-receipt{--fa:\"\\f543\"}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:\"\\f14b\"}.fa-suitcase-rolling{--fa:\"\\f5c1\"}.fa-person-circle-exclamation{--fa:\"\\e53f\"}.fa-chevron-down{--fa:\"\\f078\"}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:\"\\f240\"}.fa-skull-crossbones{--fa:\"\\f714\"}.fa-code-compare{--fa:\"\\e13a\"}.fa-list-dots,.fa-list-ul{--fa:\"\\f0ca\"}.fa-school-lock{--fa:\"\\e56f\"}.fa-tower-cell{--fa:\"\\e585\"}.fa-down-long,.fa-long-arrow-alt-down{--fa:\"\\f309\"}.fa-ranking-star{--fa:\"\\e561\"}.fa-chess-king{--fa:\"\\f43f\"}.fa-person-harassing{--fa:\"\\e549\"}.fa-brazilian-real-sign{--fa:\"\\e46c\"}.fa-landmark-alt,.fa-landmark-dome{--fa:\"\\f752\"}.fa-arrow-up{--fa:\"\\f062\"}.fa-television,.fa-tv,.fa-tv-alt{--fa:\"\\f26c\"}.fa-shrimp{--fa:\"\\e448\"}.fa-list-check,.fa-tasks{--fa:\"\\f0ae\"}.fa-jug-detergent{--fa:\"\\e519\"}.fa-circle-user,.fa-user-circle{--fa:\"\\f2bd\"}.fa-user-shield{--fa:\"\\f505\"}.fa-wind{--fa:\"\\f72e\"}.fa-car-burst,.fa-car-crash{--fa:\"\\f5e1\"}.fa-y{--fa:\"\\59\"}.fa-person-snowboarding,.fa-snowboarding{--fa:\"\\f7ce\"}.fa-shipping-fast,.fa-truck-fast{--fa:\"\\f48b\"}.fa-fish{--fa:\"\\f578\"}.fa-user-graduate{--fa:\"\\f501\"}.fa-adjust,.fa-circle-half-stroke{--fa:\"\\f042\"}.fa-clapperboard{--fa:\"\\e131\"}.fa-circle-radiation,.fa-radiation-alt{--fa:\"\\f7ba\"}.fa-baseball,.fa-baseball-ball{--fa:\"\\f433\"}.fa-jet-fighter-up{--fa:\"\\e518\"}.fa-diagram-project,.fa-project-diagram{--fa:\"\\f542\"}.fa-copy{--fa:\"\\f0c5\"}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:\"\\f6a9\"}.fa-hand-sparkles{--fa:\"\\e05d\"}.fa-grip,.fa-grip-horizontal{--fa:\"\\f58d\"}.fa-share-from-square,.fa-share-square{--fa:\"\\f14d\"}.fa-child-combatant,.fa-child-rifle{--fa:\"\\e4e0\"}.fa-gun{--fa:\"\\e19b\"}.fa-phone-square,.fa-square-phone{--fa:\"\\f098\"}.fa-add,.fa-plus{--fa:\"\\2b\"}.fa-expand{--fa:\"\\f065\"}.fa-computer{--fa:\"\\e4e5\"}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:\"\\f00d\"}.fa-arrows,.fa-arrows-up-down-left-right{--fa:\"\\f047\"}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:\"\\f51c\"}.fa-peso-sign{--fa:\"\\e222\"}.fa-building-shield{--fa:\"\\e4d8\"}.fa-baby{--fa:\"\\f77c\"}.fa-users-line{--fa:\"\\e592\"}.fa-quote-left,.fa-quote-left-alt{--fa:\"\\f10d\"}.fa-tractor{--fa:\"\\f722\"}.fa-trash-arrow-up,.fa-trash-restore{--fa:\"\\f829\"}.fa-arrow-down-up-lock{--fa:\"\\e4b0\"}.fa-lines-leaning{--fa:\"\\e51e\"}.fa-ruler-combined{--fa:\"\\f546\"}.fa-copyright{--fa:\"\\f1f9\"}.fa-equals{--fa:\"\\3d\"}.fa-blender{--fa:\"\\f517\"}.fa-teeth{--fa:\"\\f62e\"}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:\"\\f20b\"}.fa-map{--fa:\"\\f279\"}.fa-rocket{--fa:\"\\f135\"}.fa-photo-film,.fa-photo-video{--fa:\"\\f87c\"}.fa-folder-minus{--fa:\"\\f65d\"}.fa-hexagon-nodes-bolt{--fa:\"\\e69a\"}.fa-store{--fa:\"\\f54e\"}.fa-arrow-trend-up{--fa:\"\\e098\"}.fa-plug-circle-minus{--fa:\"\\e55e\"}.fa-sign,.fa-sign-hanging{--fa:\"\\f4d9\"}.fa-bezier-curve{--fa:\"\\f55b\"}.fa-bell-slash{--fa:\"\\f1f6\"}.fa-tablet,.fa-tablet-android{--fa:\"\\f3fb\"}.fa-school-flag{--fa:\"\\e56e\"}.fa-fill{--fa:\"\\f575\"}.fa-angle-up{--fa:\"\\f106\"}.fa-drumstick-bite{--fa:\"\\f6d7\"}.fa-holly-berry{--fa:\"\\f7aa\"}.fa-chevron-left{--fa:\"\\f053\"}.fa-bacteria{--fa:\"\\e059\"}.fa-hand-lizard{--fa:\"\\f258\"}.fa-notdef{--fa:\"\\e1fe\"}.fa-disease{--fa:\"\\f7fa\"}.fa-briefcase-medical{--fa:\"\\f469\"}.fa-genderless{--fa:\"\\f22d\"}.fa-chevron-right{--fa:\"\\f054\"}.fa-retweet{--fa:\"\\f079\"}.fa-car-alt,.fa-car-rear{--fa:\"\\f5de\"}.fa-pump-soap{--fa:\"\\e06b\"}.fa-video-slash{--fa:\"\\f4e2\"}.fa-battery-2,.fa-battery-quarter{--fa:\"\\f243\"}.fa-radio{--fa:\"\\f8d7\"}.fa-baby-carriage,.fa-carriage-baby{--fa:\"\\f77d\"}.fa-traffic-light{--fa:\"\\f637\"}.fa-thermometer{--fa:\"\\f491\"}.fa-vr-cardboard{--fa:\"\\f729\"}.fa-hand-middle-finger{--fa:\"\\f806\"}.fa-percent,.fa-percentage{--fa:\"\\25\"}.fa-truck-moving{--fa:\"\\f4df\"}.fa-glass-water-droplet{--fa:\"\\e4f5\"}.fa-display{--fa:\"\\e163\"}.fa-face-smile,.fa-smile{--fa:\"\\f118\"}.fa-thumb-tack,.fa-thumbtack{--fa:\"\\f08d\"}.fa-trophy{--fa:\"\\f091\"}.fa-person-praying,.fa-pray{--fa:\"\\f683\"}.fa-hammer{--fa:\"\\f6e3\"}.fa-hand-peace{--fa:\"\\f25b\"}.fa-rotate,.fa-sync-alt{--fa:\"\\f2f1\"}.fa-spinner{--fa:\"\\f110\"}.fa-robot{--fa:\"\\f544\"}.fa-peace{--fa:\"\\f67c\"}.fa-cogs,.fa-gears{--fa:\"\\f085\"}.fa-warehouse{--fa:\"\\f494\"}.fa-arrow-up-right-dots{--fa:\"\\e4b7\"}.fa-splotch{--fa:\"\\f5bc\"}.fa-face-grin-hearts,.fa-grin-hearts{--fa:\"\\f584\"}.fa-dice-four{--fa:\"\\f524\"}.fa-sim-card{--fa:\"\\f7c4\"}.fa-transgender,.fa-transgender-alt{--fa:\"\\f225\"}.fa-mercury{--fa:\"\\f223\"}.fa-arrow-turn-down,.fa-level-down{--fa:\"\\f149\"}.fa-person-falling-burst{--fa:\"\\e547\"}.fa-award{--fa:\"\\f559\"}.fa-ticket-alt,.fa-ticket-simple{--fa:\"\\f3ff\"}.fa-building{--fa:\"\\f1ad\"}.fa-angle-double-left,.fa-angles-left{--fa:\"\\f100\"}.fa-qrcode{--fa:\"\\f029\"}.fa-clock-rotate-left,.fa-history{--fa:\"\\f1da\"}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:\"\\f583\"}.fa-arrow-right-from-file,.fa-file-export{--fa:\"\\f56e\"}.fa-shield,.fa-shield-blank{--fa:\"\\f132\"}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:\"\\f885\"}.fa-comment-nodes{--fa:\"\\e696\"}.fa-house-medical{--fa:\"\\e3b2\"}.fa-golf-ball,.fa-golf-ball-tee{--fa:\"\\f450\"}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:\"\\f137\"}.fa-house-chimney-window{--fa:\"\\e00d\"}.fa-pen-nib{--fa:\"\\f5ad\"}.fa-tent-arrow-turn-left{--fa:\"\\e580\"}.fa-tents{--fa:\"\\e582\"}.fa-magic,.fa-wand-magic{--fa:\"\\f0d0\"}.fa-dog{--fa:\"\\f6d3\"}.fa-carrot{--fa:\"\\f787\"}.fa-moon{--fa:\"\\f186\"}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:\"\\f5ce\"}.fa-cheese{--fa:\"\\f7ef\"}.fa-yin-yang{--fa:\"\\f6ad\"}.fa-music{--fa:\"\\f001\"}.fa-code-commit{--fa:\"\\f386\"}.fa-temperature-low{--fa:\"\\f76b\"}.fa-biking,.fa-person-biking{--fa:\"\\f84a\"}.fa-broom{--fa:\"\\f51a\"}.fa-shield-heart{--fa:\"\\e574\"}.fa-gopuram{--fa:\"\\f664\"}.fa-earth-oceania,.fa-globe-oceania{--fa:\"\\e47b\"}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:\"\\f2d3\"}.fa-hashtag{--fa:\"\\23\"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:\"\\f424\"}.fa-oil-can{--fa:\"\\f613\"}.fa-t{--fa:\"\\54\"}.fa-hippo{--fa:\"\\f6ed\"}.fa-chart-column{--fa:\"\\e0e3\"}.fa-infinity{--fa:\"\\f534\"}.fa-vial-circle-check{--fa:\"\\e596\"}.fa-person-arrow-down-to-line{--fa:\"\\e538\"}.fa-voicemail{--fa:\"\\f897\"}.fa-fan{--fa:\"\\f863\"}.fa-person-walking-luggage{--fa:\"\\e554\"}.fa-arrows-alt-v,.fa-up-down{--fa:\"\\f338\"}.fa-cloud-moon-rain{--fa:\"\\f73c\"}.fa-calendar{--fa:\"\\f133\"}.fa-trailer{--fa:\"\\e041\"}.fa-bahai,.fa-haykal{--fa:\"\\f666\"}.fa-sd-card{--fa:\"\\f7c2\"}.fa-dragon{--fa:\"\\f6d5\"}.fa-shoe-prints{--fa:\"\\f54b\"}.fa-circle-plus,.fa-plus-circle{--fa:\"\\f055\"}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:\"\\f58b\"}.fa-hand-holding{--fa:\"\\f4bd\"}.fa-plug-circle-exclamation{--fa:\"\\e55d\"}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:\"\\f127\"}.fa-clone{--fa:\"\\f24d\"}.fa-person-walking-arrow-loop-left{--fa:\"\\e551\"}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:\"\\f882\"}.fa-fire-alt,.fa-fire-flame-curved{--fa:\"\\f7e4\"}.fa-tornado{--fa:\"\\f76f\"}.fa-file-circle-plus{--fa:\"\\e494\"}.fa-book-quran,.fa-quran{--fa:\"\\f687\"}.fa-anchor{--fa:\"\\f13d\"}.fa-border-all{--fa:\"\\f84c\"}.fa-angry,.fa-face-angry{--fa:\"\\f556\"}.fa-cookie-bite{--fa:\"\\f564\"}.fa-arrow-trend-down{--fa:\"\\e097\"}.fa-feed,.fa-rss{--fa:\"\\f09e\"}.fa-draw-polygon{--fa:\"\\f5ee\"}.fa-balance-scale,.fa-scale-balanced{--fa:\"\\f24e\"}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:\"\\f62a\"}.fa-shower{--fa:\"\\f2cc\"}.fa-desktop,.fa-desktop-alt{--fa:\"\\f390\"}.fa-m{--fa:\"\\4d\"}.fa-table-list,.fa-th-list{--fa:\"\\f00b\"}.fa-comment-sms,.fa-sms{--fa:\"\\f7cd\"}.fa-book{--fa:\"\\f02d\"}.fa-user-plus{--fa:\"\\f234\"}.fa-check{--fa:\"\\f00c\"}.fa-battery-4,.fa-battery-three-quarters{--fa:\"\\f241\"}.fa-house-circle-check{--fa:\"\\e509\"}.fa-angle-left{--fa:\"\\f104\"}.fa-diagram-successor{--fa:\"\\e47a\"}.fa-truck-arrow-right{--fa:\"\\e58b\"}.fa-arrows-split-up-and-left{--fa:\"\\e4bc\"}.fa-fist-raised,.fa-hand-fist{--fa:\"\\f6de\"}.fa-cloud-moon{--fa:\"\\f6c3\"}.fa-briefcase{--fa:\"\\f0b1\"}.fa-person-falling{--fa:\"\\e546\"}.fa-image-portrait,.fa-portrait{--fa:\"\\f3e0\"}.fa-user-tag{--fa:\"\\f507\"}.fa-rug{--fa:\"\\e569\"}.fa-earth-europe,.fa-globe-europe{--fa:\"\\f7a2\"}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:\"\\f59d\"}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:\"\\f410\"}.fa-baht-sign{--fa:\"\\e0ac\"}.fa-book-open{--fa:\"\\f518\"}.fa-book-journal-whills,.fa-journal-whills{--fa:\"\\f66a\"}.fa-handcuffs{--fa:\"\\e4f8\"}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:\"\\f071\"}.fa-database{--fa:\"\\f1c0\"}.fa-mail-forward,.fa-share{--fa:\"\\f064\"}.fa-bottle-droplet{--fa:\"\\e4c4\"}.fa-mask-face{--fa:\"\\e1d7\"}.fa-hill-rockslide{--fa:\"\\e508\"}.fa-exchange-alt,.fa-right-left{--fa:\"\\f362\"}.fa-paper-plane{--fa:\"\\f1d8\"}.fa-road-circle-exclamation{--fa:\"\\e565\"}.fa-dungeon{--fa:\"\\f6d9\"}.fa-align-right{--fa:\"\\f038\"}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:\"\\f53b\"}.fa-life-ring{--fa:\"\\f1cd\"}.fa-hands,.fa-sign-language,.fa-signing{--fa:\"\\f2a7\"}.fa-calendar-day{--fa:\"\\f783\"}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:\"\\f5c5\"}.fa-arrows-up-down,.fa-arrows-v{--fa:\"\\f07d\"}.fa-face-grimace,.fa-grimace{--fa:\"\\f57f\"}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:\"\\e2ce\"}.fa-level-down-alt,.fa-turn-down{--fa:\"\\f3be\"}.fa-person-walking-arrow-right{--fa:\"\\e552\"}.fa-envelope-square,.fa-square-envelope{--fa:\"\\f199\"}.fa-dice{--fa:\"\\f522\"}.fa-bowling-ball{--fa:\"\\f436\"}.fa-brain{--fa:\"\\f5dc\"}.fa-band-aid,.fa-bandage{--fa:\"\\f462\"}.fa-calendar-minus{--fa:\"\\f272\"}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:\"\\f057\"}.fa-gifts{--fa:\"\\f79c\"}.fa-hotel{--fa:\"\\f594\"}.fa-earth-asia,.fa-globe-asia{--fa:\"\\f57e\"}.fa-id-card-alt,.fa-id-card-clip{--fa:\"\\f47f\"}.fa-magnifying-glass-plus,.fa-search-plus{--fa:\"\\f00e\"}.fa-thumbs-up{--fa:\"\\f164\"}.fa-user-clock{--fa:\"\\f4fd\"}.fa-allergies,.fa-hand-dots{--fa:\"\\f461\"}.fa-file-invoice{--fa:\"\\f570\"}.fa-window-minimize{--fa:\"\\f2d1\"}.fa-coffee,.fa-mug-saucer{--fa:\"\\f0f4\"}.fa-brush{--fa:\"\\f55d\"}.fa-file-half-dashed{--fa:\"\\e698\"}.fa-mask{--fa:\"\\f6fa\"}.fa-magnifying-glass-minus,.fa-search-minus{--fa:\"\\f010\"}.fa-ruler-vertical{--fa:\"\\f548\"}.fa-user-alt,.fa-user-large{--fa:\"\\f406\"}.fa-train-tram{--fa:\"\\e5b4\"}.fa-user-nurse{--fa:\"\\f82f\"}.fa-syringe{--fa:\"\\f48e\"}.fa-cloud-sun{--fa:\"\\f6c4\"}.fa-stopwatch-20{--fa:\"\\e06f\"}.fa-square-full{--fa:\"\\f45c\"}.fa-magnet{--fa:\"\\f076\"}.fa-jar{--fa:\"\\e516\"}.fa-note-sticky,.fa-sticky-note{--fa:\"\\f249\"}.fa-bug-slash{--fa:\"\\e490\"}.fa-arrow-up-from-water-pump{--fa:\"\\e4b6\"}.fa-bone{--fa:\"\\f5d7\"}.fa-table-cells-row-unlock{--fa:\"\\e691\"}.fa-user-injured{--fa:\"\\f728\"}.fa-face-sad-tear,.fa-sad-tear{--fa:\"\\f5b4\"}.fa-plane{--fa:\"\\f072\"}.fa-tent-arrows-down{--fa:\"\\e581\"}.fa-exclamation{--fa:\"\\21\"}.fa-arrows-spin{--fa:\"\\e4bb\"}.fa-print{--fa:\"\\f02f\"}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:\"\\e2bb\"}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:\"\\24\"}.fa-x{--fa:\"\\58\"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:\"\\f688\"}.fa-users-cog,.fa-users-gear{--fa:\"\\f509\"}.fa-person-military-pointing{--fa:\"\\e54a\"}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:\"\\f19c\"}.fa-umbrella{--fa:\"\\f0e9\"}.fa-trowel{--fa:\"\\e589\"}.fa-d{--fa:\"\\44\"}.fa-stapler{--fa:\"\\e5af\"}.fa-masks-theater,.fa-theater-masks{--fa:\"\\f630\"}.fa-kip-sign{--fa:\"\\e1c4\"}.fa-hand-point-left{--fa:\"\\f0a5\"}.fa-handshake-alt,.fa-handshake-simple{--fa:\"\\f4c6\"}.fa-fighter-jet,.fa-jet-fighter{--fa:\"\\f0fb\"}.fa-share-alt-square,.fa-square-share-nodes{--fa:\"\\f1e1\"}.fa-barcode{--fa:\"\\f02a\"}.fa-plus-minus{--fa:\"\\e43c\"}.fa-video,.fa-video-camera{--fa:\"\\f03d\"}.fa-graduation-cap,.fa-mortar-board{--fa:\"\\f19d\"}.fa-hand-holding-medical{--fa:\"\\e05c\"}.fa-person-circle-check{--fa:\"\\e53e\"}.fa-level-up-alt,.fa-turn-up{--fa:\"\\f3bf\"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:\"Font Awesome 6 Brands\";--fa-font-brands:normal 400 1em/1 \"Font Awesome 6 Brands\"}@font-face{font-family:\"Font Awesome 6 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:\"\\f3d0\"}.fa-hooli{--fa:\"\\f427\"}.fa-yelp{--fa:\"\\f1e9\"}.fa-cc-visa{--fa:\"\\f1f0\"}.fa-lastfm{--fa:\"\\f202\"}.fa-shopware{--fa:\"\\f5b5\"}.fa-creative-commons-nc{--fa:\"\\f4e8\"}.fa-aws{--fa:\"\\f375\"}.fa-redhat{--fa:\"\\f7bc\"}.fa-yoast{--fa:\"\\f2b1\"}.fa-cloudflare{--fa:\"\\e07d\"}.fa-ups{--fa:\"\\f7e0\"}.fa-pixiv{--fa:\"\\e640\"}.fa-wpexplorer{--fa:\"\\f2de\"}.fa-dyalog{--fa:\"\\f399\"}.fa-bity{--fa:\"\\f37a\"}.fa-stackpath{--fa:\"\\f842\"}.fa-buysellads{--fa:\"\\f20d\"}.fa-first-order{--fa:\"\\f2b0\"}.fa-modx{--fa:\"\\f285\"}.fa-guilded{--fa:\"\\e07e\"}.fa-vnv{--fa:\"\\f40b\"}.fa-js-square,.fa-square-js{--fa:\"\\f3b9\"}.fa-microsoft{--fa:\"\\f3ca\"}.fa-qq{--fa:\"\\f1d6\"}.fa-orcid{--fa:\"\\f8d2\"}.fa-java{--fa:\"\\f4e4\"}.fa-invision{--fa:\"\\f7b0\"}.fa-creative-commons-pd-alt{--fa:\"\\f4ed\"}.fa-centercode{--fa:\"\\f380\"}.fa-glide-g{--fa:\"\\f2a6\"}.fa-drupal{--fa:\"\\f1a9\"}.fa-jxl{--fa:\"\\e67b\"}.fa-dart-lang{--fa:\"\\e693\"}.fa-hire-a-helper{--fa:\"\\f3b0\"}.fa-creative-commons-by{--fa:\"\\f4e7\"}.fa-unity{--fa:\"\\e049\"}.fa-whmcs{--fa:\"\\f40d\"}.fa-rocketchat{--fa:\"\\f3e8\"}.fa-vk{--fa:\"\\f189\"}.fa-untappd{--fa:\"\\f405\"}.fa-mailchimp{--fa:\"\\f59e\"}.fa-css3-alt{--fa:\"\\f38b\"}.fa-reddit-square,.fa-square-reddit{--fa:\"\\f1a2\"}.fa-vimeo-v{--fa:\"\\f27d\"}.fa-contao{--fa:\"\\f26d\"}.fa-square-font-awesome{--fa:\"\\e5ad\"}.fa-deskpro{--fa:\"\\f38f\"}.fa-brave{--fa:\"\\e63c\"}.fa-sistrix{--fa:\"\\f3ee\"}.fa-instagram-square,.fa-square-instagram{--fa:\"\\e055\"}.fa-battle-net{--fa:\"\\f835\"}.fa-the-red-yeti{--fa:\"\\f69d\"}.fa-hacker-news-square,.fa-square-hacker-news{--fa:\"\\f3af\"}.fa-edge{--fa:\"\\f282\"}.fa-threads{--fa:\"\\e618\"}.fa-napster{--fa:\"\\f3d2\"}.fa-snapchat-square,.fa-square-snapchat{--fa:\"\\f2ad\"}.fa-google-plus-g{--fa:\"\\f0d5\"}.fa-artstation{--fa:\"\\f77a\"}.fa-markdown{--fa:\"\\f60f\"}.fa-sourcetree{--fa:\"\\f7d3\"}.fa-google-plus{--fa:\"\\f2b3\"}.fa-diaspora{--fa:\"\\f791\"}.fa-foursquare{--fa:\"\\f180\"}.fa-stack-overflow{--fa:\"\\f16c\"}.fa-github-alt{--fa:\"\\f113\"}.fa-phoenix-squadron{--fa:\"\\f511\"}.fa-pagelines{--fa:\"\\f18c\"}.fa-algolia{--fa:\"\\f36c\"}.fa-red-river{--fa:\"\\f3e3\"}.fa-creative-commons-sa{--fa:\"\\f4ef\"}.fa-safari{--fa:\"\\f267\"}.fa-google{--fa:\"\\f1a0\"}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:\"\\f35c\"}.fa-atlassian{--fa:\"\\f77b\"}.fa-linkedin-in{--fa:\"\\f0e1\"}.fa-digital-ocean{--fa:\"\\f391\"}.fa-nimblr{--fa:\"\\f5a8\"}.fa-chromecast{--fa:\"\\f838\"}.fa-evernote{--fa:\"\\f839\"}.fa-hacker-news{--fa:\"\\f1d4\"}.fa-creative-commons-sampling{--fa:\"\\f4f0\"}.fa-adversal{--fa:\"\\f36a\"}.fa-creative-commons{--fa:\"\\f25e\"}.fa-watchman-monitoring{--fa:\"\\e087\"}.fa-fonticons{--fa:\"\\f280\"}.fa-weixin{--fa:\"\\f1d7\"}.fa-shirtsinbulk{--fa:\"\\f214\"}.fa-codepen{--fa:\"\\f1cb\"}.fa-git-alt{--fa:\"\\f841\"}.fa-lyft{--fa:\"\\f3c3\"}.fa-rev{--fa:\"\\f5b2\"}.fa-windows{--fa:\"\\f17a\"}.fa-wizards-of-the-coast{--fa:\"\\f730\"}.fa-square-viadeo,.fa-viadeo-square{--fa:\"\\f2aa\"}.fa-meetup{--fa:\"\\f2e0\"}.fa-centos{--fa:\"\\f789\"}.fa-adn{--fa:\"\\f170\"}.fa-cloudsmith{--fa:\"\\f384\"}.fa-opensuse{--fa:\"\\e62b\"}.fa-pied-piper-alt{--fa:\"\\f1a8\"}.fa-dribbble-square,.fa-square-dribbble{--fa:\"\\f397\"}.fa-codiepie{--fa:\"\\f284\"}.fa-node{--fa:\"\\f419\"}.fa-mix{--fa:\"\\f3cb\"}.fa-steam{--fa:\"\\f1b6\"}.fa-cc-apple-pay{--fa:\"\\f416\"}.fa-scribd{--fa:\"\\f28a\"}.fa-debian{--fa:\"\\e60b\"}.fa-openid{--fa:\"\\f19b\"}.fa-instalod{--fa:\"\\e081\"}.fa-files-pinwheel{--fa:\"\\e69f\"}.fa-expeditedssl{--fa:\"\\f23e\"}.fa-sellcast{--fa:\"\\f2da\"}.fa-square-twitter,.fa-twitter-square{--fa:\"\\f081\"}.fa-r-project{--fa:\"\\f4f7\"}.fa-delicious{--fa:\"\\f1a5\"}.fa-freebsd{--fa:\"\\f3a4\"}.fa-vuejs{--fa:\"\\f41f\"}.fa-accusoft{--fa:\"\\f369\"}.fa-ioxhost{--fa:\"\\f208\"}.fa-fonticons-fi{--fa:\"\\f3a2\"}.fa-app-store{--fa:\"\\f36f\"}.fa-cc-mastercard{--fa:\"\\f1f1\"}.fa-itunes-note{--fa:\"\\f3b5\"}.fa-golang{--fa:\"\\e40f\"}.fa-kickstarter,.fa-square-kickstarter{--fa:\"\\f3bb\"}.fa-grav{--fa:\"\\f2d6\"}.fa-weibo{--fa:\"\\f18a\"}.fa-uncharted{--fa:\"\\e084\"}.fa-firstdraft{--fa:\"\\f3a1\"}.fa-square-youtube,.fa-youtube-square{--fa:\"\\f431\"}.fa-wikipedia-w{--fa:\"\\f266\"}.fa-rendact,.fa-wpressr{--fa:\"\\f3e4\"}.fa-angellist{--fa:\"\\f209\"}.fa-galactic-republic{--fa:\"\\f50c\"}.fa-nfc-directional{--fa:\"\\e530\"}.fa-skype{--fa:\"\\f17e\"}.fa-joget{--fa:\"\\f3b7\"}.fa-fedora{--fa:\"\\f798\"}.fa-stripe-s{--fa:\"\\f42a\"}.fa-meta{--fa:\"\\e49b\"}.fa-laravel{--fa:\"\\f3bd\"}.fa-hotjar{--fa:\"\\f3b1\"}.fa-bluetooth-b{--fa:\"\\f294\"}.fa-square-letterboxd{--fa:\"\\e62e\"}.fa-sticker-mule{--fa:\"\\f3f7\"}.fa-creative-commons-zero{--fa:\"\\f4f3\"}.fa-hips{--fa:\"\\f452\"}.fa-css{--fa:\"\\e6a2\"}.fa-behance{--fa:\"\\f1b4\"}.fa-reddit{--fa:\"\\f1a1\"}.fa-discord{--fa:\"\\f392\"}.fa-chrome{--fa:\"\\f268\"}.fa-app-store-ios{--fa:\"\\f370\"}.fa-cc-discover{--fa:\"\\f1f2\"}.fa-wpbeginner{--fa:\"\\f297\"}.fa-confluence{--fa:\"\\f78d\"}.fa-shoelace{--fa:\"\\e60c\"}.fa-mdb{--fa:\"\\f8ca\"}.fa-dochub{--fa:\"\\f394\"}.fa-accessible-icon{--fa:\"\\f368\"}.fa-ebay{--fa:\"\\f4f4\"}.fa-amazon{--fa:\"\\f270\"}.fa-unsplash{--fa:\"\\e07c\"}.fa-yarn{--fa:\"\\f7e3\"}.fa-square-steam,.fa-steam-square{--fa:\"\\f1b7\"}.fa-500px{--fa:\"\\f26e\"}.fa-square-vimeo,.fa-vimeo-square{--fa:\"\\f194\"}.fa-asymmetrik{--fa:\"\\f372\"}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:\"\\f2b4\"}.fa-gratipay{--fa:\"\\f184\"}.fa-apple{--fa:\"\\f179\"}.fa-hive{--fa:\"\\e07f\"}.fa-gitkraken{--fa:\"\\f3a6\"}.fa-keybase{--fa:\"\\f4f5\"}.fa-apple-pay{--fa:\"\\f415\"}.fa-padlet{--fa:\"\\e4a0\"}.fa-amazon-pay{--fa:\"\\f42c\"}.fa-github-square,.fa-square-github{--fa:\"\\f092\"}.fa-stumbleupon{--fa:\"\\f1a4\"}.fa-fedex{--fa:\"\\f797\"}.fa-phoenix-framework{--fa:\"\\f3dc\"}.fa-shopify{--fa:\"\\e057\"}.fa-neos{--fa:\"\\f612\"}.fa-square-threads{--fa:\"\\e619\"}.fa-hackerrank{--fa:\"\\f5f7\"}.fa-researchgate{--fa:\"\\f4f8\"}.fa-swift{--fa:\"\\f8e1\"}.fa-angular{--fa:\"\\f420\"}.fa-speakap{--fa:\"\\f3f3\"}.fa-angrycreative{--fa:\"\\f36e\"}.fa-y-combinator{--fa:\"\\f23b\"}.fa-empire{--fa:\"\\f1d1\"}.fa-envira{--fa:\"\\f299\"}.fa-google-scholar{--fa:\"\\e63b\"}.fa-gitlab-square,.fa-square-gitlab{--fa:\"\\e5ae\"}.fa-studiovinari{--fa:\"\\f3f8\"}.fa-pied-piper{--fa:\"\\f2ae\"}.fa-wordpress{--fa:\"\\f19a\"}.fa-product-hunt{--fa:\"\\f288\"}.fa-firefox{--fa:\"\\f269\"}.fa-linode{--fa:\"\\f2b8\"}.fa-goodreads{--fa:\"\\f3a8\"}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:\"\\f264\"}.fa-jsfiddle{--fa:\"\\f1cc\"}.fa-sith{--fa:\"\\f512\"}.fa-themeisle{--fa:\"\\f2b2\"}.fa-page4{--fa:\"\\f3d7\"}.fa-hashnode{--fa:\"\\e499\"}.fa-react{--fa:\"\\f41b\"}.fa-cc-paypal{--fa:\"\\f1f4\"}.fa-squarespace{--fa:\"\\f5be\"}.fa-cc-stripe{--fa:\"\\f1f5\"}.fa-creative-commons-share{--fa:\"\\f4f2\"}.fa-bitcoin{--fa:\"\\f379\"}.fa-keycdn{--fa:\"\\f3ba\"}.fa-opera{--fa:\"\\f26a\"}.fa-itch-io{--fa:\"\\f83a\"}.fa-umbraco{--fa:\"\\f8e8\"}.fa-galactic-senate{--fa:\"\\f50d\"}.fa-ubuntu{--fa:\"\\f7df\"}.fa-draft2digital{--fa:\"\\f396\"}.fa-stripe{--fa:\"\\f429\"}.fa-houzz{--fa:\"\\f27c\"}.fa-gg{--fa:\"\\f260\"}.fa-dhl{--fa:\"\\f790\"}.fa-pinterest-square,.fa-square-pinterest{--fa:\"\\f0d3\"}.fa-xing{--fa:\"\\f168\"}.fa-blackberry{--fa:\"\\f37b\"}.fa-creative-commons-pd{--fa:\"\\f4ec\"}.fa-playstation{--fa:\"\\f3df\"}.fa-quinscape{--fa:\"\\f459\"}.fa-less{--fa:\"\\f41d\"}.fa-blogger-b{--fa:\"\\f37d\"}.fa-opencart{--fa:\"\\f23d\"}.fa-vine{--fa:\"\\f1ca\"}.fa-signal-messenger{--fa:\"\\e663\"}.fa-paypal{--fa:\"\\f1ed\"}.fa-gitlab{--fa:\"\\f296\"}.fa-typo3{--fa:\"\\f42b\"}.fa-reddit-alien{--fa:\"\\f281\"}.fa-yahoo{--fa:\"\\f19e\"}.fa-dailymotion{--fa:\"\\e052\"}.fa-affiliatetheme{--fa:\"\\f36b\"}.fa-pied-piper-pp{--fa:\"\\f1a7\"}.fa-bootstrap{--fa:\"\\f836\"}.fa-odnoklassniki{--fa:\"\\f263\"}.fa-nfc-symbol{--fa:\"\\e531\"}.fa-mintbit{--fa:\"\\e62f\"}.fa-ethereum{--fa:\"\\f42e\"}.fa-speaker-deck{--fa:\"\\f83c\"}.fa-creative-commons-nc-eu{--fa:\"\\f4e9\"}.fa-patreon{--fa:\"\\f3d9\"}.fa-avianex{--fa:\"\\f374\"}.fa-ello{--fa:\"\\f5f1\"}.fa-gofore{--fa:\"\\f3a7\"}.fa-bimobject{--fa:\"\\f378\"}.fa-brave-reverse{--fa:\"\\e63d\"}.fa-facebook-f{--fa:\"\\f39e\"}.fa-google-plus-square,.fa-square-google-plus{--fa:\"\\f0d4\"}.fa-web-awesome{--fa:\"\\e682\"}.fa-mandalorian{--fa:\"\\f50f\"}.fa-first-order-alt{--fa:\"\\f50a\"}.fa-osi{--fa:\"\\f41a\"}.fa-google-wallet{--fa:\"\\f1ee\"}.fa-d-and-d-beyond{--fa:\"\\f6ca\"}.fa-periscope{--fa:\"\\f3da\"}.fa-fulcrum{--fa:\"\\f50b\"}.fa-cloudscale{--fa:\"\\f383\"}.fa-forumbee{--fa:\"\\f211\"}.fa-mizuni{--fa:\"\\f3cc\"}.fa-schlix{--fa:\"\\f3ea\"}.fa-square-xing,.fa-xing-square{--fa:\"\\f169\"}.fa-bandcamp{--fa:\"\\f2d5\"}.fa-wpforms{--fa:\"\\f298\"}.fa-cloudversify{--fa:\"\\f385\"}.fa-usps{--fa:\"\\f7e1\"}.fa-megaport{--fa:\"\\f5a3\"}.fa-magento{--fa:\"\\f3c4\"}.fa-spotify{--fa:\"\\f1bc\"}.fa-optin-monster{--fa:\"\\f23c\"}.fa-fly{--fa:\"\\f417\"}.fa-square-bluesky{--fa:\"\\e6a3\"}.fa-aviato{--fa:\"\\f421\"}.fa-itunes{--fa:\"\\f3b4\"}.fa-cuttlefish{--fa:\"\\f38c\"}.fa-blogger{--fa:\"\\f37c\"}.fa-flickr{--fa:\"\\f16e\"}.fa-viber{--fa:\"\\f409\"}.fa-soundcloud{--fa:\"\\f1be\"}.fa-digg{--fa:\"\\f1a6\"}.fa-tencent-weibo{--fa:\"\\f1d5\"}.fa-letterboxd{--fa:\"\\e62d\"}.fa-symfony{--fa:\"\\f83d\"}.fa-maxcdn{--fa:\"\\f136\"}.fa-etsy{--fa:\"\\f2d7\"}.fa-facebook-messenger{--fa:\"\\f39f\"}.fa-audible{--fa:\"\\f373\"}.fa-think-peaks{--fa:\"\\f731\"}.fa-bilibili{--fa:\"\\e3d9\"}.fa-erlang{--fa:\"\\f39d\"}.fa-x-twitter{--fa:\"\\e61b\"}.fa-cotton-bureau{--fa:\"\\f89e\"}.fa-dashcube{--fa:\"\\f210\"}.fa-42-group,.fa-innosoft{--fa:\"\\e080\"}.fa-stack-exchange{--fa:\"\\f18d\"}.fa-elementor{--fa:\"\\f430\"}.fa-pied-piper-square,.fa-square-pied-piper{--fa:\"\\e01e\"}.fa-creative-commons-nd{--fa:\"\\f4eb\"}.fa-palfed{--fa:\"\\f3d8\"}.fa-superpowers{--fa:\"\\f2dd\"}.fa-resolving{--fa:\"\\f3e7\"}.fa-xbox{--fa:\"\\f412\"}.fa-square-web-awesome-stroke{--fa:\"\\e684\"}.fa-searchengin{--fa:\"\\f3eb\"}.fa-tiktok{--fa:\"\\e07b\"}.fa-facebook-square,.fa-square-facebook{--fa:\"\\f082\"}.fa-renren{--fa:\"\\f18b\"}.fa-linux{--fa:\"\\f17c\"}.fa-glide{--fa:\"\\f2a5\"}.fa-linkedin{--fa:\"\\f08c\"}.fa-hubspot{--fa:\"\\f3b2\"}.fa-deploydog{--fa:\"\\f38e\"}.fa-twitch{--fa:\"\\f1e8\"}.fa-flutter{--fa:\"\\e694\"}.fa-ravelry{--fa:\"\\f2d9\"}.fa-mixer{--fa:\"\\e056\"}.fa-lastfm-square,.fa-square-lastfm{--fa:\"\\f203\"}.fa-vimeo{--fa:\"\\f40a\"}.fa-mendeley{--fa:\"\\f7b3\"}.fa-uniregistry{--fa:\"\\f404\"}.fa-figma{--fa:\"\\f799\"}.fa-creative-commons-remix{--fa:\"\\f4ee\"}.fa-cc-amazon-pay{--fa:\"\\f42d\"}.fa-dropbox{--fa:\"\\f16b\"}.fa-instagram{--fa:\"\\f16d\"}.fa-cmplid{--fa:\"\\e360\"}.fa-upwork{--fa:\"\\e641\"}.fa-facebook{--fa:\"\\f09a\"}.fa-gripfire{--fa:\"\\f3ac\"}.fa-jedi-order{--fa:\"\\f50e\"}.fa-uikit{--fa:\"\\f403\"}.fa-fort-awesome-alt{--fa:\"\\f3a3\"}.fa-phabricator{--fa:\"\\f3db\"}.fa-ussunnah{--fa:\"\\f407\"}.fa-earlybirds{--fa:\"\\f39a\"}.fa-trade-federation{--fa:\"\\f513\"}.fa-autoprefixer{--fa:\"\\f41c\"}.fa-whatsapp{--fa:\"\\f232\"}.fa-square-upwork{--fa:\"\\e67c\"}.fa-slideshare{--fa:\"\\f1e7\"}.fa-google-play{--fa:\"\\f3ab\"}.fa-viadeo{--fa:\"\\f2a9\"}.fa-line{--fa:\"\\f3c0\"}.fa-google-drive{--fa:\"\\f3aa\"}.fa-servicestack{--fa:\"\\f3ec\"}.fa-simplybuilt{--fa:\"\\f215\"}.fa-bitbucket{--fa:\"\\f171\"}.fa-imdb{--fa:\"\\f2d8\"}.fa-deezer{--fa:\"\\e077\"}.fa-raspberry-pi{--fa:\"\\f7bb\"}.fa-jira{--fa:\"\\f7b1\"}.fa-docker{--fa:\"\\f395\"}.fa-screenpal{--fa:\"\\e570\"}.fa-bluetooth{--fa:\"\\f293\"}.fa-gitter{--fa:\"\\f426\"}.fa-d-and-d{--fa:\"\\f38d\"}.fa-microblog{--fa:\"\\e01a\"}.fa-cc-diners-club{--fa:\"\\f24c\"}.fa-gg-circle{--fa:\"\\f261\"}.fa-pied-piper-hat{--fa:\"\\f4e5\"}.fa-kickstarter-k{--fa:\"\\f3bc\"}.fa-yandex{--fa:\"\\f413\"}.fa-readme{--fa:\"\\f4d5\"}.fa-html5{--fa:\"\\f13b\"}.fa-sellsy{--fa:\"\\f213\"}.fa-square-web-awesome{--fa:\"\\e683\"}.fa-sass{--fa:\"\\f41e\"}.fa-wirsindhandwerk,.fa-wsh{--fa:\"\\e2d0\"}.fa-buromobelexperte{--fa:\"\\f37f\"}.fa-salesforce{--fa:\"\\f83b\"}.fa-octopus-deploy{--fa:\"\\e082\"}.fa-medapps{--fa:\"\\f3c6\"}.fa-ns8{--fa:\"\\f3d5\"}.fa-pinterest-p{--fa:\"\\f231\"}.fa-apper{--fa:\"\\f371\"}.fa-fort-awesome{--fa:\"\\f286\"}.fa-waze{--fa:\"\\f83f\"}.fa-bluesky{--fa:\"\\e671\"}.fa-cc-jcb{--fa:\"\\f24b\"}.fa-snapchat,.fa-snapchat-ghost{--fa:\"\\f2ab\"}.fa-fantasy-flight-games{--fa:\"\\f6dc\"}.fa-rust{--fa:\"\\e07a\"}.fa-wix{--fa:\"\\f5cf\"}.fa-behance-square,.fa-square-behance{--fa:\"\\f1b5\"}.fa-supple{--fa:\"\\f3f9\"}.fa-webflow{--fa:\"\\e65c\"}.fa-rebel{--fa:\"\\f1d0\"}.fa-css3{--fa:\"\\f13c\"}.fa-staylinked{--fa:\"\\f3f5\"}.fa-kaggle{--fa:\"\\f5fa\"}.fa-space-awesome{--fa:\"\\e5ac\"}.fa-deviantart{--fa:\"\\f1bd\"}.fa-cpanel{--fa:\"\\f388\"}.fa-goodreads-g{--fa:\"\\f3a9\"}.fa-git-square,.fa-square-git{--fa:\"\\f1d2\"}.fa-square-tumblr,.fa-tumblr-square{--fa:\"\\f174\"}.fa-trello{--fa:\"\\f181\"}.fa-creative-commons-nc-jp{--fa:\"\\f4ea\"}.fa-get-pocket{--fa:\"\\f265\"}.fa-perbyte{--fa:\"\\e083\"}.fa-grunt{--fa:\"\\f3ad\"}.fa-weebly{--fa:\"\\f5cc\"}.fa-connectdevelop{--fa:\"\\f20e\"}.fa-leanpub{--fa:\"\\f212\"}.fa-black-tie{--fa:\"\\f27e\"}.fa-themeco{--fa:\"\\f5c6\"}.fa-python{--fa:\"\\f3e2\"}.fa-android{--fa:\"\\f17b\"}.fa-bots{--fa:\"\\e340\"}.fa-free-code-camp{--fa:\"\\f2c5\"}.fa-hornbill{--fa:\"\\f592\"}.fa-js{--fa:\"\\f3b8\"}.fa-ideal{--fa:\"\\e013\"}.fa-git{--fa:\"\\f1d3\"}.fa-dev{--fa:\"\\f6cc\"}.fa-sketch{--fa:\"\\f7c6\"}.fa-yandex-international{--fa:\"\\f414\"}.fa-cc-amex{--fa:\"\\f1f3\"}.fa-uber{--fa:\"\\f402\"}.fa-github{--fa:\"\\f09b\"}.fa-php{--fa:\"\\f457\"}.fa-alipay{--fa:\"\\f642\"}.fa-youtube{--fa:\"\\f167\"}.fa-skyatlas{--fa:\"\\f216\"}.fa-firefox-browser{--fa:\"\\e007\"}.fa-replyd{--fa:\"\\f3e6\"}.fa-suse{--fa:\"\\f7d6\"}.fa-jenkins{--fa:\"\\f3b6\"}.fa-twitter{--fa:\"\\f099\"}.fa-rockrms{--fa:\"\\f3e9\"}.fa-pinterest{--fa:\"\\f0d2\"}.fa-buffer{--fa:\"\\f837\"}.fa-npm{--fa:\"\\f3d4\"}.fa-yammer{--fa:\"\\f840\"}.fa-btc{--fa:\"\\f15a\"}.fa-dribbble{--fa:\"\\f17d\"}.fa-stumbleupon-circle{--fa:\"\\f1a3\"}.fa-internet-explorer{--fa:\"\\f26b\"}.fa-stubber{--fa:\"\\e5c7\"}.fa-telegram,.fa-telegram-plane{--fa:\"\\f2c6\"}.fa-old-republic{--fa:\"\\f510\"}.fa-odysee{--fa:\"\\e5c6\"}.fa-square-whatsapp,.fa-whatsapp-square{--fa:\"\\f40c\"}.fa-node-js{--fa:\"\\f3d3\"}.fa-edge-legacy{--fa:\"\\e078\"}.fa-slack,.fa-slack-hash{--fa:\"\\f198\"}.fa-medrt{--fa:\"\\f3c8\"}.fa-usb{--fa:\"\\f287\"}.fa-tumblr{--fa:\"\\f173\"}.fa-vaadin{--fa:\"\\f408\"}.fa-quora{--fa:\"\\f2c4\"}.fa-square-x-twitter{--fa:\"\\e61a\"}.fa-reacteurope{--fa:\"\\f75d\"}.fa-medium,.fa-medium-m{--fa:\"\\f23a\"}.fa-amilia{--fa:\"\\f36d\"}.fa-mixcloud{--fa:\"\\f289\"}.fa-flipboard{--fa:\"\\f44d\"}.fa-viacoin{--fa:\"\\f237\"}.fa-critical-role{--fa:\"\\f6c9\"}.fa-sitrox{--fa:\"\\e44a\"}.fa-discourse{--fa:\"\\f393\"}.fa-joomla{--fa:\"\\f1aa\"}.fa-mastodon{--fa:\"\\f4f6\"}.fa-airbnb{--fa:\"\\f834\"}.fa-wolf-pack-battalion{--fa:\"\\f514\"}.fa-buy-n-large{--fa:\"\\f8a6\"}.fa-gulp{--fa:\"\\f3ae\"}.fa-creative-commons-sampling-plus{--fa:\"\\f4f1\"}.fa-strava{--fa:\"\\f428\"}.fa-ember{--fa:\"\\f423\"}.fa-canadian-maple-leaf{--fa:\"\\f785\"}.fa-teamspeak{--fa:\"\\f4f9\"}.fa-pushed{--fa:\"\\f3e1\"}.fa-wordpress-simple{--fa:\"\\f411\"}.fa-nutritionix{--fa:\"\\f3d6\"}.fa-wodu{--fa:\"\\e088\"}.fa-google-pay{--fa:\"\\e079\"}.fa-intercom{--fa:\"\\f7af\"}.fa-zhihu{--fa:\"\\f63f\"}.fa-korvue{--fa:\"\\f42f\"}.fa-pix{--fa:\"\\e43a\"}.fa-steam-symbol{--fa:\"\\f3f6\"}:host,:root{--fa-font-regular:normal 400 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:\"Font Awesome 6 Free\";--fa-font-solid:normal 900 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa-solid,.fas{font-weight:900}@font-face{font-family:\"Font Awesome 5 Brands\";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format(\"woff2\"),url(../webfonts/fa-v4compatibility.ttf) format(\"truetype\");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}.button{display:flex;height:50px;padding:0;background:#3e7671;border:none;outline:none;border-radius:5px;overflow:hidden;font-size:16px;font-weight:500;cursor:pointer;min-width:220px;max-width:220px}.button:hover{background:#008168}.button:active{background:#3e7671}.button-text{display:block;margin:auto;padding:0 10px;color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:50%;text-transform:capitalize}.button-icon{margin:auto;padding:10px;font-size:20px;color:#ffffff}.button-profile{margin:auto}.button-profile svg{display:flex;margin-left:4px;background-color:#fff;border-radius:4px}.profile-image{display:flex;margin-left:4px;width:40px;height:40px;border-radius:4px;background-color:#fff}.button-text-full-width{width:auto!important}.button-link{text-decoration:none!important}.dropdown{position:relative;display:inline-block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:180px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1;border-radius:5px;text-align:left!important}.dropdown-content-link a{color:#71797E;padding:16px 20px;text-decoration:none;display:block;cursor:pointer;font-size:1rem!important}.dropdown-content-link a:hover{background-color:#f1f1f1;color:#000;opacity:0.7}.dropdown:hover .dropdown-content{display:block}.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4);text-align:center}.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:40%}.modal-body{max-height:50vh;overflow-y:auto}.close{color:#aaaaaa;float:right;font-size:28px;font-weight:bold}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer}.modal-app{background-color:#c3e9bc;padding:15px;margin:10px;border-radius:5px}.external-app-link{text-decoration:none;color:#000}.gray-text{color:#606060}.green-text{color:#3e7671}#countdown{position:relative;margin:auto;margin-top:30px;height:40px;width:40px;text-align:center}#countdown-number{color:#2e2e2e;display:inline-block;line-height:40px}#countdown svg{position:absolute;top:0;right:0;width:40px;height:40px;transform:rotateY(-180deg) rotateZ(-90deg)}#countdown svg circle{stroke-dasharray:113px;stroke-dashoffset:0px;stroke-linecap:round;stroke-width:4px;stroke:#008168;fill:none;animation:countdown 6s linear infinite forwards}@keyframes countdown{from{stroke-dashoffset:0px}to{stroke-dashoffset:113px}}.lds-ring{color:#fff}.lds-ring{display:flex;justify-content:center;align-items:center;margin:auto;position:relative}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:25px;height:25px;margin:3px;border:2px solid currentColor;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:currentColor transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.dropdown-content .dropdown-user-profile{padding:12px 10px 8px 18px;border-bottom:1px solid #aaaaaa}.dropdown-content .dropdown-user-profile .username{font-size:16px;color:#2e2e2e;text-transform:capitalize}.dropdown-content .dropdown-user-profile .first-last-name{font-size:13px;color:#606060}.menu-bar-icons{color:#008168;display:inline-block;margin-right:8px;font-size:18px}.other-links-list{padding:14px;background-color:#f1f1f1;margin-bottom:8px;text-align:start;border-radius:5px}.tab-list{margin:0px 40px;padding:0;list-style:none;display:flex;position:relative;width:85%;border-bottom:1px solid #aaa}.tab-item{flex:1;text-align:center;transition:.3s;opacity:0.5}.tab-toggle{display:none}.tab-content{display:none}.tab-toggle:nth-child(1):checked~.tab-list .tab-item:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-list .tab-item:nth-child(2){opacity:1;color:#008168;border-bottom:2px solid #008168}.tab-toggle:nth-child(2):checked~.tab-list::before{transform:translateX(100%)}.tab-toggle:nth-child(3):checked~.tab-list::before{transform:translateX(200%)}.tab-toggle:nth-child(1):checked~.tab-container .tab-content:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-container .tab-content:nth-child(2){display:block}.tab-trigger{display:block;padding:10px 0}.tab-container{padding:15px 30px}.grid-view-menu{display:grid;gap:4px;grid-template-columns:repeat(3, 1fr);align-content:start;padding:8px;max-height:230px;overflow-y:auto}.grid-view-link{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:75px;height:70px;padding:6px;text-decoration:none;font-size:13px;color:#128f8b;text-align:center;transition:transform 0.2s ease, background-color 0.1s ease;position:relative;z-index:1;border-radius:3px;cursor:pointer}.grid-view-link:hover{background-color:#eeeeee;transform:scale(1.1);z-index:5}.grid-view-link-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#71797e;width:100%}.grid-view-link:hover .grid-view-link-text{white-space:pre-wrap;overflow:visible;text-overflow:unset}.grid-view-link i{transition:transform 0.2s ease}.grid-view-link:hover i{transform:scale(1.1)}hr.solid{border-top:1px solid #bbb;margin:2px 0}.restricted-overlay{position:fixed;inset:0;background:linear-gradient(135deg, #0f3d3e, #128f8b);display:flex;justify-content:center;align-items:center;padding:20px;z-index:9999999;font-family:\"Segoe UI\", sans-serif}.restricted-card{background:#ffffff;border-radius:10px;padding:50px;max-width:540px;width:100%;text-align:center;box-shadow:0 25px 70px rgba(0, 0, 0, 0.25);animation:fadeInUp 0.3s ease}.restricted-icon{font-size:48px;color:#128f8b;margin-bottom:30px}.restricted-card h2{margin-bottom:10px;color:#128f8b}.restricted-message{color:#555;font-size:16px;margin-bottom:30px;line-height:1.5}.restricted-links h4{margin-bottom:20px;color:#128f8b}.link-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:20px;margin-bottom:25px}.restricted-link{background:#ecf2f2;padding:10px;border-radius:10px;text-decoration:none;color:#128f8b;font-size:13px;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all 0.2s ease}.restricted-link:hover{background:#128f8b;color:#fff}.restricted-actions{display:flex;justify-content:center;gap:15px}.btn-primary{background:#128f8b;color:#fff;padding:10px 20px;border-radius:8px;text-decoration:none;font-weight:500;transition:0.2s}.btn-primary:hover{background:#0f6e6b}.btn-secondary{background:transparent;border:2px solid #128f8b;color:#128f8b;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-danger{background:transparent;border:2px solid #dc3545;color:#dc3545;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-secondary:hover{background:#128f8b;color:#fff}@keyframes fadeInUp{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}";
4013
- const DashButtonStyle0 = dashButtonCss;
4014
-
4015
- const DashButtonComponent = /*@__PURE__*/ proxyCustomElement(class DashButtonComponent extends HTMLElement {
4016
- constructor() {
4017
- super();
4018
- this.__registerHost();
4019
- this.__attachShadow();
4020
- this.showPostLoginText = false;
4021
- this.silentCheckSso = false;
4022
- this.redirectUri = undefined;
4023
- this.authMethod = "check-sso";
4024
- this.portalApiUrl = "";
4025
- this.plmUrl = "https://productlicensemanager-zdzw.cloud.zdzw-project.com";
4026
- this.showUnauthorizedModal = false;
4027
- this.primaryColor = "";
4028
- this.accentColor = "";
4029
- this.keycloak = null;
4030
- this.isAuth = false;
4031
- this.givenUserName = "";
4032
- this.silentCheckSsoRedirectUri = window.location.origin + '/assets/verificar-sso.html';
4033
- this.appList = [];
4034
- this.avatarSvg = jdenticonModule.toSvg("init-avatar", 40);
4035
- this.isLoading = false;
4036
- this.config = undefined;
4037
- this.localMenuLinks = undefined;
4038
- this.organizationUrl = undefined;
4039
- this.isRestricted = false;
4040
- }
4041
- async componentWillLoad() {
4042
- var _a, _b, _c, _d;
4043
- // Fetch config from API
4044
- this.config = await configService.fetchConfig(this.portalApiUrl);
4045
- console.log(this.config);
4046
- if (!this.config)
4047
- return; // prevent Keycloak init if fetch failed
4048
- // render will show spinner
4049
- if ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.loading) === null || _b === void 0 ? void 0 : _b.isLoading) {
4050
- this.isLoading = true;
4051
- setTimeout(() => {
4052
- this.isLoading = false;
4053
- }, (_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.loading) === null || _d === void 0 ? void 0 : _d.duration);
4054
- }
4055
- // Initialize Keycloak
4056
- this.keycloak = new Keycloak({
4057
- url: this.config.keycloak.url,
4058
- realm: this.config.keycloak.realm,
4059
- clientId: this.config.keycloak.clientId
4060
- });
4061
- //
4062
- // Init Keycloak
4063
- //
4064
- this.initKeycloak().then(() => {
4065
- // Check if the user is authenticated
4066
- if (this.isAuth) {
4067
- // Get organization URL and load local menu items
4068
- // If the user has not set an organization URL, they can configure it in the Portal profile page
4069
- this.loadOrganizationUrlAndLinks();
4070
- // Validate user access permission for the application.
4071
- // If unauthorized, display the restricted access modal.
4072
- this.validateAppAccessByUrl();
4073
- }
4074
- });
4075
- }
4076
- async initKeycloak() {
4077
- // Remove the initiation time permission localstorage object
4078
- localStorage.removeItem("ZDZW_app_permission");
4079
- await this.keycloak.init({
4080
- onLoad: this.authMethod,
4081
- checkLoginIframe: false,
4082
- silentCheckSsoRedirectUri: this.silentCheckSso ? this.silentCheckSsoRedirectUri : '',
4083
- }).then(res => {
4084
- if (res) {
4085
- this.isAuth = true;
4086
- localStorage.setItem("keycloak", JSON.stringify(this.keycloak));
4087
- // document.cookie = "DASH_BTN=" + JSON.parse(localStorage.getItem('keycloak')).token;
4088
- document.cookie = this.config.cookieName + "=" + JSON.parse(localStorage.getItem('keycloak')).token;
4089
- // Set userName
4090
- this.givenUserName = JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.preferred_username;
4091
- // Set user avatar
4092
- this.avatarSvg = jdenticonModule.toSvg(JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.sub, 40);
4093
- }
4094
- });
4095
- }
4096
- async loadOrganizationUrlAndLinks() {
4097
- var _a, _b, _c;
4098
- // Read org URL safely
4099
- try {
4100
- const kc = JSON.parse(localStorage.getItem("keycloak") || "{}");
4101
- this.organizationUrl = ((_a = kc === null || kc === void 0 ? void 0 : kc.idTokenParsed) === null || _a === void 0 ? void 0 : _a.organizationUrl) || null;
4102
- }
4103
- catch (_d) {
4104
- this.organizationUrl = null;
4105
- }
4106
- // If no organization, do nothing
4107
- if (!this.organizationUrl)
4108
- return;
4109
- // If config or menu not ready, skip
4110
- if (!((_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.menu) === null || _c === void 0 ? void 0 : _c.local))
4111
- return;
4112
- // Only load when custom menu is NOT enabled
4113
- if (!this.config.menu.local.enableCustomLocalMenu) {
4114
- try {
4115
- this.localMenuLinks = await menuService.getMenuLinks(this.organizationUrl);
4116
- }
4117
- catch (e) {
4118
- console.error("Failed to load local menu", e);
4119
- this.localMenuLinks = [];
4120
- }
4121
- }
4122
- }
4123
- validateAppAccessByUrl() {
4124
- var _a, _b, _c, _d;
4125
- const currentUrl = window.location.href;
4126
- const currentOrigin = window.location.origin;
4127
- const globalLinks = ((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.global) === null || _c === void 0 ? void 0 : _c.links) || [];
4128
- // Check Global Links
4129
- const matchGlobal = globalLinks.some(link => {
4130
- try {
4131
- const linkOrigin = new URL(link.url).origin;
4132
- return currentOrigin === linkOrigin;
4133
- }
4134
- catch (_a) {
4135
- return false;
4136
- }
4137
- });
4138
- // Check Token organizationUrl
4139
- const tokenParsed = (_d = this.keycloak) === null || _d === void 0 ? void 0 : _d.tokenParsed;
4140
- const allowedOrg = tokenParsed === null || tokenParsed === void 0 ? void 0 : tokenParsed.organizationUrl;
4141
- const matchOrganization = allowedOrg && currentUrl.includes(allowedOrg);
4142
- // global and org url validations
4143
- const isAllowed = matchGlobal || matchOrganization;
4144
- this.isRestricted = !isAllowed;
4145
- }
4146
- login() {
4147
- this.keycloak.login();
4148
- }
4149
- logout() {
4150
- localStorage.removeItem("keycloak");
4151
- // document.cookie = "DASH_BTN=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
4152
- document.cookie = this.config.cookieName + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
4153
- this.keycloak.logout();
4154
- }
4155
- showModal() {
4156
- const appModal = this.el.shadowRoot.querySelector('#appListModal');
4157
- appModal.style.display = "block";
4158
- }
4159
- closeModal() {
4160
- const appModal = this.el.shadowRoot.querySelector('#appListModal');
4161
- appModal.style.display = "none";
4162
- }
4163
- render() {
4164
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
4165
- return h("div", { key: 'd186318626a3fbd1d011d3532559901d1c36859e' }, h("div", { key: 'a5887ec423aabb35ca7988169cfa7a9f0bd588e6' }, (() => {
4166
- var _a, _b, _c, _d, _e, _f;
4167
- // GLOBAL LOADING SPINNER
4168
- if (this.isLoading) {
4169
- return (h("a", { id: "login-btn", class: "button button-link" }, h("div", { class: "lds-ring" }, h("div", null), h("div", null), h("div", null), h("div", null))));
4170
- }
4171
- if (this.isRestricted) {
4172
- return (h("div", { class: "restricted-overlay" }, h("div", { class: "restricted-card" }, h("div", { class: "restricted-icon" }, h("i", { class: "fa-solid fa-shield-halved" })), h("h2", null, "Access Restricted"), h("p", { class: "restricted-message" }, "You do not have permission to access this application. Please contact your administrator if you believe this is an error."), ((_d = (_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.global) === null || _c === void 0 ? void 0 : _c.links) === null || _d === void 0 ? void 0 : _d.length) > 0 && (h("div", { class: "restricted-links" }, h("h4", null, "Publicly Available Modules"), h("div", { class: "link-grid" }, this.config.menu.global.links.map(item => (h("a", { href: item.url, target: "_blank", class: "restricted-link" }, h("i", { class: item.icon }), h("span", null, item.name))))))), h("div", { class: "restricted-actions" }, ((_f = (_e = this.config) === null || _e === void 0 ? void 0 : _e.defaultLink) === null || _f === void 0 ? void 0 : _f.url) && (h("a", { href: this.config.defaultLink.url, target: "_blank", class: "btn-primary" }, "Go to Portal")), h("button", { class: "btn-danger", onClick: this.logout.bind(this) }, "Logout")))));
4173
- }
4174
- if (this.isAuth && this.showPostLoginText) {
4175
- return (h("a", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, href: this.redirectUri, id: "login-btn", class: "button button-link" }, h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, class: "button-text button-text-full-width" }, "Go to Dashboard")));
4176
- }
4177
- else if (this.isAuth) {
4178
- return (h("div", { id: "profile-btn", class: "dropdown" }, h("button", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, type: "button", class: "button" }, h("span", { class: "button-profile" }, JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.imageUrl ?
4179
- h("img", { class: "profile-image", src: "https://s-damith.github.io/test-avatar/images/e24da9c5-0b1f-46fa-82cd-7c711c77b5c7.png" })
4180
- :
4181
- h("div", { innerHTML: this.avatarSvg })), h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, id: "given-name", class: "button-text" }, this.givenUserName), h("div", { class: "button-icon" }, (this.config.menuViewType == "grid") ? h("i", { class: "fa-solid fa-grip-vertical" }) : h("i", { class: "fa-solid fa-bars" }))), h("div", { class: "dropdown-content" }, h("div", { class: "dropdown-user-profile" }, h("div", { class: "username" }, "@", this.givenUserName), h("div", { class: "first-last-name" }, JSON.parse(localStorage.getItem('keycloak')).idTokenParsed.name)), (this.config.menuViewType == "grid") ? (h("div", null, h("div", { class: "grid-view-menu" }, this.config.menu.global.links.map(item => {
4182
- return (h("a", { href: item.url, target: '_blank', class: "grid-view-link" }, h("i", { class: item.icon + " fa-2x" }), h("div", { class: "grid-view-link-text" }, item.name)));
4183
- })), this.config.menu.global.links.length != 0 && h("hr", { class: "solid" }), h("div", { class: "grid-view-menu", style: this.config.menu.global.links.length == 0 && { "margin-bottom": "12px" } }, h("a", { onClick: this.showModal.bind(this), class: "grid-view-link" }, h("i", { class: "fa-regular fa-window-restore fa-2x" }), h("div", { class: "grid-view-link-text" }, "Modules")), h("a", { href: this.config.defaultLink.url, target: '_blank', class: "grid-view-link" }, h("i", { class: "fa-solid fa-globe fa-2x" }), h("div", { class: "grid-view-link-text" }, this.config.defaultLink.name)), h("a", { onClick: this.logout.bind(this), class: "grid-view-link" }, h("i", { class: "fa-solid fa-right-from-bracket fa-2x" }), h("div", { class: "grid-view-link-text" }, "Logout"))))) : (
4184
- // List View
4185
- h("div", { class: "dropdown-content-link" }, this.config.menu.global.links.map(item => {
4186
- return (h("a", { href: item.url, target: '_blank', id: "applications-btn" }, h("i", { class: item.icon + " menu-bar-icons" }), item.name));
4187
- }), h("a", { onClick: this.showModal.bind(this), id: "applications-btn" }, h("i", { class: "fa-regular fa-window-restore menu-bar-icons" }), "Modules"), h("a", { href: this.config.defaultLink.url, target: '_blank', id: "applications-btn" }, h("i", { class: "fa-solid fa-globe menu-bar-icons" }), this.config.defaultLink.name), h("a", { onClick: this.logout.bind(this), id: "logout-btn" }, h("i", { class: "fa-solid fa-right-from-bracket menu-bar-icons" }), "Logout"))))));
4188
- }
4189
- else {
4190
- return (h("button", { style: { background: this.primaryColor != undefined ? this.primaryColor : "" }, onClick: this.login.bind(this), id: "login-btn", type: "button", class: "button" }, h("span", { style: { color: this.accentColor != undefined ? this.accentColor : "" }, class: "button-text" }, "Login")));
4191
- }
4192
- })()), h("div", { key: '1ad6675f4e190df28410c54f7ad9f097578e0403', id: "appListModal", class: "modal" }, h("div", { key: '655f51c1d18372eca86610750d1ac3c8e1eeeefa', class: "modal-content" }, h("span", { key: 'bb850ddc02afdbbc04b5fbc6258d6ab2b1e92bfb', onClick: this.closeModal.bind(this), class: "close" }, "\u00D7"), h("div", { key: '4fdec67f888e554e1c8a3328ae2b55fb1a0fea4d', class: "box" }, h("input", { type: "radio", class: "tab-toggle", name: "tab-toggle", id: "tab1", checked: true }), h("ul", { key: '4317ec4e90f682b549aea49971d12426aaa5c0ef', class: "tab-list" }, h("li", { class: "tab-item" }, h("label", { class: "tab-trigger", htmlFor: "tab1" }, h("i", { class: "fa-solid fa-table-list menu-bar-icons" }), " ", this.config.menu.local.name))), h("div", { key: '8f1b8e0ec034d45a9c04776b90afcbd3cd9fea3e', class: "tab-container" }, h("div", { key: 'e59e81838b0c2fa419314503ab0c2d56143496cb', class: "tab-content" }, h("div", { key: 'f393c5497bfeddae25469d2d4475f9aacdf13629', class: "modal-body" }, !((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.local) === null || _c === void 0 ? void 0 : _c.enableCustomLocalMenu) ? (
4193
- // <div>{this.localMenuLinks}</div>
4194
- (_d = this.localMenuLinks) === null || _d === void 0 ? void 0 : _d.map((app, index) => {
4195
- const isDisabled = !app.url;
4196
- return (h("a", { key: index, class: "external-app-link", href: isDisabled ? undefined : app.url, target: isDisabled ? undefined : "_blank", rel: isDisabled ? undefined : "noopener noreferrer", onClick: isDisabled ? (e) => e.preventDefault() : undefined }, h("div", { class: "modal-app" }, h("div", null, app.name))));
4197
- })) : ((_e = this.config.menu.local.links) === null || _e === void 0 ? void 0 : _e.map((app, index) => (h("a", { key: index, class: "external-app-link", target: "_blank", rel: "noopener noreferrer", href: app.url }, h("div", { class: "modal-app" }, h("div", null, app.name)))))), !this.organizationUrl ? (h("div", null, h("h3", { class: "gray-text" }, "Organization Domain URL not set"), h("p", { class: "gray-text" }, "Please set your Organization Domain URL on the Portal profile page."))) : (((!((_h = (_g = (_f = this.config) === null || _f === void 0 ? void 0 : _f.menu) === null || _g === void 0 ? void 0 : _g.local) === null || _h === void 0 ? void 0 : _h.enableCustomLocalMenu) &&
4198
- ((_k = (_j = this.localMenuLinks) === null || _j === void 0 ? void 0 : _j.length) !== null && _k !== void 0 ? _k : 0) === 0) ||
4199
- (((_o = (_m = (_l = this.config) === null || _l === void 0 ? void 0 : _l.menu) === null || _m === void 0 ? void 0 : _m.local) === null || _o === void 0 ? void 0 : _o.enableCustomLocalMenu) &&
4200
- ((_t = (_s = (_r = (_q = (_p = this.config) === null || _p === void 0 ? void 0 : _p.menu) === null || _q === void 0 ? void 0 : _q.local) === null || _r === void 0 ? void 0 : _r.links) === null || _s === void 0 ? void 0 : _s.length) !== null && _t !== void 0 ? _t : 0) === 0)) && (h("div", null, h("h3", { class: "gray-text" }, "No installed ", ((_w = (_v = (_u = this.config) === null || _u === void 0 ? void 0 : _u.menu) === null || _v === void 0 ? void 0 : _v.local) === null || _w === void 0 ? void 0 : _w.name) || "menu", " found."), h("p", { class: "gray-text" }, "Please contact administration.")))))))))), h("div", { key: 'c47c1a2e57cbd3d42fcb19d559343a7104e092c0', id: "appPermissionErrorModal", class: "modal" }, h("div", { key: 'cd8a0b1837afc3089bda1bd4d9e7ec0c2a7c3f45', class: "modal-content" }, h("img", { key: 'e21aa2b61cbedff394e4cbbc6993fd06b3c3906e', src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGD0lEQVR4nO2cbU8TWRTH/W5WEAmF4nNiieFFoeBjYhQUWzUWYkpbDfGFCR9CoolvQF9aWgG3kMCG8LACC1ikuCuUh7bH/M/MmW131S2ZqTDjPcmkdub2tvPj3HP/55yJR44oU6ZMmTJlyg7YOsL9pI7+shkogGFzDqMAhhVAOsiQozwwrACS8sCwfXd+tYTDCiApDwwf/FJUSzisAJKjNhFlPzYF0KQpgCZNATRpCqBJUwBNmgJo0hRAk6YAmjQF0KkAs4uLtPz8OU2HQpRqaaFkQwPFq6v5SHo8fA7XVgYGKLu0dGC/81ABLORylB4cpInLl+nt0aP7OiauXKH00BAV8vlfE2AmkaCxpiYDSKK6mqaammjx+nX6FAzS348e0VYkwgf+jXO4Nun18lj53PuLF2kjmfx1AOa3t2mmt9cAkDxxghauXaPN3l7KxmJlHRgLmKNutzHPTCTCczsa4G4mQ6nWVr7h4WPHaL6trQTc+r17NOf30/iZMzTmdtNwVRWPA2Scm/H56FMgQNlolMfDO/9ob+cxmDPl99PuxoYzAe5mMrzcxOvWAALgolFauXmTxurry45/gPvnjRsG+LW7d3lOWdKVhHggAPPb24bnvW9ooL96evjGP4dC9NvJkwaY0fPnaa6vjzLJJG19+ED5bJY/u5NOUyYep/lnz2jk3Ll/4p/Hw/B4ru5unls8Mb+z4xyAM3rMg5cIvHRXFyVqavg8oKy+elXWjooxqy9f0luXy5gTm4xAFE+cjcWcATCTSGgxr6rKWLaAF9fj1u+BAOW2tsqeL7+7S5OdnRq8mhpaf/CA5xSI8EiJiRsjI/YGWMjlDKmCDUOWrXje3NOnRIWCaXh45biqL+f59nYjHlqtE38qwPTgoLHMeLeNRo2YB8+zEp7ExK1olI+Rujo+t/b6tX0BTugZBnQebha7rcQ8K5Ytw9O9WWKi7M7QiZKx2BJgdnHRyDDE+0SqYMOwEt7k7dvaxqJLHHwXvpMzFpeLtpeX7QdwZWCAbwjpmYhkkSrlxqVy4WEc4q1IHBbbsRhNXrjA71devLAfwOlQiH88lhJuBhkGbxx9fZbDE4NO5LTO5+OxCB14P93dbT+AKZ9P84ZgkG8GqRjeQ9ZUAh4MYhvXxs+e5fHwRBbWra32A5j0ePjHf9H1mST+2YWFisCDba+u8vV3tbWGNuT3jY32AxjXS06QFLgZKUH9aPct7O3RVFfXf+BlHj6kZG2tBq+j47tpGs5LoYKrNpGI9v74cfsDHNazg+/dvFl4sNzmprHz2x5g8l9LWMTuzsePli7bYkMBgqVMfb39l3CqpeXbm0g8XhF439xEgkGjOmN7GTOjA4XU2Be8zs6y4MFmnzzRpJLfXypjenrsK6Qnvd4SSQGxCyFtNbxiIb1+/74mpL1e+wrp7NISp1ElqZwuZZB2WQkPZqRyevz7Eg5zCc22qVxxMUGWMRL94sTfKnjYfd+dPq15261bpcWEq1fJvuWsoSEt/3W7tRZlNMolJylxWQEPJTGRP6lTpwz5YpSz3ryxcUE1nzcaSeieFTeArIKH3Fq8GSX9koJqc7O9C6owNL0lO5CKsZTfzS7bqTt3+LPxornxKu2Cz6Oj5IymUkTLCOB54iWAKOIaMRE7JXbS/zOMwYYhMQ9/gOLOnPxBZh8/dlhb06+Vs9B6FIi4cYmJInGgEyGIkbHgc8idkWHgHHRecVsTMU/mwuuY3tYcv3TJWW1NGJrdJY113WtkdxaJU84BqSK7rRFXdc/Dd+w5rbFeDHG8rc2IiQj2UmwQsY1iKFIxlKSg46AjARfnkGGISOZHO6JRnkNiHjzPsY92iGFZoultLNu6OtZs+3m4CCIZnxGpIjGvUsv2UAEUQ9NblrSUoNDDQP4KT+TH2/QWJT/eFgjwNaRnnGHI4x3NzRXZbQ89QBg0GsQ2Wo+SnZR1uFycYbBI3kdv2XEAiw35KqQMGkDoYaCeaDzi29jIuziuYYyVua1jANrFFECTpgCaNAXQpCmAJk0BNGkKoElTACsNUB39ZTFQAMMW/78xypQpU6ZMmbIjP9e+AkAlsBlIjsPOAAAAAElFTkSuQmCC" }), h("h2", { key: '0ea76a87518b2a0c2a171bc0f40cb4767f6683e9', class: "green-text margin-b" }, "You don't have permission to access this application."), h("h3", { key: '1dc9d8f8f2ef3a34bf8cb887679c574a59fe5a75', class: "green-text" }, "Please contact the administration."), (this.config.defaultLink.url && this.showUnauthorizedModal) ?
4201
- h("div", null, h("h4", { class: "gray-text" }, "You will be automatically redirected to the portal."), h("div", { id: "countdown" }, h("div", { id: "countdown-number" }), h("svg", null, h("circle", { r: "18", cx: "20", cy: "20" }))))
4202
- : h("div", null))));
4203
- }
4204
- get el() { return this; }
4205
- static get style() { return DashButtonStyle0; }
4206
- }, [1, "dash-button", {
4207
- "showPostLoginText": [4, "show-post-login-text"],
4208
- "silentCheckSso": [4, "silent-check-sso"],
4209
- "redirectUri": [1, "redirect-uri"],
4210
- "authMethod": [1, "auth-method"],
4211
- "portalApiUrl": [1, "portal-api-url"],
4212
- "plmUrl": [1, "plm-url"],
4213
- "showUnauthorizedModal": [4, "show-unauthorized-modal"],
4214
- "primaryColor": [1, "primary-color"],
4215
- "accentColor": [1, "accent-color"],
4216
- "keycloak": [32],
4217
- "isAuth": [32],
4218
- "givenUserName": [32],
4219
- "silentCheckSsoRedirectUri": [32],
4220
- "appList": [32],
4221
- "avatarSvg": [32],
4222
- "isLoading": [32],
4223
- "config": [32],
4224
- "localMenuLinks": [32],
4225
- "organizationUrl": [32],
4226
- "isRestricted": [32]
4227
- }]);
4228
- function defineCustomElement$1() {
4229
- if (typeof customElements === "undefined") {
4230
- return;
4231
- }
4232
- const components = ["dash-button"];
4233
- components.forEach(tagName => { switch (tagName) {
4234
- case "dash-button":
4235
- if (!customElements.get(tagName)) {
4236
- customElements.define(tagName, DashButtonComponent);
4237
- }
4238
- break;
4239
- } });
4240
- }
4241
-
4242
- const DashButton = DashButtonComponent;
4243
- const defineCustomElement = defineCustomElement$1;
4244
-
4245
- export { DashButton, defineCustomElement };
4246
-
4247
- //# sourceMappingURL=dash-button.js.map
1
+ import{proxyCustomElement as a,HTMLElement as f,h as e,transformTag as t}from"@stencil/core/internal/client";var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}function o(a){if(a.__esModule)return a;var f=a.default;if("function"==typeof f){var e=function a(){return this instanceof a?Reflect.construct(f,arguments,this.constructor):f.apply(this,arguments)};e.prototype=f.prototype}else e={};return Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(a).forEach((function(f){var t=Object.getOwnPropertyDescriptor(a,f);Object.defineProperty(e,f,t.get?t:{enumerable:!0,get:function(){return a[f]}})})),e}var n,s,l,c,d={},u=i(function(){if(n)return d;n=1,d.byteLength=function(a){var f=i(a),e=f[1];return 3*(f[0]+e)/4-e},d.toByteArray=function(a){var t,r,o=i(a),n=o[0],s=o[1],l=new e(function(a,f,e){return 3*(f+e)/4-e}(0,n,s)),c=0,d=s>0?n-4:n;for(r=0;r<d;r+=4)t=f[a.charCodeAt(r)]<<18|f[a.charCodeAt(r+1)]<<12|f[a.charCodeAt(r+2)]<<6|f[a.charCodeAt(r+3)],l[c++]=t>>16&255,l[c++]=t>>8&255,l[c++]=255&t;return 2===s&&(t=f[a.charCodeAt(r)]<<2|f[a.charCodeAt(r+1)]>>4,l[c++]=255&t),1===s&&(t=f[a.charCodeAt(r)]<<10|f[a.charCodeAt(r+1)]<<4|f[a.charCodeAt(r+2)]>>2,l[c++]=t>>8&255,l[c++]=255&t),l},d.fromByteArray=function(f){for(var e,t=f.length,r=t%3,i=[],o=16383,n=0,l=t-r;n<l;n+=o)i.push(s(f,n,n+o>l?l:n+o));return 1===r?i.push(a[(e=f[t-1])>>2]+a[e<<4&63]+"=="):2===r&&i.push(a[(e=(f[t-2]<<8)+f[t-1])>>10]+a[e>>4&63]+a[e<<2&63]+"="),i.join("")};for(var a=[],f=[],e="undefined"!=typeof Uint8Array?Uint8Array:Array,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=0;r<64;++r)a[r]=t[r],f[t.charCodeAt(r)]=r;function i(a){var f=a.length;if(f%4>0)throw Error("Invalid string. Length must be a multiple of 4");var e=a.indexOf("=");return-1===e&&(e=f),[e,e===f?0:4-e%4]}function o(f){return a[f>>18&63]+a[f>>12&63]+a[f>>6&63]+a[63&f]}function s(a,f,e){for(var t=[],r=f;r<e;r+=3)t.push(o((a[r]<<16&16711680)+(a[r+1]<<8&65280)+(255&a[r+2])));return t.join("")}return f[45]=62,f[95]=63,d}()),h={exports:{}},p=o(Object.freeze({__proto__:null,default:{}})),m=(s||(s=1,function(a){!function(){var f="input is invalid type",e="object"==typeof window,t=e?window:{};t.JS_SHA256_NO_WINDOW&&(e=!1);var i=!e&&"object"==typeof self,o=!t.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;o?t=r:i&&(t=self);var n=!t.JS_SHA256_NO_COMMON_JS&&a.exports,s=!t.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,l="0123456789abcdef".split(""),c=[-2147483648,8388608,32768,128],d=[24,16,8,0],u=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],h=["hex","array","digest","arrayBuffer"],m=[];!t.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)}),!s||!t.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(a){return"object"==typeof a&&a.buffer&&a.buffer.constructor===ArrayBuffer});var b=function(a,f){return function(e){return new y(f,!0).update(e)[a]()}},g=function(a){var f=b("hex",a);o&&(f=w(f,a)),f.create=function(){return new y(a)},f.update=function(a){return f.create().update(a)};for(var e=0;e<h.length;++e){var t=h[e];f[t]=b(t,a)}return f},w=function(a,e){var r,i=p,o=p.Buffer,n=e?"sha224":"sha256";return r=o.from&&!t.JS_SHA256_NO_BUFFER_FROM?o.from:function(a){return new o(a)},function(e){if("string"==typeof e)return i.createHash(n).update(e,"utf8").digest("hex");if(null==e)throw Error(f);return e.constructor===ArrayBuffer&&(e=new Uint8Array(e)),Array.isArray(e)||ArrayBuffer.isView(e)||e.constructor===o?i.createHash(n).update(r(e)).digest("hex"):a(e)}},v=function(a,f){return function(e,t){return new x(e,f,!0).update(t)[a]()}},k=function(a){var f=v("hex",a);f.create=function(f){return new x(f,a)},f.update=function(a,e){return f.create(a).update(e)};for(var e=0;e<h.length;++e){var t=h[e];f[t]=v(t,a)}return f};function y(a,f){f?(m[0]=m[16]=m[1]=m[2]=m[3]=m[4]=m[5]=m[6]=m[7]=m[8]=m[9]=m[10]=m[11]=m[12]=m[13]=m[14]=m[15]=0,this.blocks=m):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],a?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=a}function x(a,e,t){var r,i=typeof a;if("string"===i){var o,n=[],l=a.length,c=0;for(r=0;r<l;++r)(o=a.charCodeAt(r))<128?n[c++]=o:o<2048?(n[c++]=192|o>>6,n[c++]=128|63&o):o<55296||o>=57344?(n[c++]=224|o>>12,n[c++]=128|o>>6&63,n[c++]=128|63&o):(o=65536+((1023&o)<<10|1023&a.charCodeAt(++r)),n[c++]=240|o>>18,n[c++]=128|o>>12&63,n[c++]=128|o>>6&63,n[c++]=128|63&o);a=n}else{if("object"!==i)throw Error(f);if(null===a)throw Error(f);if(s&&a.constructor===ArrayBuffer)a=new Uint8Array(a);else if(!(Array.isArray(a)||s&&ArrayBuffer.isView(a)))throw Error(f)}a.length>64&&(a=new y(e,!0).update(a).array());var d=[],u=[];for(r=0;r<64;++r){var h=a[r]||0;d[r]=92^h,u[r]=54^h}y.call(this,e,t),this.update(u),this.oKeyPad=d,this.inner=!0,this.sharedMemory=t}y.prototype.update=function(a){if(!this.finalized){var e,t=typeof a;if("string"!==t){if("object"!==t)throw Error(f);if(null===a)throw Error(f);if(s&&a.constructor===ArrayBuffer)a=new Uint8Array(a);else if(!(Array.isArray(a)||s&&ArrayBuffer.isView(a)))throw Error(f);e=!0}for(var r,i,o=0,n=a.length,l=this.blocks;o<n;){if(this.hashed&&(this.hashed=!1,l[0]=this.block,l[16]=l[1]=l[2]=l[3]=l[4]=l[5]=l[6]=l[7]=l[8]=l[9]=l[10]=l[11]=l[12]=l[13]=l[14]=l[15]=0),e)for(i=this.start;o<n&&i<64;++o)l[i>>2]|=a[o]<<d[3&i++];else for(i=this.start;o<n&&i<64;++o)(r=a.charCodeAt(o))<128?l[i>>2]|=r<<d[3&i++]:r<2048?(l[i>>2]|=(192|r>>6)<<d[3&i++],l[i>>2]|=(128|63&r)<<d[3&i++]):r<55296||r>=57344?(l[i>>2]|=(224|r>>12)<<d[3&i++],l[i>>2]|=(128|r>>6&63)<<d[3&i++],l[i>>2]|=(128|63&r)<<d[3&i++]):(r=65536+((1023&r)<<10|1023&a.charCodeAt(++o)),l[i>>2]|=(240|r>>18)<<d[3&i++],l[i>>2]|=(128|r>>12&63)<<d[3&i++],l[i>>2]|=(128|r>>6&63)<<d[3&i++],l[i>>2]|=(128|63&r)<<d[3&i++]);this.lastByteIndex=i,this.bytes+=i-this.start,i>=64?(this.block=l[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},y.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var a=this.blocks,f=this.lastByteIndex;a[16]=this.block,a[f>>2]|=c[3&f],this.block=a[16],f>=56&&(this.hashed||this.hash(),a[0]=this.block,a[16]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=a[9]=a[10]=a[11]=a[12]=a[13]=a[14]=a[15]=0),a[14]=this.hBytes<<3|this.bytes>>>29,a[15]=this.bytes<<3,this.hash()}},y.prototype.hash=function(){var a,f,e,t,r,i,o=this.h0,n=this.h1,s=this.h2,l=this.h3,c=this.h4,d=this.h5,h=this.h6,p=this.h7,m=this.blocks;for(a=16;a<64;++a)m[a]=m[a-16]+(((f=m[a-15])>>>7|f<<25)^(f>>>18|f<<14)^f>>>3)+m[a-7]+(((f=m[a-2])>>>17|f<<15)^(f>>>19|f<<13)^f>>>10)|0;for(i=n&s,a=0;a<64;a+=4)this.first?(this.is224?(e=300032,p=(f=m[0]-1413257819)-150054599|0,l=f+24177077|0):(e=704751109,p=(f=m[0]-210244248)-1521486534|0,l=f+143694565|0),this.first=!1):(p=l+(f=p+((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&d^~c&h)+u[a]+m[a])|0,l=f+(((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+((e=o&n)^o&s^i))|0),h=s+(f=h+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+(p&c^~p&d)+u[a+1]+m[a+1])|0,s=f+(((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+((t=l&o)^l&n^e))|0,d=n+(f=d+((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&p^~h&c)+u[a+2]+m[a+2])|0,n=f+(((s>>>2|s<<30)^(s>>>13|s<<19)^(s>>>22|s<<10))+((r=s&l)^s&o^t))|0,c=o+(f=c+((d>>>6|d<<26)^(d>>>11|d<<21)^(d>>>25|d<<7))+(d&h^~d&p)+u[a+3]+m[a+3])|0,o=f+(((n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10))+((i=n&s)^n&l^r))|0,this.chromeBugWorkAround=!0;this.h0=this.h0+o|0,this.h1=this.h1+n|0,this.h2=this.h2+s|0,this.h3=this.h3+l|0,this.h4=this.h4+c|0,this.h5=this.h5+d|0,this.h6=this.h6+h|0,this.h7=this.h7+p|0},y.prototype.toString=y.prototype.hex=function(){this.finalize();var a=this.h0,f=this.h1,e=this.h2,t=this.h3,r=this.h4,i=this.h5,o=this.h6,n=this.h7,s=l[a>>28&15]+l[a>>24&15]+l[a>>20&15]+l[a>>16&15]+l[a>>12&15]+l[a>>8&15]+l[a>>4&15]+l[15&a]+l[f>>28&15]+l[f>>24&15]+l[f>>20&15]+l[f>>16&15]+l[f>>12&15]+l[f>>8&15]+l[f>>4&15]+l[15&f]+l[e>>28&15]+l[e>>24&15]+l[e>>20&15]+l[e>>16&15]+l[e>>12&15]+l[e>>8&15]+l[e>>4&15]+l[15&e]+l[t>>28&15]+l[t>>24&15]+l[t>>20&15]+l[t>>16&15]+l[t>>12&15]+l[t>>8&15]+l[t>>4&15]+l[15&t]+l[r>>28&15]+l[r>>24&15]+l[r>>20&15]+l[r>>16&15]+l[r>>12&15]+l[r>>8&15]+l[r>>4&15]+l[15&r]+l[i>>28&15]+l[i>>24&15]+l[i>>20&15]+l[i>>16&15]+l[i>>12&15]+l[i>>8&15]+l[i>>4&15]+l[15&i]+l[o>>28&15]+l[o>>24&15]+l[o>>20&15]+l[o>>16&15]+l[o>>12&15]+l[o>>8&15]+l[o>>4&15]+l[15&o];return this.is224||(s+=l[n>>28&15]+l[n>>24&15]+l[n>>20&15]+l[n>>16&15]+l[n>>12&15]+l[n>>8&15]+l[n>>4&15]+l[15&n]),s},y.prototype.array=y.prototype.digest=function(){this.finalize();var a=this.h0,f=this.h1,e=this.h2,t=this.h3,r=this.h4,i=this.h5,o=this.h6,n=this.h7,s=[a>>24&255,a>>16&255,a>>8&255,255&a,f>>24&255,f>>16&255,f>>8&255,255&f,e>>24&255,e>>16&255,e>>8&255,255&e,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24&255,r>>16&255,r>>8&255,255&r,i>>24&255,i>>16&255,i>>8&255,255&i,o>>24&255,o>>16&255,o>>8&255,255&o];return this.is224||s.push(n>>24&255,n>>16&255,n>>8&255,255&n),s},y.prototype.arrayBuffer=function(){this.finalize();var a=new ArrayBuffer(this.is224?28:32),f=new DataView(a);return f.setUint32(0,this.h0),f.setUint32(4,this.h1),f.setUint32(8,this.h2),f.setUint32(12,this.h3),f.setUint32(16,this.h4),f.setUint32(20,this.h5),f.setUint32(24,this.h6),this.is224||f.setUint32(28,this.h7),a},(x.prototype=new y).finalize=function(){if(y.prototype.finalize.call(this),this.inner){this.inner=!1;var a=this.array();y.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(a),y.prototype.finalize.call(this)}};var q=g();q.sha256=q,q.sha224=g(!0),q.sha256.hmac=k(),q.sha224.hmac=k(!0),n?a.exports=q:(t.sha256=q.sha256,t.sha224=q.sha224)}()}(h)),h.exports),b=i(m);class g extends Error{}function w(a,f){if("string"!=typeof a)throw new g("Invalid token specified: must be a string");f||(f={});const e=!0===f.header?0:1,t=a.split(".")[e];if("string"!=typeof t)throw new g("Invalid token specified: missing part #"+(e+1));let r;try{r=function(a){let f=a.replace(/-/g,"+").replace(/_/g,"/");switch(f.length%4){case 0:break;case 2:f+="==";break;case 3:f+="=";break;default:throw Error("base64 string is not of the correct length")}try{return function(a){return decodeURIComponent(atob(a).replace(/(.)/g,((a,f)=>{let e=f.charCodeAt(0).toString(16).toUpperCase();return e.length<2&&(e="0"+e),"%"+e})))}(f)}catch(a){return atob(f)}}(t)}catch(a){throw new g(`Invalid token specified: invalid base64 for part #${e+1} (${a.message})`)}try{return JSON.parse(r)}catch(a){throw new g(`Invalid token specified: invalid json for part #${e+1} (${a.message})`)}}if(g.prototype.name="InvalidTokenError","undefined"==typeof Promise)throw Error("Keycloak requires an environment that supports Promises. Make sure that you include the appropriate polyfill.");function v(a){if(!(this instanceof v))throw Error("The 'Keycloak' constructor must be invoked with 'new'.");for(var f,e,t=this,r=[],i={enable:!0,callbackList:[],interval:5},o=document.getElementsByTagName("script"),n=0;n<o.length;n++)-1===o[n].src.indexOf("keycloak.js")&&-1===o[n].src.indexOf("keycloak.min.js")||-1===o[n].src.indexOf("version=")||(t.iframeVersion=o[n].src.substring(o[n].src.indexOf("version=")+8).split("&")[0]);var s=!0,l=L(console.info),c=L(console.warn);function d(a,f){for(var e=function(a){var f=null,e=window.crypto||window.msCrypto;if(e&&e.getRandomValues&&window.Uint8Array)return f=new Uint8Array(a),e.getRandomValues(f),f;f=Array(a);for(var t=0;t<f.length;t++)f[t]=Math.floor(256*Math.random());return f}(a),t=Array(a),r=0;r<a;r++)t[r]=f.charCodeAt(e[r]%f.length);return String.fromCharCode.apply(null,t)}function h(){return void 0!==t.authServerUrl?"/"==t.authServerUrl.charAt(t.authServerUrl.length-1)?t.authServerUrl+"realms/"+encodeURIComponent(t.realm):t.authServerUrl+"/realms/"+encodeURIComponent(t.realm):void 0}function p(a,f){var e=a.code,r=a.error,i=a.prompt,o=(new Date).getTime();if(a.kc_action_status&&t.onActionUpdate&&t.onActionUpdate(a.kc_action_status),r)if("none"!=i){var n={error:r,error_description:a.error_description};t.onAuthError&&t.onAuthError(n),f&&f.setError(n)}else f&&f.setSuccess();else if("standard"!=t.flow&&(a.access_token||a.id_token)&&h(a.access_token,null,a.id_token,!0),"implicit"!=t.flow&&e){var c="code="+e+"&grant_type=authorization_code",d=t.endpoints.token(),u=new XMLHttpRequest;u.open("POST",d,!0),u.setRequestHeader("Content-type","application/x-www-form-urlencoded"),c+="&client_id="+encodeURIComponent(t.clientId),c+="&redirect_uri="+a.redirectUri,a.pkceCodeVerifier&&(c+="&code_verifier="+a.pkceCodeVerifier),u.withCredentials=!0,u.onreadystatechange=function(){if(4==u.readyState)if(200==u.status){var a=JSON.parse(u.responseText);h(a.access_token,a.refresh_token,a.id_token,"standard"===t.flow),z()}else t.onAuthError&&t.onAuthError(),f&&f.setError()},u.send(c)}function h(e,r,i,n){g(e,r,i,o=(o+(new Date).getTime())/2),s&&(t.tokenParsed&&t.tokenParsed.nonce!=a.storedNonce||t.refreshTokenParsed&&t.refreshTokenParsed.nonce!=a.storedNonce||t.idTokenParsed&&t.idTokenParsed.nonce!=a.storedNonce)?(l("[KEYCLOAK] Invalid nonce, clearing token"),t.clearToken(),f&&f.setError()):n&&(t.onAuthSuccess&&t.onAuthSuccess(),f&&f.setSuccess())}}function m(a){return 0==a.status&&a.responseText&&a.responseURL.startsWith("file:")}function g(a,f,e,r){if(t.tokenTimeoutHandle&&(clearTimeout(t.tokenTimeoutHandle),t.tokenTimeoutHandle=null),f?(t.refreshToken=f,t.refreshTokenParsed=w(f)):(delete t.refreshToken,delete t.refreshTokenParsed),e?(t.idToken=e,t.idTokenParsed=w(e)):(delete t.idToken,delete t.idTokenParsed),a){if(t.token=a,t.tokenParsed=w(a),t.sessionId=t.tokenParsed.session_state,t.authenticated=!0,t.subject=t.tokenParsed.sub,t.realmAccess=t.tokenParsed.realm_access,t.resourceAccess=t.tokenParsed.resource_access,r&&(t.timeSkew=Math.floor(r/1e3)-t.tokenParsed.iat),null!=t.timeSkew&&(l("[KEYCLOAK] Estimated time difference between browser and server is "+t.timeSkew+" seconds"),t.onTokenExpired)){var i=1e3*(t.tokenParsed.exp-(new Date).getTime()/1e3+t.timeSkew);l("[KEYCLOAK] Token expires in "+Math.round(i/1e3)+" s"),i<=0?t.onTokenExpired():t.tokenTimeoutHandle=setTimeout(t.onTokenExpired,i)}}else delete t.token,delete t.tokenParsed,delete t.subject,delete t.realmAccess,delete t.resourceAccess,t.authenticated=!1}function k(){var a="0123456789abcdef",f=d(36,a).split("");return f[14]="4",f[19]=a.substr(3&f[19]|8,1),f[8]=f[13]=f[18]=f[23]="-",f.join("")}function y(a){var f=function(a){var f;switch(t.flow){case"standard":f=["code","state","session_state","kc_action_status","iss"];break;case"implicit":f=["access_token","token_type","id_token","state","session_state","expires_in","kc_action_status","iss"];break;case"hybrid":f=["access_token","token_type","id_token","code","state","session_state","expires_in","kc_action_status","iss"]}f.push("error"),f.push("error_description"),f.push("error_uri");var e,r,i=a.indexOf("?"),o=a.indexOf("#");if("query"===t.responseMode&&-1!==i?(e=a.substring(0,i),""!==(r=x(a.substring(i+1,-1!==o?o:a.length),f)).paramsString&&(e+="?"+r.paramsString),-1!==o&&(e+=a.substring(o))):"fragment"===t.responseMode&&-1!==o&&(e=a.substring(0,o),""!==(r=x(a.substring(o+1),f)).paramsString&&(e+="#"+r.paramsString)),r&&r.oauthParams)if("standard"===t.flow||"hybrid"===t.flow){if((r.oauthParams.code||r.oauthParams.error)&&r.oauthParams.state)return r.oauthParams.newUrl=e,r.oauthParams}else if("implicit"===t.flow&&(r.oauthParams.access_token||r.oauthParams.error)&&r.oauthParams.state)return r.oauthParams.newUrl=e,r.oauthParams}(a);if(f){var r=e.get(f.state);return r&&(f.valid=!0,f.redirectUri=r.redirectUri,f.storedNonce=r.nonce,f.prompt=r.prompt,f.pkceCodeVerifier=r.pkceCodeVerifier),f}}function x(a,f){for(var e=a.split("&"),t={paramsString:"",oauthParams:{}},r=0;r<e.length;r++){var i=e[r].indexOf("="),o=e[r].slice(0,i);-1!==f.indexOf(o)?t.oauthParams[o]=e[r].slice(i+1):(""!==t.paramsString&&(t.paramsString+="&"),t.paramsString+=e[r])}return t}function q(){var a={setSuccess:function(f){a.resolve(f)},setError:function(f){a.reject(f)}};return a.promise=new Promise((function(f,e){a.resolve=f,a.reject=e})),a}function A(){var a=q();if(!i.enable)return a.setSuccess(),a.promise;if(i.iframe)return a.setSuccess(),a.promise;var f=document.createElement("iframe");i.iframe=f,f.onload=function(){var f=t.endpoints.authorize();i.iframeOrigin="/"===f.charAt(0)?window.location.origin?window.location.origin:window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""):f.substring(0,f.indexOf("/",8)),a.setSuccess()};var e=t.endpoints.checkSessionIframe();return f.setAttribute("src",e),f.setAttribute("sandbox","allow-storage-access-by-user-activation allow-scripts allow-same-origin"),f.setAttribute("title","keycloak-session-iframe"),f.style.display="none",document.body.appendChild(f),window.addEventListener("message",(function(a){if(a.origin===i.iframeOrigin&&i.iframe.contentWindow===a.source&&("unchanged"==a.data||"changed"==a.data||"error"==a.data)){"unchanged"!=a.data&&t.clearToken();for(var f=i.callbackList.splice(0,i.callbackList.length),e=f.length-1;e>=0;--e){var r=f[e];"error"==a.data?r.setError():r.setSuccess("unchanged"==a.data)}}}),!1),a.promise}function z(){i.enable&&t.token&&setTimeout((function(){j().then((function(a){a&&z()}))}),1e3*i.interval)}function j(){var a=q();if(i.iframe&&i.iframeOrigin){var f=t.clientId+" "+(t.sessionId?t.sessionId:"");i.callbackList.push(a),1==i.callbackList.length&&i.iframe.contentWindow.postMessage(f,i.iframeOrigin)}else a.setSuccess();return a.promise}function C(){var a=q();if(i.enable||t.silentCheckSsoRedirectUri){var f=document.createElement("iframe");f.setAttribute("src",t.endpoints.thirdPartyCookiesIframe()),f.setAttribute("sandbox","allow-storage-access-by-user-activation allow-scripts allow-same-origin"),f.setAttribute("title","keycloak-3p-check-iframe"),f.style.display="none",document.body.appendChild(f);var e=function(r){f.contentWindow===r.source&&("supported"!==r.data&&"unsupported"!==r.data||("unsupported"===r.data&&(c("[KEYCLOAK] Your browser is blocking access to 3rd-party cookies, this means:\n\n - It is not possible to retrieve tokens without redirecting to the Keycloak server (a.k.a. no support for silent authentication).\n - It is not possible to automatically detect changes to the session status (such as the user logging out in another tab).\n\nFor more information see: https://www.keycloak.org/docs/latest/securing_apps/#_modern_browsers"),i.enable=!1,t.silentCheckSsoFallback&&(t.silentCheckSsoRedirectUri=!1)),document.body.removeChild(f),window.removeEventListener("message",e),a.setSuccess()))};window.addEventListener("message",e,!1)}else a.setSuccess();return function(a,f){var e=null,t=new Promise((function(a,t){e=setTimeout((function(){t({error:"Timeout when waiting for 3rd party check iframe message."})}),f)}));return Promise.race([a,t]).finally((function(){clearTimeout(e)}))}(a.promise,t.messageReceiveTimeout)}function O(a){if(!a||"default"==a)return{login:function(a){return window.location.assign(t.createLoginUrl(a)),q().promise},logout:function(a){return window.location.replace(t.createLogoutUrl(a)),q().promise},register:function(a){return window.location.assign(t.createRegisterUrl(a)),q().promise},accountManagement:function(){var a=t.createAccountUrl();if(void 0===a)throw"Not supported by the OIDC server";return window.location.href=a,q().promise},redirectUri:function(a){return a&&a.redirectUri?a.redirectUri:t.redirectUri?t.redirectUri:location.href}};if("cordova"==a){i.enable=!1;var f=function(a,f,e){return window.cordova&&window.cordova.InAppBrowser?window.cordova.InAppBrowser.open(a,f,e):window.open(a,f,e)},e=function(a){var f=function(a){return a&&a.cordovaOptions?Object.keys(a.cordovaOptions).reduce((function(f,e){return f[e]=a.cordovaOptions[e],f}),{}):{}}(a);return f.location="no",a&&"none"==a.prompt&&(f.hidden="yes"),function(a){return Object.keys(a).reduce((function(f,e){return f.push(e+"="+a[e]),f}),[]).join(",")}(f)},r=function(){return t.redirectUri||"http://localhost"};return{login:function(a){var i=q(),o=e(a),n=t.createLoginUrl(a),s=f(n,"_blank",o),l=!1,c=!1,d=function(){c=!0,s.close()};return s.addEventListener("loadstart",(function(a){0==a.url.indexOf(r())&&(p(y(a.url),i),d(),l=!0)})),s.addEventListener("loaderror",(function(a){l||(0==a.url.indexOf(r())?(p(y(a.url),i),d(),l=!0):(i.setError(),d()))})),s.addEventListener("exit",(function(){c||i.setError({reason:"closed_by_user"})})),i.promise},logout:function(a){var e,i=q(),o=t.createLogoutUrl(a),n=f(o,"_blank","location=no,hidden=yes,clearcache=yes");return n.addEventListener("loadstart",(function(a){0==a.url.indexOf(r())&&n.close()})),n.addEventListener("loaderror",(function(a){0==a.url.indexOf(r())||(e=!0),n.close()})),n.addEventListener("exit",(function(){e?i.setError():(t.clearToken(),i.setSuccess())})),i.promise},register:function(a){var i=q(),o=t.createRegisterUrl(),n=e(a),s=f(o,"_blank",n);return s.addEventListener("loadstart",(function(a){0==a.url.indexOf(r())&&(s.close(),p(y(a.url),i))})),i.promise},accountManagement:function(){var a=t.createAccountUrl();if(void 0===a)throw"Not supported by the OIDC server";var e=f(a,"_blank","location=no");e.addEventListener("loadstart",(function(a){0==a.url.indexOf(r())&&e.close()}))},redirectUri:function(){return r()}}}if("cordova-native"==a)return i.enable=!1,{login:function(a){var f=q(),e=t.createLoginUrl(a);return universalLinks.subscribe("keycloak",(function(a){universalLinks.unsubscribe("keycloak"),window.cordova.plugins.browsertab.close(),p(y(a.url),f)})),window.cordova.plugins.browsertab.openUrl(e),f.promise},logout:function(a){var f=q(),e=t.createLogoutUrl(a);return universalLinks.subscribe("keycloak",(function(){universalLinks.unsubscribe("keycloak"),window.cordova.plugins.browsertab.close(),t.clearToken(),f.setSuccess()})),window.cordova.plugins.browsertab.openUrl(e),f.promise},register:function(a){var f=q(),e=t.createRegisterUrl(a);return universalLinks.subscribe("keycloak",(function(a){universalLinks.unsubscribe("keycloak"),window.cordova.plugins.browsertab.close(),p(y(a.url),f)})),window.cordova.plugins.browsertab.openUrl(e),f.promise},accountManagement:function(){var a=t.createAccountUrl();if(void 0===a)throw"Not supported by the OIDC server";window.cordova.plugins.browsertab.openUrl(a)},redirectUri:function(a){return a&&a.redirectUri?a.redirectUri:t.redirectUri?t.redirectUri:"http://localhost"}};throw"invalid adapter type: "+a}t.init=function(r){if(t.didInitialize)throw Error("A 'Keycloak' instance can only be initialized once.");if(t.didInitialize=!0,t.authenticated=!1,e=function(){try{return new I}catch(a){}return new U}(),f=r&&["default","cordova","cordova-native"].indexOf(r.adapter)>-1?O(r.adapter):r&&"object"==typeof r.adapter?r.adapter:window.Cordova||window.cordova?O("cordova"):O(),r){if(void 0!==r.useNonce&&(s=r.useNonce),void 0!==r.checkLoginIframe&&(i.enable=r.checkLoginIframe),r.checkLoginIframeInterval&&(i.interval=r.checkLoginIframeInterval),"login-required"===r.onLoad&&(t.loginRequired=!0),r.responseMode){if("query"!==r.responseMode&&"fragment"!==r.responseMode)throw"Invalid value for responseMode";t.responseMode=r.responseMode}if(r.flow){switch(r.flow){case"standard":t.responseType="code";break;case"implicit":t.responseType="id_token token";break;case"hybrid":t.responseType="code id_token token";break;default:throw"Invalid value for flow"}t.flow=r.flow}if(null!=r.timeSkew&&(t.timeSkew=r.timeSkew),r.redirectUri&&(t.redirectUri=r.redirectUri),r.silentCheckSsoRedirectUri&&(t.silentCheckSsoRedirectUri=r.silentCheckSsoRedirectUri),t.silentCheckSsoFallback="boolean"!=typeof r.silentCheckSsoFallback||r.silentCheckSsoFallback,r.pkceMethod){if("S256"!==r.pkceMethod)throw"Invalid value for pkceMethod";t.pkceMethod=r.pkceMethod}t.enableLogging="boolean"==typeof r.enableLogging&&r.enableLogging,"string"==typeof r.scope&&(t.scope=r.scope),"string"==typeof r.acrValues&&(t.acrValues=r.acrValues),t.messageReceiveTimeout="number"==typeof r.messageReceiveTimeout&&r.messageReceiveTimeout>0?r.messageReceiveTimeout:1e4}t.responseMode||(t.responseMode="fragment"),t.responseType||(t.responseType="code",t.flow="standard");var o=q(),n=q();n.promise.then((function(){t.onReady&&t.onReady(t.authenticated),o.setSuccess(t.authenticated)})).catch((function(a){o.setError(a)}));var l=function(){var f,e=q();function r(a){t.endpoints=a?{authorize:function(){return a.authorization_endpoint},token:function(){return a.token_endpoint},logout:function(){if(!a.end_session_endpoint)throw"Not supported by the OIDC server";return a.end_session_endpoint},checkSessionIframe:function(){if(!a.check_session_iframe)throw"Not supported by the OIDC server";return a.check_session_iframe},register:function(){throw'Redirection to "Register user" page not supported in standard OIDC mode'},userinfo:function(){if(!a.userinfo_endpoint)throw"Not supported by the OIDC server";return a.userinfo_endpoint}}:{authorize:function(){return h()+"/protocol/openid-connect/auth"},token:function(){return h()+"/protocol/openid-connect/token"},logout:function(){return h()+"/protocol/openid-connect/logout"},checkSessionIframe:function(){var a=h()+"/protocol/openid-connect/login-status-iframe.html";return t.iframeVersion&&(a=a+"?version="+t.iframeVersion),a},thirdPartyCookiesIframe:function(){var a=h()+"/protocol/openid-connect/3p-cookies/step1.html";return t.iframeVersion&&(a=a+"?version="+t.iframeVersion),a},register:function(){return h()+"/protocol/openid-connect/registrations"},userinfo:function(){return h()+"/protocol/openid-connect/userinfo"}}}if(a?"string"==typeof a&&(f=a):f="keycloak.json",f)(n=new XMLHttpRequest).open("GET",f,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){if(4==n.readyState)if(200==n.status||m(n)){var a=JSON.parse(n.responseText);t.authServerUrl=a["auth-server-url"],t.realm=a.realm,t.clientId=a.resource,r(null),e.setSuccess()}else e.setError()},n.send();else{if(!a.clientId)throw"clientId missing";t.clientId=a.clientId;var i=a.oidcProvider;if(i){var o,n;"string"==typeof i?(o="/"==i.charAt(i.length-1)?i+".well-known/openid-configuration":i+"/.well-known/openid-configuration",(n=new XMLHttpRequest).open("GET",o,!0),n.setRequestHeader("Accept","application/json"),n.onreadystatechange=function(){4==n.readyState&&(200==n.status||m(n)?(r(JSON.parse(n.responseText)),e.setSuccess()):e.setError())},n.send()):(r(i),e.setSuccess())}else{if(!a.url)for(var s=document.getElementsByTagName("script"),l=0;l<s.length;l++)if(s[l].src.match(/.*keycloak\.js/)){a.url=s[l].src.substr(0,s[l].src.indexOf("/js/keycloak.js"));break}if(!a.realm)throw"realm missing";t.authServerUrl=a.url,t.realm=a.realm,r(null),e.setSuccess()}}return e.promise}();function c(){var a=function(a){a||(e.prompt="none"),r&&r.locale&&(e.locale=r.locale),t.login(e).then((function(){n.setSuccess()})).catch((function(a){n.setError(a)}))},f=function(){var a=document.createElement("iframe"),f=t.createLoginUrl({prompt:"none",redirectUri:t.silentCheckSsoRedirectUri});a.setAttribute("src",f),a.setAttribute("sandbox","allow-storage-access-by-user-activation allow-scripts allow-same-origin"),a.setAttribute("title","keycloak-silent-check-sso"),a.style.display="none",document.body.appendChild(a);var e=function(f){f.origin===window.location.origin&&a.contentWindow===f.source&&(p(y(f.data),n),document.body.removeChild(a),window.removeEventListener("message",e))};window.addEventListener("message",e)},e={};switch(r.onLoad){case"check-sso":i.enable?A().then((function(){j().then((function(e){e?n.setSuccess():t.silentCheckSsoRedirectUri?f():a(!1)})).catch((function(a){n.setError(a)}))})):t.silentCheckSsoRedirectUri?f():a(!1);break;case"login-required":a(!0);break;default:throw"Invalid value for onLoad"}}function d(){var a=y(window.location.href);if(a&&window.history.replaceState(window.history.state,null,a.newUrl),a&&a.valid)return A().then((function(){p(a,n)})).catch((function(a){n.setError(a)}));r?r.token&&r.refreshToken?(g(r.token,r.refreshToken,r.idToken),i.enable?A().then((function(){j().then((function(a){a?(t.onAuthSuccess&&t.onAuthSuccess(),n.setSuccess(),z()):n.setSuccess()})).catch((function(a){n.setError(a)}))})):t.updateToken(-1).then((function(){t.onAuthSuccess&&t.onAuthSuccess(),n.setSuccess()})).catch((function(a){t.onAuthError&&t.onAuthError(),r.onLoad?c():n.setError(a)}))):r.onLoad?c():n.setSuccess():n.setSuccess()}return l.then((function(){(function(){var a=q(),f=function(){"interactive"!==document.readyState&&"complete"!==document.readyState||(document.removeEventListener("readystatechange",f),a.setSuccess())};return document.addEventListener("readystatechange",f),f(),a.promise})().then(C).then(d).catch((function(a){o.setError(a)}))})),l.catch((function(a){o.setError(a)})),o.promise},t.login=function(a){return f.login(a)},t.createLoginUrl=function(a){var r,i=k(),o=k(),n=f.redirectUri(a),l={state:i,nonce:o,redirectUri:encodeURIComponent(n)};a&&a.prompt&&(l.prompt=a.prompt),r=a&&"register"==a.action?t.endpoints.register():t.endpoints.authorize();var c=a&&a.scope||t.scope;c?-1===c.indexOf("openid")&&(c="openid "+c):c="openid";var h=r+"?client_id="+encodeURIComponent(t.clientId)+"&redirect_uri="+encodeURIComponent(n)+"&state="+encodeURIComponent(i)+"&response_mode="+encodeURIComponent(t.responseMode)+"&response_type="+encodeURIComponent(t.responseType)+"&scope="+encodeURIComponent(c);if(s&&(h=h+"&nonce="+encodeURIComponent(o)),a&&a.prompt&&(h+="&prompt="+encodeURIComponent(a.prompt)),a&&a.maxAge&&(h+="&max_age="+encodeURIComponent(a.maxAge)),a&&a.loginHint&&(h+="&login_hint="+encodeURIComponent(a.loginHint)),a&&a.idpHint&&(h+="&kc_idp_hint="+encodeURIComponent(a.idpHint)),a&&a.action&&"register"!=a.action&&(h+="&kc_action="+encodeURIComponent(a.action)),a&&a.locale&&(h+="&ui_locales="+encodeURIComponent(a.locale)),a&&a.acr){var p=function(a){return JSON.stringify({id_token:{acr:a}})}(a.acr);h+="&claims="+encodeURIComponent(p)}if((a&&a.acrValues||t.acrValues)&&(h+="&acr_values="+encodeURIComponent(a.acrValues||t.acrValues)),t.pkceMethod){var m=d(96,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");l.pkceCodeVerifier=m;var g=function(a,f){if("S256"===a){var e=new Uint8Array(b.arrayBuffer(f));return u.fromByteArray(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}throw"Invalid value for pkceMethod"}(t.pkceMethod,m);h+="&code_challenge="+g,h+="&code_challenge_method="+t.pkceMethod}return e.add(l),h},t.logout=function(a){return f.logout(a)},t.createLogoutUrl=function(a){var e=t.endpoints.logout()+"?client_id="+encodeURIComponent(t.clientId)+"&post_logout_redirect_uri="+encodeURIComponent(f.redirectUri(a,!1));return t.idToken&&(e+="&id_token_hint="+encodeURIComponent(t.idToken)),e},t.register=function(a){return f.register(a)},t.createRegisterUrl=function(a){return a||(a={}),a.action="register",t.createLoginUrl(a)},t.createAccountUrl=function(a){var e=h(),r=void 0;return void 0!==e&&(r=e+"/account?referrer="+encodeURIComponent(t.clientId)+"&referrer_uri="+encodeURIComponent(f.redirectUri(a))),r},t.accountManagement=function(){return f.accountManagement()},t.hasRealmRole=function(a){var f=t.realmAccess;return!!f&&f.roles.indexOf(a)>=0},t.hasResourceRole=function(a,f){if(!t.resourceAccess)return!1;var e=t.resourceAccess[f||t.clientId];return!!e&&e.roles.indexOf(a)>=0},t.loadUserProfile=function(){var a=h()+"/account",f=new XMLHttpRequest;f.open("GET",a,!0),f.setRequestHeader("Accept","application/json"),f.setRequestHeader("Authorization","bearer "+t.token);var e=q();return f.onreadystatechange=function(){4==f.readyState&&(200==f.status?(t.profile=JSON.parse(f.responseText),e.setSuccess(t.profile)):e.setError())},f.send(),e.promise},t.loadUserInfo=function(){var a=t.endpoints.userinfo(),f=new XMLHttpRequest;f.open("GET",a,!0),f.setRequestHeader("Accept","application/json"),f.setRequestHeader("Authorization","bearer "+t.token);var e=q();return f.onreadystatechange=function(){4==f.readyState&&(200==f.status?(t.userInfo=JSON.parse(f.responseText),e.setSuccess(t.userInfo)):e.setError())},f.send(),e.promise},t.isTokenExpired=function(a){if(!t.tokenParsed||!t.refreshToken&&"implicit"!=t.flow)throw"Not authenticated";if(null==t.timeSkew)return l("[KEYCLOAK] Unable to determine if token is expired as timeskew is not set"),!0;var f=t.tokenParsed.exp-Math.ceil((new Date).getTime()/1e3)+t.timeSkew;if(a){if(isNaN(a))throw"Invalid minValidity";f-=a}return f<0},t.updateToken=function(a){var f=q();if(!t.refreshToken)return f.setError(),f.promise;a=a||5;var e=function(){var e=!1;if(-1==a?(e=!0,l("[KEYCLOAK] Refreshing token: forced refresh")):t.tokenParsed&&!t.isTokenExpired(a)||(e=!0,l("[KEYCLOAK] Refreshing token: token expired")),e){var i="grant_type=refresh_token&refresh_token="+t.refreshToken,o=t.endpoints.token();if(r.push(f),1==r.length){var n=new XMLHttpRequest;n.open("POST",o,!0),n.setRequestHeader("Content-type","application/x-www-form-urlencoded"),n.withCredentials=!0,i+="&client_id="+encodeURIComponent(t.clientId);var s=(new Date).getTime();n.onreadystatechange=function(){if(4==n.readyState)if(200==n.status){l("[KEYCLOAK] Token refreshed"),s=(s+(new Date).getTime())/2;var a=JSON.parse(n.responseText);g(a.access_token,a.refresh_token,a.id_token,s),t.onAuthRefreshSuccess&&t.onAuthRefreshSuccess();for(var f=r.pop();null!=f;f=r.pop())f.setSuccess(!0)}else for(c("[KEYCLOAK] Failed to refresh token"),400==n.status&&t.clearToken(),t.onAuthRefreshError&&t.onAuthRefreshError(),f=r.pop();null!=f;f=r.pop())f.setError(!0)},n.send(i)}}else f.setSuccess(!1)};return i.enable?j().then((function(){e()})).catch((function(a){f.setError(a)})):e(),f.promise},t.clearToken=function(){t.token&&(g(null,null,null),t.onAuthLogout&&t.onAuthLogout(),t.loginRequired&&t.login())};var I=function(){if(!(this instanceof I))return new I;function a(){for(var a=(new Date).getTime(),f=0;f<localStorage.length;f++){var e=localStorage.key(f);if(e&&0==e.indexOf("kc-callback-")){var t=localStorage.getItem(e);if(t)try{var r=JSON.parse(t).expires;(!r||r<a)&&localStorage.removeItem(e)}catch(a){localStorage.removeItem(e)}}}}localStorage.setItem("kc-test","test"),localStorage.removeItem("kc-test"),this.get=function(f){if(f){var e="kc-callback-"+f,t=localStorage.getItem(e);return t&&(localStorage.removeItem(e),t=JSON.parse(t)),a(),t}},this.add=function(f){a();var e="kc-callback-"+f.state;f.expires=(new Date).getTime()+36e5,localStorage.setItem(e,JSON.stringify(f))}},U=function(){if(!(this instanceof U))return new U;var a=this;a.get=function(a){if(a){var r=e("kc-callback-"+a);return t("kc-callback-"+a,"",f(-100)),r?JSON.parse(r):void 0}},a.add=function(a){t("kc-callback-"+a.state,JSON.stringify(a),f(60))},a.removeItem=function(a){t(a,"",f(-100))};var f=function(a){var f=new Date;return f.setTime(f.getTime()+60*a*1e3),f},e=function(a){for(var f=a+"=",e=document.cookie.split(";"),t=0;t<e.length;t++){for(var r=e[t];" "==r.charAt(0);)r=r.substring(1);if(0==r.indexOf(f))return r.substring(f.length,r.length)}return""},t=function(a,f,e){var t=a+"="+f+"; expires="+e.toUTCString()+"; ";document.cookie=t}};function L(a){return function(){t.enableLogging&&a.apply(console,Array.prototype.slice.call(arguments))}}}var k=function(){if(c)return l;function a(a,f,e){return parseInt(a.substr(f,e),16)}function f(a){return(a|=0)<0?"00":a<16?"0"+a.toString(16):a<256?a.toString(16):"ff"}function e(a,e,t){return f(255*((t=t<0?t+6:t>6?t-6:t)<1?a+(e-a)*t:t<3?e:t<4?a+(e-a)*(4-t):a))}function t(a){if(/^#[0-9a-f]{3,8}$/i.test(a)){var f,e=a.length;if(e<6){var t=a[1],r=a[2],i=a[3],o=a[4]||"";f="#"+t+t+r+r+i+i+o+o}return(7==e||e>8)&&(f=a),f}}function i(f){var e=a(f,7,2);return isNaN(e)?f:"rgba("+a(f,1,2)+","+a(f,3,2)+","+a(f,5,2)+","+(e/255).toFixed(2)+")"}function o(a,t,r){var i=[.55,.5,.5,.46,.6,.55,.55][6*a+.5|0];return function(a,t,r){var i;if(0==t){var o=f(255*r);i=o+o+o}else{var n=r<=.5?r*(t+1):r+t-r*t,s=2*r-n;i=e(s,n,6*a+2)+e(s,n,6*a)+e(s,n,6*a-2)}return"#"+i}(a,t,r=r<.5?r*i*2:i+(r-.5)*(1-i)*2)}c=1;var n="undefined"!=typeof window?window:"undefined"!=typeof self?self:void 0!==r?r:{},s="config",d={};function u(a,f){this.x=a,this.y=f}function h(a,f,e,t){this.q=a,this.t=f,this.I=e,this.Z=t}h.prototype.J=function(a,f,e,t){var r=this.q+this.I,i=this.t+this.I,o=this.Z;return 1===o?new u(r-f-(t||0),this.t+a):2===o?new u(r-a-(e||0),i-f-(t||0)):3===o?new u(this.q+f,i-a-(e||0)):new u(this.q+a,this.t+f)};var p=new h(0,0,0,0);function m(a){this.K=a,this.u=p}var b=m.prototype;function g(a,f,e,t){var r,i,o,n,s;(a%=14)?1==a?f.j(e-(o=0|.5*e),0,o,0|.8*e,2):2==a?f.i(o=0|e/3,o,e-o,e-o):3==a?f.i(s=e<6?1:e<8?2:0|.25*e,s,e-(n=(n=.1*e)>1?0|n:n>.5?1:n)-s,e-n-s):4==a?f.h(e-(o=0|.5*e)-(i=0|.15*e),e-o-i,o):5==a?((s=4*(n=.1*e))>3&&(s|=0),f.i(0,0,e,e),f.g([s,s,e-n,s,s+(e-s-n)/2,e-n],!0)):6==a?f.g([0,0,e,0,e,.7*e,.4*e,.4*e,.7*e,e,0,e]):7==a?f.j(e/2,e/2,e/2,e/2,3):8==a?(f.i(0,0,e,e/2),f.i(0,e/2,e/2,e/2),f.j(e/2,e/2,e/2,e/2,1)):9==a?(n=.14*e,s=e<4?1:e<6?2:0|.35*e,n=e<8?n:0|n,f.i(0,0,e,e),f.i(s,s,e-s-n,e-s-n,!0)):10==a?(s=3*(n=.12*e),f.i(0,0,e,e),f.h(s,s,e-n-s,!0)):11==a?f.j(e/2,e/2,e/2,e/2,3):12==a?(i=.25*e,f.i(0,0,e,e),f.L(i,i,e-i,e-i,!0)):!t&&f.h(i=.4*e,i,o=1.2*e):f.g([0,0,e,0,e,e-2*(r=.42*e),e-r,e,0,e])}function w(a,f,e){var t;(a%=4)?1==a?f.j(0,e/2,e,e/2,0):2==a?f.L(0,0,e,e):f.h(t=e/6,t,e-2*t):f.j(0,0,e,e,0)}function v(f,e,r){var i=function(a){var f="object"==typeof a&&a||d[s]||n.jdenticon_config||{},e=f.lightness||{},r=f.saturation||{},i="color"in r?r.color:r,o=r.grayscale,l=f.backColor,c=f.padding;function u(a,f){var t=e[a];return t&&t.length>1||(t=f),function(a){return(a=t[0]+a*(t[1]-t[0]))<0?0:a>1?1:a}}return{X:function(a){var e,t=f.hues;return t&&t.length>0&&(e=t[0|.999*a*t.length]),"number"==typeof e?(e/360%1+1)%1:a},o:"number"==typeof i?i:.5,F:"number"==typeof o?o:0,p:u("color",[.4,.8]),G:u("grayscale",[.3,.9]),H:t(l),Y:"number"==typeof a?a:"number"==typeof c?c:.08}}(r);i.H&&f.m(i.H);var l=f.k,c=.5+l*i.Y|0;l-=2*c;var u=new m(f),p=0|l/4,b=0|c+l/2-2*p,v=0|c+l/2-2*p;function k(t,r,i,o,n){var s=a(e,i,1),l=o?a(e,o,1):0;f.M(x[q[t]]);for(var c=0;c<n.length;c++)u.u=new h(b+n[c][0]*p,v+n[c][1]*p,p,l++%4),r(s,u,p,c);f.N()}var y,x=function(a,f){return[o(a=f.X(a),f.F,f.G(0)),o(a,f.o,f.p(.5)),o(a,f.F,f.G(1)),o(a,f.o,f.p(1)),o(a,f.o,f.p(0))]}(a(e,-7)/268435455,i),q=[];function A(a){if(a.indexOf(y)>=0)for(var f=0;f<a.length;f++)if(q.indexOf(a[f])>=0)return!0}for(var z=0;z<3;z++)y=a(e,8+z,1)%x.length,(A([0,4])||A([2,3]))&&(y=1),q.push(y);k(0,w,2,3,[[1,0],[2,0],[2,3],[1,3],[0,1],[3,1],[3,2],[0,2]]),k(1,w,4,5,[[0,0],[3,0],[3,3],[0,3]]),k(2,g,1,null,[[1,1],[2,1],[2,2],[1,2]]),f.finish()}function k(a){return/^[0-9a-f]{11,}$/i.test(a)&&a}function y(a){return function(a){var f,e=0,t=0,r=encodeURI(a)+"%80",i=[],o=[],n=1732584193,s=4023233417,l=~n,c=~s,d=3285377520,u=[n,s,l,c,d],h=0,p="";function m(a,f){return a<<f|a>>>32-f}for(;e<r.length;t++)i[t>>2]=i[t>>2]|("%"==r[e]?parseInt(r.substring(e+1,e+=3),16):r.charCodeAt(e++))<<8*(3-(3&t));for(i[(f=16*(1+(t+7>>6)))-1]=8*t-8;h<f;h+=16){for(e=0;e<80;e++)t=m(n,5)+d+(e<20?1518500249+(s&l^~s&c):e<40?1859775393+(s^l^c):e<60?2400959708+(s&l^s&c^l&c):3395469782+(s^l^c))+(o[e]=e<16?0|i[h+e]:m(o[e-3]^o[e-8]^o[e-14]^o[e-16],1)),d=c,c=l,l=m(s,30),s=n,n=t;u[0]=n=u[0]+n|0,u[1]=s=u[1]+s|0,u[2]=l=u[2]+l|0,u[3]=c=u[3]+c|0,u[4]=d=u[4]+d|0}for(e=0;e<40;e++)p+=(u[e>>3]>>>4*(7-(7&e))&15).toString(16);return p}(null==a?"":""+a)}function x(a,f){var e=a.canvas,t=e.width,r=e.height;a.save(),f||a.translate((t-(f=Math.min(t,r)))/2|0,(r-f)/2|0),this.l=a,this.k=f,a.clearRect(0,0,f,f)}b.g=function(a,f){for(var e=f?-2:2,t=[],r=f?a.length-2:0;r<a.length&&r>=0;r+=e)t.push(this.u.J(a[r],a[r+1]));this.K.g(t)},b.h=function(a,f,e,t){var r=this.u.J(a,f,e,e);this.K.h(r,e,t)},b.i=function(a,f,e,t,r){this.g([a,f,a+e,f,a+e,f+t,a,f+t],r)},b.j=function(a,f,e,t,r,i){var o=[a+e,f,a+e,f+t,a,f+t,a,f];o.splice((r||0)%4*2,2),this.g(o,i)},b.L=function(a,f,e,t,r){this.g([a+e/2,f,a+e,f+t/2,a+e/2,f+t,a,f+t/2],r)};var q=x.prototype;q.m=function(a){var f=this.l,e=this.k;f.fillStyle=i(a),f.fillRect(0,0,e,e)},q.M=function(a){var f=this.l;f.fillStyle=i(a),f.beginPath()},q.N=function(){this.l.fill()},q.g=function(a){var f=this.l;f.moveTo(a[0].x,a[0].y);for(var e=1;e<a.length;e++)f.lineTo(a[e].x,a[e].y);f.closePath()},q.h=function(a,f,e){var t=this.l,r=f/2;t.moveTo(a.x+r,a.y+r),t.arc(a.x+r,a.y+r,r,0,2*Math.PI,e),t.closePath()},q.finish=function(){this.l.restore()};var A="data-jdenticon-hash",z="data-jdenticon-value",j="jdenticonRendered",C="["+A+"],["+z+"]",O="undefined"!=typeof document&&document.querySelectorAll.bind(document);function I(a){return(10*a+.5|0)/10}function U(){this.A=""}var L=U.prototype;function R(a){this.C={},this.P=a,this.k=a.k}L.g=function(a){for(var f="",e=0;e<a.length;e++)f+=(e?"L":"M")+I(a[e].x)+" "+I(a[e].y);this.A+=f+"Z"},L.h=function(a,f,e){var t=e?0:1,r=I(f/2),i=I(f),o="a"+r+","+r+" 0 1,"+t+" ";this.A+="M"+I(a.x)+" "+I(a.y+f/2)+o+i+",0"+o+-i+",0"};var N=R.prototype;N.m=function(f){var e=/^(#......)(..)?/.exec(f),t=e[2]?a(e[2],0)/255:1;this.P.m(e[1],t)},N.M=function(a){this.B=this.C[a]||(this.C[a]=new U)},N.N=function(){},N.g=function(a){this.B.g(a)},N.h=function(a,f,e){this.B.h(a,f,e)},N.finish=function(){var a=this.C;for(var f in a)a.hasOwnProperty(f)&&this.P.R(f,a[f].A)};var S="http://www.w3.org/2000/svg",_="width",M="height";function F(a){this.k=a,this.D='<svg xmlns="'+S+'" width="'+a+'" height="'+a+'" viewBox="0 0 '+a+" "+a+'">'}var E=F.prototype;function T(a,f){for(var e=[],t=arguments.length-2;t-- >0;)e[t]=arguments[t+2];for(var r=document.createElementNS(S,f),i=0;i+1<e.length;i+=2)r.setAttribute(e[i],e[i+1]);a.appendChild(r)}function Y(a){var f=this.k=Math.min(Number(a.getAttribute(_))||100,Number(a.getAttribute(M))||100);for(this.V=a;a.firstChild;)a.removeChild(a.firstChild);a.setAttribute("viewBox","0 0 "+f+" "+f),a.setAttribute("preserveAspectRatio","xMidYMid meet")}E.m=function(a,f){f&&(this.D+='<rect width="100%" height="100%" fill="'+a+'" opacity="'+f.toFixed(2)+'"/>')},E.R=function(a,f){this.D+='<path fill="'+a+'" d="'+f+'"/>'},E.toString=function(){return this.D+"</svg>"};var P=Y.prototype;function K(a,f,e){B(a,f,e,(function(a,f){if(f)return 1==f?new R(new Y(a)):new x(a.getContext("2d"))}))}function B(a,f,e,t){if("string"!=typeof a){var r=k(f)||null!=f&&y(f)||k(a.getAttribute(A))||a.hasAttribute(z)&&y(a.getAttribute(z));if(r){var i=t(a,function(a){if(a){var f=a.tagName;if(/^svg$/i.test(f))return 1;if(/^canvas$/i.test(f)&&"getContext"in a)return 2}}(a));i&&(v(i,r,e),a[j]=!0)}}else if(O)for(var o=O(a),n=0;n<o.length;n++)B(o[n],f,e,t)}P.m=function(a,f){f&&T(this.V,"rect",_,"100%",M,"100%","fill",a,"opacity",f)},P.R=function(a,f){T(this.V,"path","fill",a,"d",f)};var J=function(){O&&K(C)};return function(a){d=a}(J),J.configure=function(a){return arguments.length&&(d[s]=a),d[s]},J.drawIcon=function(a,f,e,t){if(!a)throw Error("No canvas specified.");v(new x(a,e),k(f)||y(f),t);var r=a.canvas;r&&(r[j]=!0)},J.toSvg=function(a,f,e){var t=new F(f);return v(new R(t),k(a)||y(a),e),""+t},J.update=K,J.updateCanvas=function(a,f,e){B(a,f,e,(function(a,f){if(2==f)return new x(a.getContext("2d"))}))},J.updateSvg=function(a,f,e){B(a,f,e,(function(a,f){if(1==f)return new R(new Y(a))}))},J.version="3.3.0",J.bundle="browser-cjs",l=J}();const y={keycloak:{url:"https://keycloak.ds2.icelab.cloud",realm:"ds2",clientId:"dashbtn"},defaultLink:{name:"Portal",url:"https://portal.ds2.icelab.cloud"},menuViewType:"grid",cookieName:"ZDZW_cookie",menu:{global:{name:"Applications",links:[]},local:{name:"Applications",enableCustomLocalMenu:!0,links:[]}},loading:{isLoading:!0,duration:800},allowedGlobalDomain:"",whitelistedUrls:""};class x{constructor(){this._config=y}static getInstance(){return x.instance||(x.instance=new x),x.instance}async fetchConfig(a){try{const f=await fetch(a+"/developer/dashbuttons/config");if(!f.ok)throw Error("Failed to fetch config");const e=await f.json();this._config=Object.assign(Object.assign({},y),e)}catch(a){console.warn("Using default config due to API failure",a),this._config=y}return this._config}get config(){return this._config}}const q=x.getInstance(),A=new class{async getMenuConfig(a){try{const f=await fetch(a);if(!f.ok)throw Error("API error");return await f.json()}catch(a){return{data:[],total:0,page:1,perPage:0,totalPages:0}}}setDefaultProtocol(a){return/^https?:\/\//i.test(a)?a:"https://"+a}async getMenuLinks(a){const f=this.setDefaultProtocol(a),e=new URL(f);e.hostname="containerisationbackend."+e.hostname;const{data:t}=await this.getMenuConfig(e.origin+"/developer/charts/installed");return t.map((f=>{var e,t,r;const i=null===(e=f.metadata)||void 0===e?void 0:e.frontendUrlPrefix,o=(a=>{const f=a.startsWith("http")?new URL(a):new URL("https://"+a),e=f.hostname,t=f.port?":"+f.port:"",r=e.split(".");return"localhost"===e?e+t:e.endsWith(".sslip.io")?r.slice(-5).join(".")+t:e+t})(a),n=`${((a,f="https://")=>{if(!a)return f;const e=a.trim().match(/^(https?:\/\/)/i);return e?e[1]:f})(a)}${i}.${o}`;return{name:f.installChartName,url:i?n:"",category:null!==(r=null===(t=f.metadata)||void 0===t?void 0:t.category)&&void 0!==r?r:""}}))}},z=a(class extends f{constructor(a){super(),!1!==a&&this.__registerHost(),this.__attachShadow(),this.showPostLoginText=!1,this.silentCheckSso=!1,this.authMethod="check-sso",this.portalApiUrl="",this.plmUrl="https://productlicensemanager-zdzw.cloud.zdzw-project.com",this.showUnauthorizedModal=!1,this.primaryColor="",this.accentColor="",this.notificationPosition="left",this.keycloak=null,this.isAuth=!1,this.givenUserName="",this.silentCheckSsoRedirectUri=window.location.origin+"/assets/verificar-sso.html",this.appList=[],this.avatarSvg=k.toSvg("init-avatar",40),this.isLoading=!1,this.isRestricted=!1}componentDidLoad(){console.log("New version!!!"),this.el.addEventListener("click",(a=>{const f=a.composedPath();if(!f.some((a=>a&&"NOTIFICATION-COMPONENT"===a.tagName)))return;const e=f.find((a=>a&&("A"===a.tagName||"function"==typeof a.hasAttribute&&a.hasAttribute("href"))));if(e){const f=e.getAttribute("href");f&&(a.preventDefault(),a.stopPropagation(),e.classList.contains("button-link")?(console.log("Notification module home link intercepted. Opening in new tab:",f),window.open(f,"_blank","noopener,noreferrer")):(console.log("Notification module standard link intercepted. Navigating in current view:",f),window.location.href=f))}}))}async componentWillLoad(){var a,f,e,t;this.config=await q.fetchConfig(this.portalApiUrl),console.log(this.config),this.config&&((null===(f=null===(a=this.config)||void 0===a?void 0:a.loading)||void 0===f?void 0:f.isLoading)&&(this.isLoading=!0,setTimeout((()=>{this.isLoading=!1}),null===(t=null===(e=this.config)||void 0===e?void 0:e.loading)||void 0===t?void 0:t.duration)),this.keycloak=new v({url:this.config.keycloak.url,realm:this.config.keycloak.realm,clientId:this.config.keycloak.clientId}),this.initKeycloak().then((()=>{this.isAuth&&(this.loadOrganizationUrlAndLinks(),this.validateAppAccessByUrl())})))}async initKeycloak(){localStorage.removeItem("ZDZW_app_permission"),await this.keycloak.init({onLoad:this.authMethod,checkLoginIframe:!1,silentCheckSsoRedirectUri:this.silentCheckSso?this.silentCheckSsoRedirectUri:""}).then((a=>{var f,e,t;a&&(this.isAuth=!0,localStorage.setItem("keycloak",JSON.stringify(this.keycloak)),document.cookie=this.config.cookieName+"="+JSON.parse(null!==(f=localStorage.getItem("keycloak"))&&void 0!==f?f:"{}").token,this.givenUserName=JSON.parse(null!==(e=localStorage.getItem("keycloak"))&&void 0!==e?e:"{}").idTokenParsed.preferred_username,this.avatarSvg=k.toSvg(JSON.parse(null!==(t=localStorage.getItem("keycloak"))&&void 0!==t?t:"{}").idTokenParsed.sub,40))}))}async loadOrganizationUrlAndLinks(){var a,f,e;try{const f=JSON.parse(localStorage.getItem("keycloak")||"{}");this.organizationUrl=(null===(a=null==f?void 0:f.idTokenParsed)||void 0===a?void 0:a.organizationUrl)||null}catch(a){this.organizationUrl=null}if(this.organizationUrl&&(null===(e=null===(f=this.config)||void 0===f?void 0:f.menu)||void 0===e?void 0:e.local)&&!this.config.menu.local.enableCustomLocalMenu)try{this.localMenuLinks=await A.getMenuLinks(this.organizationUrl)}catch(a){console.error("Failed to load local menu",a),this.localMenuLinks=[]}}validateAppAccessByUrl(){var a,f,e,t,r,i;const o=a=>a.replace(/\/+$/,""),n=o(window.location.href),s=o(window.location.origin),l=(null===(e=null===(f=null===(a=this.config)||void 0===a?void 0:a.menu)||void 0===f?void 0:f.global)||void 0===e?void 0:e.links)||[],c=(null===(t=this.config)||void 0===t?void 0:t.allowedGlobalDomain)||"",d=(null===(r=this.config)||void 0===r?void 0:r.whitelistedUrls)||"",u=l.some((a=>{try{const f=o(new URL(a.url).origin);return s===f}catch(a){return!1}})),h=null===(i=this.keycloak)||void 0===i?void 0:i.tokenParsed,p=null==h?void 0:h.organizationUrl,m=p&&n.includes(o(p)),b=c&&s.includes(o(c)),g=(d?d.split(",").map((a=>o(a.trim()))):[]).some((a=>n.includes(a)));this.isRestricted=!(u||m||b||g)}login(){this.keycloak.login()}logout(){localStorage.removeItem("keycloak"),document.cookie=this.config.cookieName+"=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;",this.keycloak.logout()}showModal(){this.el.shadowRoot.querySelector("#appListModal").style.display="block"}closeModal(){this.el.shadowRoot.querySelector("#appListModal").style.display="none"}renderNotificationComponent(){var a;const f=null===(a=this.keycloak)||void 0===a?void 0:a.idTokenParsed,t=(null==f?void 0:f.preferred_username)||(null==f?void 0:f.sub)||"",r=(null==f?void 0:f.organizationUrl)||"",i=r?new URL(r.startsWith("http")?r:"https://"+r).hostname:"";return i&&t?e("notification-component",{owner:t,"max-records":10,"display-type":"icon","notification-url":`https://notifications.${i}/notifications-api`,"socket-connect":!0,"socket-url":`wss://repository.${i}/socket`,"list-url":`https://notifications.${i}/notifications`}):null}render(){var a,f,t,r,i,o,n,s,l,c,d,u,h,p,m,b,g,w,v,k,y;return e("div",{key:"a2d1650d96fcbbfa5128da4315e70dc0c2682dfd"},e("div",{key:"975ab012c618442f627f00a9ee29773c08d55824"},(()=>{var a,f,t,r,i,o,n,s;return this.isLoading?e("a",{id:"login-btn",class:"button button-link"},e("div",{class:"lds-ring"},e("div",null),e("div",null),e("div",null),e("div",null))):this.isRestricted?e("div",{class:"restricted-overlay"},e("div",{class:"restricted-card"},e("div",{class:"restricted-icon"},e("i",{class:"fa-solid fa-shield-halved"})),e("h2",null,"Access Restricted"),e("p",{class:"restricted-message"},"You do not have permission to access this application. Please contact your administrator if you believe this is an error."),(null===(r=null===(t=null===(f=null===(a=this.config)||void 0===a?void 0:a.menu)||void 0===f?void 0:f.global)||void 0===t?void 0:t.links)||void 0===r?void 0:r.length)>0&&e("div",{class:"restricted-links"},e("h4",null,"Publicly Available Modules"),e("div",{class:"link-grid"},this.config.menu.global.links.map((a=>e("a",{href:a.url,target:"_blank",class:"restricted-link"},e("i",{class:a.icon}),e("span",null,a.name)))))),e("div",{class:"restricted-actions"},(null===(o=null===(i=this.config)||void 0===i?void 0:i.defaultLink)||void 0===o?void 0:o.url)&&e("a",{href:this.config.defaultLink.url,target:"_blank",class:"btn-primary"},"Go to Portal"),e("button",{class:"btn-danger",onClick:this.logout.bind(this)},"Logout")))):this.isAuth&&this.showPostLoginText?e("a",{style:{background:null!=this.primaryColor?this.primaryColor:""},href:this.redirectUri,id:"login-btn",class:"button button-link"},e("span",{style:{color:null!=this.accentColor?this.accentColor:""},class:"button-text button-text-full-width"},"Go to Dashboard")):this.isAuth?e("div",{class:"profile-actions",style:{display:"inline-flex",alignItems:"center",gap:"15px"}},"right"!==this.notificationPosition&&this.renderNotificationComponent(),e("div",{id:"profile-btn",class:"dropdown"},e("button",{style:{background:null!=this.primaryColor?this.primaryColor:""},type:"button",class:"button"},e("span",{class:"button-profile"},JSON.parse(null!==(n=localStorage.getItem("keycloak"))&&void 0!==n?n:"{}").idTokenParsed.imageUrl?e("img",{class:"profile-image",src:"https://s-damith.github.io/test-avatar/images/e24da9c5-0b1f-46fa-82cd-7c711c77b5c7.png"}):e("div",{innerHTML:this.avatarSvg})),e("span",{style:{color:null!=this.accentColor?this.accentColor:""},id:"given-name",class:"button-text"},this.givenUserName),e("div",{class:"button-icon"},e("i","grid"==this.config.menuViewType?{class:"fa-solid fa-grip-vertical"}:{class:"fa-solid fa-bars"}))),e("div",{class:"dropdown-content"},e("div",{class:"dropdown-user-profile"},e("div",{class:"username"},"@",this.givenUserName),e("div",{class:"first-last-name"},JSON.parse(null!==(s=localStorage.getItem("keycloak"))&&void 0!==s?s:"{}").idTokenParsed.name)),"grid"==this.config.menuViewType?e("div",null,e("div",{class:"grid-view-menu"},this.config.menu.global.links.map((a=>e("a",{href:a.url,target:"_blank",class:"grid-view-link"},e("i",{class:a.icon+" fa-2x"}),e("div",{class:"grid-view-link-text"},a.name))))),0!=this.config.menu.global.links.length&&e("hr",{class:"solid"}),e("div",{class:"grid-view-menu",style:0===this.config.menu.global.links.length?{marginBottom:"12px"}:void 0},e("a",{onClick:this.showModal.bind(this),class:"grid-view-link"},e("i",{class:"fa-regular fa-window-restore fa-2x"}),e("div",{class:"grid-view-link-text"},"Modules")),e("a",{href:this.config.defaultLink.url,target:"_blank",class:"grid-view-link"},e("i",{class:"fa-solid fa-globe fa-2x"}),e("div",{class:"grid-view-link-text"},this.config.defaultLink.name)),e("a",{onClick:this.logout.bind(this),class:"grid-view-link"},e("i",{class:"fa-solid fa-right-from-bracket fa-2x"}),e("div",{class:"grid-view-link-text"},"Logout")))):e("div",{class:"dropdown-content-link"},this.config.menu.global.links.map((a=>e("a",{href:a.url,target:"_blank",id:"applications-btn"},e("i",{class:a.icon+" menu-bar-icons"}),a.name))),e("a",{onClick:this.showModal.bind(this),id:"applications-btn"},e("i",{class:"fa-regular fa-window-restore menu-bar-icons"}),"Modules"),e("a",{href:this.config.defaultLink.url,target:"_blank",id:"applications-btn"},e("i",{class:"fa-solid fa-globe menu-bar-icons"}),this.config.defaultLink.name),e("a",{onClick:this.logout.bind(this),id:"logout-btn"},e("i",{class:"fa-solid fa-right-from-bracket menu-bar-icons"}),"Logout")))),"right"===this.notificationPosition&&this.renderNotificationComponent()):e("button",{style:{background:null!=this.primaryColor?this.primaryColor:""},onClick:this.login.bind(this),id:"login-btn",type:"button",class:"button"},e("span",{style:{color:null!=this.accentColor?this.accentColor:""},class:"button-text"},"Login"))})()),e("div",{key:"3a9e8bd2730ba8d71f1e8416bab4d745a68dda9a",id:"appListModal",class:"modal"},e("div",{key:"8f85ebe690af26900e003755e68fa5cd1401b502",class:"modal-content"},e("span",{key:"445d67c3803859bbec76177291fd71389ccf5917",onClick:this.closeModal.bind(this),class:"close"},"×"),e("div",{key:"0a0df9bb6fc5258568fb9363353f58486a30f744",class:"box"},e("input",{key:"eec587753688b1ac0bd1a3b87975f0b9692d7719",type:"radio",class:"tab-toggle",name:"tab-toggle",id:"tab1",checked:!0}),e("ul",{key:"4db9fff924d2f38e3e42b83bd96fe2589dc2c701",class:"tab-list"},e("li",{key:"99e9a21d90012e521aa10d21194f44013dbd5931",class:"tab-item"},e("label",{key:"c4fadd0b70b3e944860056a37e9d5f52b7c625b5",class:"tab-trigger",htmlFor:"tab1"},e("i",{key:"5252821523386c869725b0e13bf662ec03f24d81",class:"fa-solid fa-table-list menu-bar-icons"})," ",this.config.menu.local.name))),e("div",{key:"2da9e2383580f6d5130883051c4b0d1cba1354a7",class:"tab-container"},e("div",{key:"a51f2e9b923836b63b9ff2453d08dc3ee93213e6",class:"tab-content"},e("div",{key:"9c7146fa59070eace7bcb1b76fb2b59468e23b5c",class:"modal-body"},(null===(t=null===(f=null===(a=this.config)||void 0===a?void 0:a.menu)||void 0===f?void 0:f.local)||void 0===t?void 0:t.enableCustomLocalMenu)?null===(i=this.config.menu.local.links)||void 0===i?void 0:i.map(((a,f)=>e("a",{key:f,class:"external-app-link",target:"_blank",rel:"noopener noreferrer",href:a.url},e("div",{class:"modal-app"},e("div",null,a.name))))):null===(r=this.localMenuLinks)||void 0===r?void 0:r.map(((a,f)=>{const t=!a.url;return e("a",{key:f,class:"external-app-link",href:t?void 0:a.url,target:t?void 0:"_blank",rel:t?void 0:"noopener noreferrer",onClick:t?a=>a.preventDefault():void 0},e("div",{class:"modal-app"},e("div",null,a.name)))})),this.organizationUrl?(!(null===(s=null===(n=null===(o=this.config)||void 0===o?void 0:o.menu)||void 0===n?void 0:n.local)||void 0===s?void 0:s.enableCustomLocalMenu)&&0===(null!==(c=null===(l=this.localMenuLinks)||void 0===l?void 0:l.length)&&void 0!==c?c:0)||(null===(h=null===(u=null===(d=this.config)||void 0===d?void 0:d.menu)||void 0===u?void 0:u.local)||void 0===h?void 0:h.enableCustomLocalMenu)&&0===(null!==(w=null===(g=null===(b=null===(m=null===(p=this.config)||void 0===p?void 0:p.menu)||void 0===m?void 0:m.local)||void 0===b?void 0:b.links)||void 0===g?void 0:g.length)&&void 0!==w?w:0))&&e("div",null,e("h3",{class:"gray-text"},"No installed ",(null===(y=null===(k=null===(v=this.config)||void 0===v?void 0:v.menu)||void 0===k?void 0:k.local)||void 0===y?void 0:y.name)||"menu"," found."),e("p",{class:"gray-text"},"Please contact administration.")):e("div",null,e("h3",{class:"gray-text"},"Organization Domain URL not set"),e("p",{class:"gray-text"},"Please set your Organization Domain URL on the Portal profile page.")))))))),e("div",{key:"2a36c585f0f83380bc08b30141df91c1532b4a28",id:"appPermissionErrorModal",class:"modal"},e("div",{key:"8fbbb80e22591c105c5010689d2f91909652ed8c",class:"modal-content"},e("img",{key:"1621c2b97802968da0e6429e1b1571eb4080ef68",src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGD0lEQVR4nO2cbU8TWRTH/W5WEAmF4nNiieFFoeBjYhQUWzUWYkpbDfGFCR9CoolvQF9aWgG3kMCG8LACC1ikuCuUh7bH/M/MmW131S2ZqTDjPcmkdub2tvPj3HP/55yJR44oU6ZMmTJlyg7YOsL9pI7+shkogGFzDqMAhhVAOsiQozwwrACS8sCwfXd+tYTDCiApDwwf/FJUSzisAJKjNhFlPzYF0KQpgCZNATRpCqBJUwBNmgJo0hRAk6YAmjQF0KkAs4uLtPz8OU2HQpRqaaFkQwPFq6v5SHo8fA7XVgYGKLu0dGC/81ABLORylB4cpInLl+nt0aP7OiauXKH00BAV8vlfE2AmkaCxpiYDSKK6mqaammjx+nX6FAzS348e0VYkwgf+jXO4Nun18lj53PuLF2kjmfx1AOa3t2mmt9cAkDxxghauXaPN3l7KxmJlHRgLmKNutzHPTCTCczsa4G4mQ6nWVr7h4WPHaL6trQTc+r17NOf30/iZMzTmdtNwVRWPA2Scm/H56FMgQNlolMfDO/9ob+cxmDPl99PuxoYzAe5mMrzcxOvWAALgolFauXmTxurry45/gPvnjRsG+LW7d3lOWdKVhHggAPPb24bnvW9ooL96evjGP4dC9NvJkwaY0fPnaa6vjzLJJG19+ED5bJY/u5NOUyYep/lnz2jk3Ll/4p/Hw/B4ru5unls8Mb+z4xyAM3rMg5cIvHRXFyVqavg8oKy+elXWjooxqy9f0luXy5gTm4xAFE+cjcWcATCTSGgxr6rKWLaAF9fj1u+BAOW2tsqeL7+7S5OdnRq8mhpaf/CA5xSI8EiJiRsjI/YGWMjlDKmCDUOWrXje3NOnRIWCaXh45biqL+f59nYjHlqtE38qwPTgoLHMeLeNRo2YB8+zEp7ExK1olI+Rujo+t/b6tX0BTugZBnQebha7rcQ8K5Ytw9O9WWKi7M7QiZKx2BJgdnHRyDDE+0SqYMOwEt7k7dvaxqJLHHwXvpMzFpeLtpeX7QdwZWCAbwjpmYhkkSrlxqVy4WEc4q1IHBbbsRhNXrjA71devLAfwOlQiH88lhJuBhkGbxx9fZbDE4NO5LTO5+OxCB14P93dbT+AKZ9P84ZgkG8GqRjeQ9ZUAh4MYhvXxs+e5fHwRBbWra32A5j0ePjHf9H1mST+2YWFisCDba+u8vV3tbWGNuT3jY32AxjXS06QFLgZKUH9aPct7O3RVFfXf+BlHj6kZG2tBq+j47tpGs5LoYKrNpGI9v74cfsDHNazg+/dvFl4sNzmprHz2x5g8l9LWMTuzsePli7bYkMBgqVMfb39l3CqpeXbm0g8XhF439xEgkGjOmN7GTOjA4XU2Be8zs6y4MFmnzzRpJLfXypjenrsK6Qnvd4SSQGxCyFtNbxiIb1+/74mpL1e+wrp7NISp1ElqZwuZZB2WQkPZqRyevz7Eg5zCc22qVxxMUGWMRL94sTfKnjYfd+dPq15261bpcWEq1fJvuWsoSEt/3W7tRZlNMolJylxWQEPJTGRP6lTpwz5YpSz3ryxcUE1nzcaSeieFTeArIKH3Fq8GSX9koJqc7O9C6owNL0lO5CKsZTfzS7bqTt3+LPxornxKu2Cz6Oj5IymUkTLCOB54iWAKOIaMRE7JXbS/zOMwYYhMQ9/gOLOnPxBZh8/dlhb06+Vs9B6FIi4cYmJInGgEyGIkbHgc8idkWHgHHRecVsTMU/mwuuY3tYcv3TJWW1NGJrdJY113WtkdxaJU84BqSK7rRFXdc/Dd+w5rbFeDHG8rc2IiQj2UmwQsY1iKFIxlKSg46AjARfnkGGISOZHO6JRnkNiHjzPsY92iGFZoultLNu6OtZs+3m4CCIZnxGpIjGvUsv2UAEUQ9NblrSUoNDDQP4KT+TH2/QWJT/eFgjwNaRnnGHI4x3NzRXZbQ89QBg0GsQ2Wo+SnZR1uFycYbBI3kdv2XEAiw35KqQMGkDoYaCeaDzi29jIuziuYYyVua1jANrFFECTpgCaNAXQpCmAJk0BNGkKoElTACsNUB39ZTFQAMMW/78xypQpU6ZMmbIjP9e+AkAlsBlIjsPOAAAAAElFTkSuQmCC"}),e("h2",{key:"f9a6ba63c8d9ca116ad61a1eae25fca676b88767",class:"green-text margin-b"},"You don't have permission to access this application."),e("h3",{key:"12783289a6b8ef86c096457555f3371cbbde39dc",class:"green-text"},"Please contact the administration."),this.config.defaultLink.url&&this.showUnauthorizedModal?e("div",null,e("h4",{class:"gray-text"},"You will be automatically redirected to the portal."),e("div",{id:"countdown"},e("div",{id:"countdown-number"}),e("svg",null,e("circle",{r:"18",cx:"20",cy:"20"})))):e("div",null))))}get el(){return this}static get style(){return'.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:"\\30"}.fa-1{--fa:"\\31"}.fa-2{--fa:"\\32"}.fa-3{--fa:"\\33"}.fa-4{--fa:"\\34"}.fa-5{--fa:"\\35"}.fa-6{--fa:"\\36"}.fa-7{--fa:"\\37"}.fa-8{--fa:"\\38"}.fa-9{--fa:"\\39"}.fa-fill-drip{--fa:"\\f576"}.fa-arrows-to-circle{--fa:"\\e4bd"}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:"\\f138"}.fa-at{--fa:"\\40"}.fa-trash-alt,.fa-trash-can{--fa:"\\f2ed"}.fa-text-height{--fa:"\\f034"}.fa-user-times,.fa-user-xmark{--fa:"\\f235"}.fa-stethoscope{--fa:"\\f0f1"}.fa-comment-alt,.fa-message{--fa:"\\f27a"}.fa-info{--fa:"\\f129"}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:"\\f422"}.fa-explosion{--fa:"\\e4e9"}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:"\\f15c"}.fa-wave-square{--fa:"\\f83e"}.fa-ring{--fa:"\\f70b"}.fa-building-un{--fa:"\\e4d9"}.fa-dice-three{--fa:"\\f527"}.fa-calendar-alt,.fa-calendar-days{--fa:"\\f073"}.fa-anchor-circle-check{--fa:"\\e4aa"}.fa-building-circle-arrow-right{--fa:"\\e4d1"}.fa-volleyball,.fa-volleyball-ball{--fa:"\\f45f"}.fa-arrows-up-to-line{--fa:"\\e4c2"}.fa-sort-desc,.fa-sort-down{--fa:"\\f0dd"}.fa-circle-minus,.fa-minus-circle{--fa:"\\f056"}.fa-door-open{--fa:"\\f52b"}.fa-right-from-bracket,.fa-sign-out-alt{--fa:"\\f2f5"}.fa-atom{--fa:"\\f5d2"}.fa-soap{--fa:"\\e06e"}.fa-heart-music-camera-bolt,.fa-icons{--fa:"\\f86d"}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:"\\f539"}.fa-bridge-circle-check{--fa:"\\e4c9"}.fa-pump-medical{--fa:"\\e06a"}.fa-fingerprint{--fa:"\\f577"}.fa-hand-point-right{--fa:"\\f0a4"}.fa-magnifying-glass-location,.fa-search-location{--fa:"\\f689"}.fa-forward-step,.fa-step-forward{--fa:"\\f051"}.fa-face-smile-beam,.fa-smile-beam{--fa:"\\f5b8"}.fa-flag-checkered{--fa:"\\f11e"}.fa-football,.fa-football-ball{--fa:"\\f44e"}.fa-school-circle-exclamation{--fa:"\\e56c"}.fa-crop{--fa:"\\f125"}.fa-angle-double-down,.fa-angles-down{--fa:"\\f103"}.fa-users-rectangle{--fa:"\\e594"}.fa-people-roof{--fa:"\\e537"}.fa-people-line{--fa:"\\e534"}.fa-beer,.fa-beer-mug-empty{--fa:"\\f0fc"}.fa-diagram-predecessor{--fa:"\\e477"}.fa-arrow-up-long,.fa-long-arrow-up{--fa:"\\f176"}.fa-burn,.fa-fire-flame-simple{--fa:"\\f46a"}.fa-male,.fa-person{--fa:"\\f183"}.fa-laptop{--fa:"\\f109"}.fa-file-csv{--fa:"\\f6dd"}.fa-menorah{--fa:"\\f676"}.fa-truck-plane{--fa:"\\e58f"}.fa-record-vinyl{--fa:"\\f8d9"}.fa-face-grin-stars,.fa-grin-stars{--fa:"\\f587"}.fa-bong{--fa:"\\f55c"}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:"\\f67b"}.fa-arrow-down-up-across-line{--fa:"\\e4af"}.fa-spoon,.fa-utensil-spoon{--fa:"\\f2e5"}.fa-jar-wheat{--fa:"\\e517"}.fa-envelopes-bulk,.fa-mail-bulk{--fa:"\\f674"}.fa-file-circle-exclamation{--fa:"\\e4eb"}.fa-circle-h,.fa-hospital-symbol{--fa:"\\f47e"}.fa-pager{--fa:"\\f815"}.fa-address-book,.fa-contact-book{--fa:"\\f2b9"}.fa-strikethrough{--fa:"\\f0cc"}.fa-k{--fa:"\\4b"}.fa-landmark-flag{--fa:"\\e51c"}.fa-pencil,.fa-pencil-alt{--fa:"\\f303"}.fa-backward{--fa:"\\f04a"}.fa-caret-right{--fa:"\\f0da"}.fa-comments{--fa:"\\f086"}.fa-file-clipboard,.fa-paste{--fa:"\\f0ea"}.fa-code-pull-request{--fa:"\\e13c"}.fa-clipboard-list{--fa:"\\f46d"}.fa-truck-loading,.fa-truck-ramp-box{--fa:"\\f4de"}.fa-user-check{--fa:"\\f4fc"}.fa-vial-virus{--fa:"\\e597"}.fa-sheet-plastic{--fa:"\\e571"}.fa-blog{--fa:"\\f781"}.fa-user-ninja{--fa:"\\f504"}.fa-person-arrow-up-from-line{--fa:"\\e539"}.fa-scroll-torah,.fa-torah{--fa:"\\f6a0"}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:"\\f458"}.fa-toggle-off{--fa:"\\f204"}.fa-archive,.fa-box-archive{--fa:"\\f187"}.fa-person-drowning{--fa:"\\e545"}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:"\\f886"}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:"\\f58a"}.fa-spray-can{--fa:"\\f5bd"}.fa-truck-monster{--fa:"\\f63b"}.fa-w{--fa:"\\57"}.fa-earth-africa,.fa-globe-africa{--fa:"\\f57c"}.fa-rainbow{--fa:"\\f75b"}.fa-circle-notch{--fa:"\\f1ce"}.fa-tablet-alt,.fa-tablet-screen-button{--fa:"\\f3fa"}.fa-paw{--fa:"\\f1b0"}.fa-cloud{--fa:"\\f0c2"}.fa-trowel-bricks{--fa:"\\e58a"}.fa-face-flushed,.fa-flushed{--fa:"\\f579"}.fa-hospital-user{--fa:"\\f80d"}.fa-tent-arrow-left-right{--fa:"\\e57f"}.fa-gavel,.fa-legal{--fa:"\\f0e3"}.fa-binoculars{--fa:"\\f1e5"}.fa-microphone-slash{--fa:"\\f131"}.fa-box-tissue{--fa:"\\e05b"}.fa-motorcycle{--fa:"\\f21c"}.fa-bell-concierge,.fa-concierge-bell{--fa:"\\f562"}.fa-pen-ruler,.fa-pencil-ruler{--fa:"\\f5ae"}.fa-people-arrows,.fa-people-arrows-left-right{--fa:"\\e068"}.fa-mars-and-venus-burst{--fa:"\\e523"}.fa-caret-square-right,.fa-square-caret-right{--fa:"\\f152"}.fa-cut,.fa-scissors{--fa:"\\f0c4"}.fa-sun-plant-wilt{--fa:"\\e57a"}.fa-toilets-portable{--fa:"\\e584"}.fa-hockey-puck{--fa:"\\f453"}.fa-table{--fa:"\\f0ce"}.fa-magnifying-glass-arrow-right{--fa:"\\e521"}.fa-digital-tachograph,.fa-tachograph-digital{--fa:"\\f566"}.fa-users-slash{--fa:"\\e073"}.fa-clover{--fa:"\\e139"}.fa-mail-reply,.fa-reply{--fa:"\\f3e5"}.fa-star-and-crescent{--fa:"\\f699"}.fa-house-fire{--fa:"\\e50c"}.fa-minus-square,.fa-square-minus{--fa:"\\f146"}.fa-helicopter{--fa:"\\f533"}.fa-compass{--fa:"\\f14e"}.fa-caret-square-down,.fa-square-caret-down{--fa:"\\f150"}.fa-file-circle-question{--fa:"\\e4ef"}.fa-laptop-code{--fa:"\\f5fc"}.fa-swatchbook{--fa:"\\f5c3"}.fa-prescription-bottle{--fa:"\\f485"}.fa-bars,.fa-navicon{--fa:"\\f0c9"}.fa-people-group{--fa:"\\e533"}.fa-hourglass-3,.fa-hourglass-end{--fa:"\\f253"}.fa-heart-broken,.fa-heart-crack{--fa:"\\f7a9"}.fa-external-link-square-alt,.fa-square-up-right{--fa:"\\f360"}.fa-face-kiss-beam,.fa-kiss-beam{--fa:"\\f597"}.fa-film{--fa:"\\f008"}.fa-ruler-horizontal{--fa:"\\f547"}.fa-people-robbery{--fa:"\\e536"}.fa-lightbulb{--fa:"\\f0eb"}.fa-caret-left{--fa:"\\f0d9"}.fa-circle-exclamation,.fa-exclamation-circle{--fa:"\\f06a"}.fa-school-circle-xmark{--fa:"\\e56d"}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:"\\f08b"}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:"\\f13a"}.fa-unlock-alt,.fa-unlock-keyhole{--fa:"\\f13e"}.fa-cloud-showers-heavy{--fa:"\\f740"}.fa-headphones-alt,.fa-headphones-simple{--fa:"\\f58f"}.fa-sitemap{--fa:"\\f0e8"}.fa-circle-dollar-to-slot,.fa-donate{--fa:"\\f4b9"}.fa-memory{--fa:"\\f538"}.fa-road-spikes{--fa:"\\e568"}.fa-fire-burner{--fa:"\\e4f1"}.fa-flag{--fa:"\\f024"}.fa-hanukiah{--fa:"\\f6e6"}.fa-feather{--fa:"\\f52d"}.fa-volume-down,.fa-volume-low{--fa:"\\f027"}.fa-comment-slash{--fa:"\\f4b3"}.fa-cloud-sun-rain{--fa:"\\f743"}.fa-compress{--fa:"\\f066"}.fa-wheat-alt,.fa-wheat-awn{--fa:"\\e2cd"}.fa-ankh{--fa:"\\f644"}.fa-hands-holding-child{--fa:"\\e4fa"}.fa-asterisk{--fa:"\\2a"}.fa-check-square,.fa-square-check{--fa:"\\f14a"}.fa-peseta-sign{--fa:"\\e221"}.fa-header,.fa-heading{--fa:"\\f1dc"}.fa-ghost{--fa:"\\f6e2"}.fa-list,.fa-list-squares{--fa:"\\f03a"}.fa-phone-square-alt,.fa-square-phone-flip{--fa:"\\f87b"}.fa-cart-plus{--fa:"\\f217"}.fa-gamepad{--fa:"\\f11b"}.fa-circle-dot,.fa-dot-circle{--fa:"\\f192"}.fa-dizzy,.fa-face-dizzy{--fa:"\\f567"}.fa-egg{--fa:"\\f7fb"}.fa-house-medical-circle-xmark{--fa:"\\e513"}.fa-campground{--fa:"\\f6bb"}.fa-folder-plus{--fa:"\\f65e"}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:"\\f1e3"}.fa-paint-brush,.fa-paintbrush{--fa:"\\f1fc"}.fa-lock{--fa:"\\f023"}.fa-gas-pump{--fa:"\\f52f"}.fa-hot-tub,.fa-hot-tub-person{--fa:"\\f593"}.fa-map-location,.fa-map-marked{--fa:"\\f59f"}.fa-house-flood-water{--fa:"\\e50e"}.fa-tree{--fa:"\\f1bb"}.fa-bridge-lock{--fa:"\\e4cc"}.fa-sack-dollar{--fa:"\\f81d"}.fa-edit,.fa-pen-to-square{--fa:"\\f044"}.fa-car-side{--fa:"\\f5e4"}.fa-share-alt,.fa-share-nodes{--fa:"\\f1e0"}.fa-heart-circle-minus{--fa:"\\e4ff"}.fa-hourglass-2,.fa-hourglass-half{--fa:"\\f252"}.fa-microscope{--fa:"\\f610"}.fa-sink{--fa:"\\e06d"}.fa-bag-shopping,.fa-shopping-bag{--fa:"\\f290"}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:"\\f881"}.fa-mitten{--fa:"\\f7b5"}.fa-person-rays{--fa:"\\e54d"}.fa-users{--fa:"\\f0c0"}.fa-eye-slash{--fa:"\\f070"}.fa-flask-vial{--fa:"\\e4f3"}.fa-hand,.fa-hand-paper{--fa:"\\f256"}.fa-om{--fa:"\\f679"}.fa-worm{--fa:"\\e599"}.fa-house-circle-xmark{--fa:"\\e50b"}.fa-plug{--fa:"\\f1e6"}.fa-chevron-up{--fa:"\\f077"}.fa-hand-spock{--fa:"\\f259"}.fa-stopwatch{--fa:"\\f2f2"}.fa-face-kiss,.fa-kiss{--fa:"\\f596"}.fa-bridge-circle-xmark{--fa:"\\e4cb"}.fa-face-grin-tongue,.fa-grin-tongue{--fa:"\\f589"}.fa-chess-bishop{--fa:"\\f43a"}.fa-face-grin-wink,.fa-grin-wink{--fa:"\\f58c"}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:"\\f2a4"}.fa-road-circle-check{--fa:"\\e564"}.fa-dice-five{--fa:"\\f523"}.fa-rss-square,.fa-square-rss{--fa:"\\f143"}.fa-land-mine-on{--fa:"\\e51b"}.fa-i-cursor{--fa:"\\f246"}.fa-stamp{--fa:"\\f5bf"}.fa-stairs{--fa:"\\e289"}.fa-i{--fa:"\\49"}.fa-hryvnia,.fa-hryvnia-sign{--fa:"\\f6f2"}.fa-pills{--fa:"\\f484"}.fa-face-grin-wide,.fa-grin-alt{--fa:"\\f581"}.fa-tooth{--fa:"\\f5c9"}.fa-v{--fa:"\\56"}.fa-bangladeshi-taka-sign{--fa:"\\e2e6"}.fa-bicycle{--fa:"\\f206"}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:"\\e579"}.fa-head-side-cough-slash{--fa:"\\e062"}.fa-ambulance,.fa-truck-medical{--fa:"\\f0f9"}.fa-wheat-awn-circle-exclamation{--fa:"\\e598"}.fa-snowman{--fa:"\\f7d0"}.fa-mortar-pestle{--fa:"\\f5a7"}.fa-road-barrier{--fa:"\\e562"}.fa-school{--fa:"\\f549"}.fa-igloo{--fa:"\\f7ae"}.fa-joint{--fa:"\\f595"}.fa-angle-right{--fa:"\\f105"}.fa-horse{--fa:"\\f6f0"}.fa-q{--fa:"\\51"}.fa-g{--fa:"\\47"}.fa-notes-medical{--fa:"\\f481"}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:"\\f2c9"}.fa-dong-sign{--fa:"\\e169"}.fa-capsules{--fa:"\\f46b"}.fa-poo-bolt,.fa-poo-storm{--fa:"\\f75a"}.fa-face-frown-open,.fa-frown-open{--fa:"\\f57a"}.fa-hand-point-up{--fa:"\\f0a6"}.fa-money-bill{--fa:"\\f0d6"}.fa-bookmark{--fa:"\\f02e"}.fa-align-justify{--fa:"\\f039"}.fa-umbrella-beach{--fa:"\\f5ca"}.fa-helmet-un{--fa:"\\e503"}.fa-bullseye{--fa:"\\f140"}.fa-bacon{--fa:"\\f7e5"}.fa-hand-point-down{--fa:"\\f0a7"}.fa-arrow-up-from-bracket{--fa:"\\e09a"}.fa-folder,.fa-folder-blank{--fa:"\\f07b"}.fa-file-medical-alt,.fa-file-waveform{--fa:"\\f478"}.fa-radiation{--fa:"\\f7b9"}.fa-chart-simple{--fa:"\\e473"}.fa-mars-stroke{--fa:"\\f229"}.fa-vial{--fa:"\\f492"}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:"\\f624"}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:"\\e2ca"}.fa-e{--fa:"\\45"}.fa-pen-alt,.fa-pen-clip{--fa:"\\f305"}.fa-bridge-circle-exclamation{--fa:"\\e4ca"}.fa-user{--fa:"\\f007"}.fa-school-circle-check{--fa:"\\e56b"}.fa-dumpster{--fa:"\\f793"}.fa-shuttle-van,.fa-van-shuttle{--fa:"\\f5b6"}.fa-building-user{--fa:"\\e4da"}.fa-caret-square-left,.fa-square-caret-left{--fa:"\\f191"}.fa-highlighter{--fa:"\\f591"}.fa-key{--fa:"\\f084"}.fa-bullhorn{--fa:"\\f0a1"}.fa-globe{--fa:"\\f0ac"}.fa-synagogue{--fa:"\\f69b"}.fa-person-half-dress{--fa:"\\e548"}.fa-road-bridge{--fa:"\\e563"}.fa-location-arrow{--fa:"\\f124"}.fa-c{--fa:"\\43"}.fa-tablet-button{--fa:"\\f10a"}.fa-building-lock{--fa:"\\e4d6"}.fa-pizza-slice{--fa:"\\f818"}.fa-money-bill-wave{--fa:"\\f53a"}.fa-area-chart,.fa-chart-area{--fa:"\\f1fe"}.fa-house-flag{--fa:"\\e50d"}.fa-person-circle-minus{--fa:"\\e540"}.fa-ban,.fa-cancel{--fa:"\\f05e"}.fa-camera-rotate{--fa:"\\e0d8"}.fa-air-freshener,.fa-spray-can-sparkles{--fa:"\\f5d0"}.fa-star{--fa:"\\f005"}.fa-repeat{--fa:"\\f363"}.fa-cross{--fa:"\\f654"}.fa-box{--fa:"\\f466"}.fa-venus-mars{--fa:"\\f228"}.fa-arrow-pointer,.fa-mouse-pointer{--fa:"\\f245"}.fa-expand-arrows-alt,.fa-maximize{--fa:"\\f31e"}.fa-charging-station{--fa:"\\f5e7"}.fa-shapes,.fa-triangle-circle-square{--fa:"\\f61f"}.fa-random,.fa-shuffle{--fa:"\\f074"}.fa-person-running,.fa-running{--fa:"\\f70c"}.fa-mobile-retro{--fa:"\\e527"}.fa-grip-lines-vertical{--fa:"\\f7a5"}.fa-spider{--fa:"\\f717"}.fa-hands-bound{--fa:"\\e4f9"}.fa-file-invoice-dollar{--fa:"\\f571"}.fa-plane-circle-exclamation{--fa:"\\e556"}.fa-x-ray{--fa:"\\f497"}.fa-spell-check{--fa:"\\f891"}.fa-slash{--fa:"\\f715"}.fa-computer-mouse,.fa-mouse{--fa:"\\f8cc"}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:"\\f090"}.fa-shop-slash,.fa-store-alt-slash{--fa:"\\e070"}.fa-server{--fa:"\\f233"}.fa-virus-covid-slash{--fa:"\\e4a9"}.fa-shop-lock{--fa:"\\e4a5"}.fa-hourglass-1,.fa-hourglass-start{--fa:"\\f251"}.fa-blender-phone{--fa:"\\f6b6"}.fa-building-wheat{--fa:"\\e4db"}.fa-person-breastfeeding{--fa:"\\e53a"}.fa-right-to-bracket,.fa-sign-in-alt{--fa:"\\f2f6"}.fa-venus{--fa:"\\f221"}.fa-passport{--fa:"\\f5ab"}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:"\\e68f"}.fa-heart-pulse,.fa-heartbeat{--fa:"\\f21e"}.fa-people-carry,.fa-people-carry-box{--fa:"\\f4ce"}.fa-temperature-high{--fa:"\\f769"}.fa-microchip{--fa:"\\f2db"}.fa-crown{--fa:"\\f521"}.fa-weight-hanging{--fa:"\\f5cd"}.fa-xmarks-lines{--fa:"\\e59a"}.fa-file-prescription{--fa:"\\f572"}.fa-weight,.fa-weight-scale{--fa:"\\f496"}.fa-user-friends,.fa-user-group{--fa:"\\f500"}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:"\\f15e"}.fa-chess-knight{--fa:"\\f441"}.fa-face-laugh-squint,.fa-laugh-squint{--fa:"\\f59b"}.fa-wheelchair{--fa:"\\f193"}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:"\\f0aa"}.fa-toggle-on{--fa:"\\f205"}.fa-person-walking,.fa-walking{--fa:"\\f554"}.fa-l{--fa:"\\4c"}.fa-fire{--fa:"\\f06d"}.fa-bed-pulse,.fa-procedures{--fa:"\\f487"}.fa-shuttle-space,.fa-space-shuttle{--fa:"\\f197"}.fa-face-laugh,.fa-laugh{--fa:"\\f599"}.fa-folder-open{--fa:"\\f07c"}.fa-heart-circle-plus{--fa:"\\e500"}.fa-code-fork{--fa:"\\e13b"}.fa-city{--fa:"\\f64f"}.fa-microphone-alt,.fa-microphone-lines{--fa:"\\f3c9"}.fa-pepper-hot{--fa:"\\f816"}.fa-unlock{--fa:"\\f09c"}.fa-colon-sign{--fa:"\\e140"}.fa-headset{--fa:"\\f590"}.fa-store-slash{--fa:"\\e071"}.fa-road-circle-xmark{--fa:"\\e566"}.fa-user-minus{--fa:"\\f503"}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:"\\f22a"}.fa-champagne-glasses,.fa-glass-cheers{--fa:"\\f79f"}.fa-clipboard{--fa:"\\f328"}.fa-house-circle-exclamation{--fa:"\\e50a"}.fa-file-arrow-up,.fa-file-upload{--fa:"\\f574"}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:"\\f1eb"}.fa-bath,.fa-bathtub{--fa:"\\f2cd"}.fa-underline{--fa:"\\f0cd"}.fa-user-edit,.fa-user-pen{--fa:"\\f4ff"}.fa-signature{--fa:"\\f5b7"}.fa-stroopwafel{--fa:"\\f551"}.fa-bold{--fa:"\\f032"}.fa-anchor-lock{--fa:"\\e4ad"}.fa-building-ngo{--fa:"\\e4d7"}.fa-manat-sign{--fa:"\\e1d5"}.fa-not-equal{--fa:"\\f53e"}.fa-border-style,.fa-border-top-left{--fa:"\\f853"}.fa-map-location-dot,.fa-map-marked-alt{--fa:"\\f5a0"}.fa-jedi{--fa:"\\f669"}.fa-poll,.fa-square-poll-vertical{--fa:"\\f681"}.fa-mug-hot{--fa:"\\f7b6"}.fa-battery-car,.fa-car-battery{--fa:"\\f5df"}.fa-gift{--fa:"\\f06b"}.fa-dice-two{--fa:"\\f528"}.fa-chess-queen{--fa:"\\f445"}.fa-glasses{--fa:"\\f530"}.fa-chess-board{--fa:"\\f43c"}.fa-building-circle-check{--fa:"\\e4d2"}.fa-person-chalkboard{--fa:"\\e53d"}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:"\\f22b"}.fa-hand-back-fist,.fa-hand-rock{--fa:"\\f255"}.fa-caret-square-up,.fa-square-caret-up{--fa:"\\f151"}.fa-cloud-showers-water{--fa:"\\e4e4"}.fa-bar-chart,.fa-chart-bar{--fa:"\\f080"}.fa-hands-bubbles,.fa-hands-wash{--fa:"\\e05e"}.fa-less-than-equal{--fa:"\\f537"}.fa-train{--fa:"\\f238"}.fa-eye-low-vision,.fa-low-vision{--fa:"\\f2a8"}.fa-crow{--fa:"\\f520"}.fa-sailboat{--fa:"\\e445"}.fa-window-restore{--fa:"\\f2d2"}.fa-plus-square,.fa-square-plus{--fa:"\\f0fe"}.fa-torii-gate{--fa:"\\f6a1"}.fa-frog{--fa:"\\f52e"}.fa-bucket{--fa:"\\e4cf"}.fa-image{--fa:"\\f03e"}.fa-microphone{--fa:"\\f130"}.fa-cow{--fa:"\\f6c8"}.fa-caret-up{--fa:"\\f0d8"}.fa-screwdriver{--fa:"\\f54a"}.fa-folder-closed{--fa:"\\e185"}.fa-house-tsunami{--fa:"\\e515"}.fa-square-nfi{--fa:"\\e576"}.fa-arrow-up-from-ground-water{--fa:"\\e4b5"}.fa-glass-martini-alt,.fa-martini-glass{--fa:"\\f57b"}.fa-square-binary{--fa:"\\e69b"}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:"\\f2ea"}.fa-columns,.fa-table-columns{--fa:"\\f0db"}.fa-lemon{--fa:"\\f094"}.fa-head-side-mask{--fa:"\\e063"}.fa-handshake{--fa:"\\f2b5"}.fa-gem{--fa:"\\f3a5"}.fa-dolly,.fa-dolly-box{--fa:"\\f472"}.fa-smoking{--fa:"\\f48d"}.fa-compress-arrows-alt,.fa-minimize{--fa:"\\f78c"}.fa-monument{--fa:"\\f5a6"}.fa-snowplow{--fa:"\\f7d2"}.fa-angle-double-right,.fa-angles-right{--fa:"\\f101"}.fa-cannabis{--fa:"\\f55f"}.fa-circle-play,.fa-play-circle{--fa:"\\f144"}.fa-tablets{--fa:"\\f490"}.fa-ethernet{--fa:"\\f796"}.fa-eur,.fa-euro,.fa-euro-sign{--fa:"\\f153"}.fa-chair{--fa:"\\f6c0"}.fa-check-circle,.fa-circle-check{--fa:"\\f058"}.fa-circle-stop,.fa-stop-circle{--fa:"\\f28d"}.fa-compass-drafting,.fa-drafting-compass{--fa:"\\f568"}.fa-plate-wheat{--fa:"\\e55a"}.fa-icicles{--fa:"\\f7ad"}.fa-person-shelter{--fa:"\\e54f"}.fa-neuter{--fa:"\\f22c"}.fa-id-badge{--fa:"\\f2c1"}.fa-marker{--fa:"\\f5a1"}.fa-face-laugh-beam,.fa-laugh-beam{--fa:"\\f59a"}.fa-helicopter-symbol{--fa:"\\e502"}.fa-universal-access{--fa:"\\f29a"}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:"\\f139"}.fa-lari-sign{--fa:"\\e1c8"}.fa-volcano{--fa:"\\f770"}.fa-person-walking-dashed-line-arrow-right{--fa:"\\e553"}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:"\\f154"}.fa-viruses{--fa:"\\e076"}.fa-square-person-confined{--fa:"\\e577"}.fa-user-tie{--fa:"\\f508"}.fa-arrow-down-long,.fa-long-arrow-down{--fa:"\\f175"}.fa-tent-arrow-down-to-line{--fa:"\\e57e"}.fa-certificate{--fa:"\\f0a3"}.fa-mail-reply-all,.fa-reply-all{--fa:"\\f122"}.fa-suitcase{--fa:"\\f0f2"}.fa-person-skating,.fa-skating{--fa:"\\f7c5"}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:"\\f662"}.fa-camera-retro{--fa:"\\f083"}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:"\\f0ab"}.fa-arrow-right-to-file,.fa-file-import{--fa:"\\f56f"}.fa-external-link-square,.fa-square-arrow-up-right{--fa:"\\f14c"}.fa-box-open{--fa:"\\f49e"}.fa-scroll{--fa:"\\f70e"}.fa-spa{--fa:"\\f5bb"}.fa-location-pin-lock{--fa:"\\e51f"}.fa-pause{--fa:"\\f04c"}.fa-hill-avalanche{--fa:"\\e507"}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:"\\f2cb"}.fa-bomb{--fa:"\\f1e2"}.fa-registered{--fa:"\\f25d"}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:"\\f2bb"}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:"\\f516"}.fa-subscript{--fa:"\\f12c"}.fa-diamond-turn-right,.fa-directions{--fa:"\\f5eb"}.fa-burst{--fa:"\\e4dc"}.fa-house-laptop,.fa-laptop-house{--fa:"\\e066"}.fa-face-tired,.fa-tired{--fa:"\\f5c8"}.fa-money-bills{--fa:"\\e1f3"}.fa-smog{--fa:"\\f75f"}.fa-crutch{--fa:"\\f7f7"}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:"\\f0ee"}.fa-palette{--fa:"\\f53f"}.fa-arrows-turn-right{--fa:"\\e4c0"}.fa-vest{--fa:"\\e085"}.fa-ferry{--fa:"\\e4ea"}.fa-arrows-down-to-people{--fa:"\\e4b9"}.fa-seedling,.fa-sprout{--fa:"\\f4d8"}.fa-arrows-alt-h,.fa-left-right{--fa:"\\f337"}.fa-boxes-packing{--fa:"\\e4c7"}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:"\\f0a8"}.fa-group-arrows-rotate{--fa:"\\e4f6"}.fa-bowl-food{--fa:"\\e4c6"}.fa-candy-cane{--fa:"\\f786"}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:"\\f160"}.fa-cloud-bolt,.fa-thunderstorm{--fa:"\\f76c"}.fa-remove-format,.fa-text-slash{--fa:"\\f87d"}.fa-face-smile-wink,.fa-smile-wink{--fa:"\\f4da"}.fa-file-word{--fa:"\\f1c2"}.fa-file-powerpoint{--fa:"\\f1c4"}.fa-arrows-h,.fa-arrows-left-right{--fa:"\\f07e"}.fa-house-lock{--fa:"\\e510"}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:"\\f0ed"}.fa-children{--fa:"\\e4e1"}.fa-blackboard,.fa-chalkboard{--fa:"\\f51b"}.fa-user-alt-slash,.fa-user-large-slash{--fa:"\\f4fa"}.fa-envelope-open{--fa:"\\f2b6"}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:"\\e05f"}.fa-mattress-pillow{--fa:"\\e525"}.fa-guarani-sign{--fa:"\\e19a"}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:"\\f021"}.fa-fire-extinguisher{--fa:"\\f134"}.fa-cruzeiro-sign{--fa:"\\e152"}.fa-greater-than-equal{--fa:"\\f532"}.fa-shield-alt,.fa-shield-halved{--fa:"\\f3ed"}.fa-atlas,.fa-book-atlas{--fa:"\\f558"}.fa-virus{--fa:"\\e074"}.fa-envelope-circle-check{--fa:"\\e4e8"}.fa-layer-group{--fa:"\\f5fd"}.fa-arrows-to-dot{--fa:"\\e4be"}.fa-archway{--fa:"\\f557"}.fa-heart-circle-check{--fa:"\\e4fd"}.fa-house-chimney-crack,.fa-house-damage{--fa:"\\f6f1"}.fa-file-archive,.fa-file-zipper{--fa:"\\f1c6"}.fa-square{--fa:"\\f0c8"}.fa-glass-martini,.fa-martini-glass-empty{--fa:"\\f000"}.fa-couch{--fa:"\\f4b8"}.fa-cedi-sign{--fa:"\\e0df"}.fa-italic{--fa:"\\f033"}.fa-table-cells-column-lock{--fa:"\\e678"}.fa-church{--fa:"\\f51d"}.fa-comments-dollar{--fa:"\\f653"}.fa-democrat{--fa:"\\f747"}.fa-z{--fa:"\\5a"}.fa-person-skiing,.fa-skiing{--fa:"\\f7c9"}.fa-road-lock{--fa:"\\e567"}.fa-a{--fa:"\\41"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:"\\e03f"}.fa-feather-alt,.fa-feather-pointed{--fa:"\\f56b"}.fa-p{--fa:"\\50"}.fa-snowflake{--fa:"\\f2dc"}.fa-newspaper{--fa:"\\f1ea"}.fa-ad,.fa-rectangle-ad{--fa:"\\f641"}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:"\\f0a9"}.fa-filter-circle-xmark{--fa:"\\e17b"}.fa-locust{--fa:"\\e520"}.fa-sort,.fa-unsorted{--fa:"\\f0dc"}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:"\\f0cb"}.fa-person-dress-burst{--fa:"\\e544"}.fa-money-check-alt,.fa-money-check-dollar{--fa:"\\f53d"}.fa-vector-square{--fa:"\\f5cb"}.fa-bread-slice{--fa:"\\f7ec"}.fa-language{--fa:"\\f1ab"}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:"\\f598"}.fa-filter{--fa:"\\f0b0"}.fa-question{--fa:"\\3f"}.fa-file-signature{--fa:"\\f573"}.fa-arrows-alt,.fa-up-down-left-right{--fa:"\\f0b2"}.fa-house-chimney-user{--fa:"\\e065"}.fa-hand-holding-heart{--fa:"\\f4be"}.fa-puzzle-piece{--fa:"\\f12e"}.fa-money-check{--fa:"\\f53c"}.fa-star-half-alt,.fa-star-half-stroke{--fa:"\\f5c0"}.fa-code{--fa:"\\f121"}.fa-glass-whiskey,.fa-whiskey-glass{--fa:"\\f7a0"}.fa-building-circle-exclamation{--fa:"\\e4d3"}.fa-magnifying-glass-chart{--fa:"\\e522"}.fa-arrow-up-right-from-square,.fa-external-link{--fa:"\\f08e"}.fa-cubes-stacked{--fa:"\\e4e6"}.fa-krw,.fa-won,.fa-won-sign{--fa:"\\f159"}.fa-virus-covid{--fa:"\\e4a8"}.fa-austral-sign{--fa:"\\e0a9"}.fa-f{--fa:"\\46"}.fa-leaf{--fa:"\\f06c"}.fa-road{--fa:"\\f018"}.fa-cab,.fa-taxi{--fa:"\\f1ba"}.fa-person-circle-plus{--fa:"\\e541"}.fa-chart-pie,.fa-pie-chart{--fa:"\\f200"}.fa-bolt-lightning{--fa:"\\e0b7"}.fa-sack-xmark{--fa:"\\e56a"}.fa-file-excel{--fa:"\\f1c3"}.fa-file-contract{--fa:"\\f56c"}.fa-fish-fins{--fa:"\\e4f2"}.fa-building-flag{--fa:"\\e4d5"}.fa-face-grin-beam,.fa-grin-beam{--fa:"\\f582"}.fa-object-ungroup{--fa:"\\f248"}.fa-poop{--fa:"\\f619"}.fa-location-pin,.fa-map-marker{--fa:"\\f041"}.fa-kaaba{--fa:"\\f66b"}.fa-toilet-paper{--fa:"\\f71e"}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:"\\f807"}.fa-eject{--fa:"\\f052"}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:"\\f35a"}.fa-plane-circle-check{--fa:"\\e555"}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:"\\f5a5"}.fa-object-group{--fa:"\\f247"}.fa-chart-line,.fa-line-chart{--fa:"\\f201"}.fa-mask-ventilator{--fa:"\\e524"}.fa-arrow-right{--fa:"\\f061"}.fa-map-signs,.fa-signs-post{--fa:"\\f277"}.fa-cash-register{--fa:"\\f788"}.fa-person-circle-question{--fa:"\\e542"}.fa-h{--fa:"\\48"}.fa-tarp{--fa:"\\e57b"}.fa-screwdriver-wrench,.fa-tools{--fa:"\\f7d9"}.fa-arrows-to-eye{--fa:"\\e4bf"}.fa-plug-circle-bolt{--fa:"\\e55b"}.fa-heart{--fa:"\\f004"}.fa-mars-and-venus{--fa:"\\f224"}.fa-home-user,.fa-house-user{--fa:"\\e1b0"}.fa-dumpster-fire{--fa:"\\f794"}.fa-house-crack{--fa:"\\e3b1"}.fa-cocktail,.fa-martini-glass-citrus{--fa:"\\f561"}.fa-face-surprise,.fa-surprise{--fa:"\\f5c2"}.fa-bottle-water{--fa:"\\e4c5"}.fa-circle-pause,.fa-pause-circle{--fa:"\\f28b"}.fa-toilet-paper-slash{--fa:"\\e072"}.fa-apple-alt,.fa-apple-whole{--fa:"\\f5d1"}.fa-kitchen-set{--fa:"\\e51a"}.fa-r{--fa:"\\52"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:"\\f2ca"}.fa-cube{--fa:"\\f1b2"}.fa-bitcoin-sign{--fa:"\\e0b4"}.fa-shield-dog{--fa:"\\e573"}.fa-solar-panel{--fa:"\\f5ba"}.fa-lock-open{--fa:"\\f3c1"}.fa-elevator{--fa:"\\e16d"}.fa-money-bill-transfer{--fa:"\\e528"}.fa-money-bill-trend-up{--fa:"\\e529"}.fa-house-flood-water-circle-arrow-right{--fa:"\\e50f"}.fa-poll-h,.fa-square-poll-horizontal{--fa:"\\f682"}.fa-circle{--fa:"\\f111"}.fa-backward-fast,.fa-fast-backward{--fa:"\\f049"}.fa-recycle{--fa:"\\f1b8"}.fa-user-astronaut{--fa:"\\f4fb"}.fa-plane-slash{--fa:"\\e069"}.fa-trademark{--fa:"\\f25c"}.fa-basketball,.fa-basketball-ball{--fa:"\\f434"}.fa-satellite-dish{--fa:"\\f7c0"}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:"\\f35b"}.fa-mobile-alt,.fa-mobile-screen-button{--fa:"\\f3cd"}.fa-volume-high,.fa-volume-up{--fa:"\\f028"}.fa-users-rays{--fa:"\\e593"}.fa-wallet{--fa:"\\f555"}.fa-clipboard-check{--fa:"\\f46c"}.fa-file-audio{--fa:"\\f1c7"}.fa-burger,.fa-hamburger{--fa:"\\f805"}.fa-wrench{--fa:"\\f0ad"}.fa-bugs{--fa:"\\e4d0"}.fa-rupee,.fa-rupee-sign{--fa:"\\f156"}.fa-file-image{--fa:"\\f1c5"}.fa-circle-question,.fa-question-circle{--fa:"\\f059"}.fa-plane-departure{--fa:"\\f5b0"}.fa-handshake-slash{--fa:"\\e060"}.fa-book-bookmark{--fa:"\\e0bb"}.fa-code-branch{--fa:"\\f126"}.fa-hat-cowboy{--fa:"\\f8c0"}.fa-bridge{--fa:"\\e4c8"}.fa-phone-alt,.fa-phone-flip{--fa:"\\f879"}.fa-truck-front{--fa:"\\e2b7"}.fa-cat{--fa:"\\f6be"}.fa-anchor-circle-exclamation{--fa:"\\e4ab"}.fa-truck-field{--fa:"\\e58d"}.fa-route{--fa:"\\f4d7"}.fa-clipboard-question{--fa:"\\e4e3"}.fa-panorama{--fa:"\\e209"}.fa-comment-medical{--fa:"\\f7f5"}.fa-teeth-open{--fa:"\\f62f"}.fa-file-circle-minus{--fa:"\\e4ed"}.fa-tags{--fa:"\\f02c"}.fa-wine-glass{--fa:"\\f4e3"}.fa-fast-forward,.fa-forward-fast{--fa:"\\f050"}.fa-face-meh-blank,.fa-meh-blank{--fa:"\\f5a4"}.fa-parking,.fa-square-parking{--fa:"\\f540"}.fa-house-signal{--fa:"\\e012"}.fa-bars-progress,.fa-tasks-alt{--fa:"\\f828"}.fa-faucet-drip{--fa:"\\e006"}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:"\\f474"}.fa-ban-smoking,.fa-smoking-ban{--fa:"\\f54d"}.fa-terminal{--fa:"\\f120"}.fa-mobile-button{--fa:"\\f10b"}.fa-house-medical-flag{--fa:"\\e514"}.fa-basket-shopping,.fa-shopping-basket{--fa:"\\f291"}.fa-tape{--fa:"\\f4db"}.fa-bus-alt,.fa-bus-simple{--fa:"\\f55e"}.fa-eye{--fa:"\\f06e"}.fa-face-sad-cry,.fa-sad-cry{--fa:"\\f5b3"}.fa-audio-description{--fa:"\\f29e"}.fa-person-military-to-person{--fa:"\\e54c"}.fa-file-shield{--fa:"\\e4f0"}.fa-user-slash{--fa:"\\f506"}.fa-pen{--fa:"\\f304"}.fa-tower-observation{--fa:"\\e586"}.fa-file-code{--fa:"\\f1c9"}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:"\\f012"}.fa-bus{--fa:"\\f207"}.fa-heart-circle-xmark{--fa:"\\e501"}.fa-home-lg,.fa-house-chimney{--fa:"\\e3af"}.fa-window-maximize{--fa:"\\f2d0"}.fa-face-frown,.fa-frown{--fa:"\\f119"}.fa-prescription{--fa:"\\f5b1"}.fa-shop,.fa-store-alt{--fa:"\\f54f"}.fa-floppy-disk,.fa-save{--fa:"\\f0c7"}.fa-vihara{--fa:"\\f6a7"}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:"\\f515"}.fa-sort-asc,.fa-sort-up{--fa:"\\f0de"}.fa-comment-dots,.fa-commenting{--fa:"\\f4ad"}.fa-plant-wilt{--fa:"\\e5aa"}.fa-diamond{--fa:"\\f219"}.fa-face-grin-squint,.fa-grin-squint{--fa:"\\f585"}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:"\\f4c0"}.fa-chart-diagram{--fa:"\\e695"}.fa-bacterium{--fa:"\\e05a"}.fa-hand-pointer{--fa:"\\f25a"}.fa-drum-steelpan{--fa:"\\f56a"}.fa-hand-scissors{--fa:"\\f257"}.fa-hands-praying,.fa-praying-hands{--fa:"\\f684"}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:"\\f01e"}.fa-biohazard{--fa:"\\f780"}.fa-location,.fa-location-crosshairs{--fa:"\\f601"}.fa-mars-double{--fa:"\\f227"}.fa-child-dress{--fa:"\\e59c"}.fa-users-between-lines{--fa:"\\e591"}.fa-lungs-virus{--fa:"\\e067"}.fa-face-grin-tears,.fa-grin-tears{--fa:"\\f588"}.fa-phone{--fa:"\\f095"}.fa-calendar-times,.fa-calendar-xmark{--fa:"\\f273"}.fa-child-reaching{--fa:"\\e59d"}.fa-head-side-virus{--fa:"\\e064"}.fa-user-cog,.fa-user-gear{--fa:"\\f4fe"}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:"\\f163"}.fa-door-closed{--fa:"\\f52a"}.fa-shield-virus{--fa:"\\e06c"}.fa-dice-six{--fa:"\\f526"}.fa-mosquito-net{--fa:"\\e52c"}.fa-file-fragment{--fa:"\\e697"}.fa-bridge-water{--fa:"\\e4ce"}.fa-person-booth{--fa:"\\f756"}.fa-text-width{--fa:"\\f035"}.fa-hat-wizard{--fa:"\\f6e8"}.fa-pen-fancy{--fa:"\\f5ac"}.fa-digging,.fa-person-digging{--fa:"\\f85e"}.fa-trash{--fa:"\\f1f8"}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:"\\f629"}.fa-book-medical{--fa:"\\f7e6"}.fa-poo{--fa:"\\f2fe"}.fa-quote-right,.fa-quote-right-alt{--fa:"\\f10e"}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:"\\f553"}.fa-cubes{--fa:"\\f1b3"}.fa-divide{--fa:"\\f529"}.fa-tenge,.fa-tenge-sign{--fa:"\\f7d7"}.fa-headphones{--fa:"\\f025"}.fa-hands-holding{--fa:"\\f4c2"}.fa-hands-clapping{--fa:"\\e1a8"}.fa-republican{--fa:"\\f75e"}.fa-arrow-left{--fa:"\\f060"}.fa-person-circle-xmark{--fa:"\\e543"}.fa-ruler{--fa:"\\f545"}.fa-align-left{--fa:"\\f036"}.fa-dice-d6{--fa:"\\f6d1"}.fa-restroom{--fa:"\\f7bd"}.fa-j{--fa:"\\4a"}.fa-users-viewfinder{--fa:"\\e595"}.fa-file-video{--fa:"\\f1c8"}.fa-external-link-alt,.fa-up-right-from-square{--fa:"\\f35d"}.fa-table-cells,.fa-th{--fa:"\\f00a"}.fa-file-pdf{--fa:"\\f1c1"}.fa-bible,.fa-book-bible{--fa:"\\f647"}.fa-o{--fa:"\\4f"}.fa-medkit,.fa-suitcase-medical{--fa:"\\f0fa"}.fa-user-secret{--fa:"\\f21b"}.fa-otter{--fa:"\\f700"}.fa-female,.fa-person-dress{--fa:"\\f182"}.fa-comment-dollar{--fa:"\\f651"}.fa-briefcase-clock,.fa-business-time{--fa:"\\f64a"}.fa-table-cells-large,.fa-th-large{--fa:"\\f009"}.fa-book-tanakh,.fa-tanakh{--fa:"\\f827"}.fa-phone-volume,.fa-volume-control-phone{--fa:"\\f2a0"}.fa-hat-cowboy-side{--fa:"\\f8c1"}.fa-clipboard-user{--fa:"\\f7f3"}.fa-child{--fa:"\\f1ae"}.fa-lira-sign{--fa:"\\f195"}.fa-satellite{--fa:"\\f7bf"}.fa-plane-lock{--fa:"\\e558"}.fa-tag{--fa:"\\f02b"}.fa-comment{--fa:"\\f075"}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:"\\f1fd"}.fa-envelope{--fa:"\\f0e0"}.fa-angle-double-up,.fa-angles-up{--fa:"\\f102"}.fa-paperclip{--fa:"\\f0c6"}.fa-arrow-right-to-city{--fa:"\\e4b3"}.fa-ribbon{--fa:"\\f4d6"}.fa-lungs{--fa:"\\f604"}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:"\\f887"}.fa-litecoin-sign{--fa:"\\e1d3"}.fa-border-none{--fa:"\\f850"}.fa-circle-nodes{--fa:"\\e4e2"}.fa-parachute-box{--fa:"\\f4cd"}.fa-indent{--fa:"\\f03c"}.fa-truck-field-un{--fa:"\\e58e"}.fa-hourglass,.fa-hourglass-empty{--fa:"\\f254"}.fa-mountain{--fa:"\\f6fc"}.fa-user-doctor,.fa-user-md{--fa:"\\f0f0"}.fa-circle-info,.fa-info-circle{--fa:"\\f05a"}.fa-cloud-meatball{--fa:"\\f73b"}.fa-camera,.fa-camera-alt{--fa:"\\f030"}.fa-square-virus{--fa:"\\e578"}.fa-meteor{--fa:"\\f753"}.fa-car-on{--fa:"\\e4dd"}.fa-sleigh{--fa:"\\f7cc"}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:"\\f162"}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:"\\f4c1"}.fa-water{--fa:"\\f773"}.fa-calendar-check{--fa:"\\f274"}.fa-braille{--fa:"\\f2a1"}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:"\\f486"}.fa-landmark{--fa:"\\f66f"}.fa-truck{--fa:"\\f0d1"}.fa-crosshairs{--fa:"\\f05b"}.fa-person-cane{--fa:"\\e53c"}.fa-tent{--fa:"\\e57d"}.fa-vest-patches{--fa:"\\e086"}.fa-check-double{--fa:"\\f560"}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:"\\f15d"}.fa-money-bill-wheat{--fa:"\\e52a"}.fa-cookie{--fa:"\\f563"}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:"\\f0e2"}.fa-hard-drive,.fa-hdd{--fa:"\\f0a0"}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:"\\f586"}.fa-dumbbell{--fa:"\\f44b"}.fa-list-alt,.fa-rectangle-list{--fa:"\\f022"}.fa-tarp-droplet{--fa:"\\e57c"}.fa-house-medical-circle-check{--fa:"\\e511"}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:"\\f7ca"}.fa-calendar-plus{--fa:"\\f271"}.fa-plane-arrival{--fa:"\\f5af"}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:"\\f359"}.fa-subway,.fa-train-subway{--fa:"\\f239"}.fa-chart-gantt{--fa:"\\e0e4"}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:"\\e1bc"}.fa-crop-alt,.fa-crop-simple{--fa:"\\f565"}.fa-money-bill-1,.fa-money-bill-alt{--fa:"\\f3d1"}.fa-left-long,.fa-long-arrow-alt-left{--fa:"\\f30a"}.fa-dna{--fa:"\\f471"}.fa-virus-slash{--fa:"\\e075"}.fa-minus,.fa-subtract{--fa:"\\f068"}.fa-chess{--fa:"\\f439"}.fa-arrow-left-long,.fa-long-arrow-left{--fa:"\\f177"}.fa-plug-circle-check{--fa:"\\e55c"}.fa-street-view{--fa:"\\f21d"}.fa-franc-sign{--fa:"\\e18f"}.fa-volume-off{--fa:"\\f026"}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:"\\f2a3"}.fa-cog,.fa-gear{--fa:"\\f013"}.fa-droplet-slash,.fa-tint-slash{--fa:"\\f5c7"}.fa-mosque{--fa:"\\f678"}.fa-mosquito{--fa:"\\e52b"}.fa-star-of-david{--fa:"\\f69a"}.fa-person-military-rifle{--fa:"\\e54b"}.fa-cart-shopping,.fa-shopping-cart{--fa:"\\f07a"}.fa-vials{--fa:"\\f493"}.fa-plug-circle-plus{--fa:"\\e55f"}.fa-place-of-worship{--fa:"\\f67f"}.fa-grip-vertical{--fa:"\\f58e"}.fa-hexagon-nodes{--fa:"\\e699"}.fa-arrow-turn-up,.fa-level-up{--fa:"\\f148"}.fa-u{--fa:"\\55"}.fa-square-root-alt,.fa-square-root-variable{--fa:"\\f698"}.fa-clock,.fa-clock-four{--fa:"\\f017"}.fa-backward-step,.fa-step-backward{--fa:"\\f048"}.fa-pallet{--fa:"\\f482"}.fa-faucet{--fa:"\\e005"}.fa-baseball-bat-ball{--fa:"\\f432"}.fa-s{--fa:"\\53"}.fa-timeline{--fa:"\\e29c"}.fa-keyboard{--fa:"\\f11c"}.fa-caret-down{--fa:"\\f0d7"}.fa-clinic-medical,.fa-house-chimney-medical{--fa:"\\f7f2"}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:"\\f2c8"}.fa-mobile-android-alt,.fa-mobile-screen{--fa:"\\f3cf"}.fa-plane-up{--fa:"\\e22d"}.fa-piggy-bank{--fa:"\\f4d3"}.fa-battery-3,.fa-battery-half{--fa:"\\f242"}.fa-mountain-city{--fa:"\\e52e"}.fa-coins{--fa:"\\f51e"}.fa-khanda{--fa:"\\f66d"}.fa-sliders,.fa-sliders-h{--fa:"\\f1de"}.fa-folder-tree{--fa:"\\f802"}.fa-network-wired{--fa:"\\f6ff"}.fa-map-pin{--fa:"\\f276"}.fa-hamsa{--fa:"\\f665"}.fa-cent-sign{--fa:"\\e3f5"}.fa-flask{--fa:"\\f0c3"}.fa-person-pregnant{--fa:"\\e31e"}.fa-wand-sparkles{--fa:"\\f72b"}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:"\\f142"}.fa-ticket{--fa:"\\f145"}.fa-power-off{--fa:"\\f011"}.fa-long-arrow-alt-right,.fa-right-long{--fa:"\\f30b"}.fa-flag-usa{--fa:"\\f74d"}.fa-laptop-file{--fa:"\\e51d"}.fa-teletype,.fa-tty{--fa:"\\f1e4"}.fa-diagram-next{--fa:"\\e476"}.fa-person-rifle{--fa:"\\e54e"}.fa-house-medical-circle-exclamation{--fa:"\\e512"}.fa-closed-captioning{--fa:"\\f20a"}.fa-hiking,.fa-person-hiking{--fa:"\\f6ec"}.fa-venus-double{--fa:"\\f226"}.fa-images{--fa:"\\f302"}.fa-calculator{--fa:"\\f1ec"}.fa-people-pulling{--fa:"\\e535"}.fa-n{--fa:"\\4e"}.fa-cable-car,.fa-tram{--fa:"\\f7da"}.fa-cloud-rain{--fa:"\\f73d"}.fa-building-circle-xmark{--fa:"\\e4d4"}.fa-ship{--fa:"\\f21a"}.fa-arrows-down-to-line{--fa:"\\e4b8"}.fa-download{--fa:"\\f019"}.fa-face-grin,.fa-grin{--fa:"\\f580"}.fa-backspace,.fa-delete-left{--fa:"\\f55a"}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:"\\f1fb"}.fa-file-circle-check{--fa:"\\e5a0"}.fa-forward{--fa:"\\f04e"}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:"\\f3ce"}.fa-face-meh,.fa-meh{--fa:"\\f11a"}.fa-align-center{--fa:"\\f037"}.fa-book-dead,.fa-book-skull{--fa:"\\f6b7"}.fa-drivers-license,.fa-id-card{--fa:"\\f2c2"}.fa-dedent,.fa-outdent{--fa:"\\f03b"}.fa-heart-circle-exclamation{--fa:"\\e4fe"}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:"\\f015"}.fa-calendar-week{--fa:"\\f784"}.fa-laptop-medical{--fa:"\\f812"}.fa-b{--fa:"\\42"}.fa-file-medical{--fa:"\\f477"}.fa-dice-one{--fa:"\\f525"}.fa-kiwi-bird{--fa:"\\f535"}.fa-arrow-right-arrow-left,.fa-exchange{--fa:"\\f0ec"}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:"\\f2f9"}.fa-cutlery,.fa-utensils{--fa:"\\f2e7"}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:"\\f161"}.fa-mill-sign{--fa:"\\e1ed"}.fa-bowl-rice{--fa:"\\e2eb"}.fa-skull{--fa:"\\f54c"}.fa-broadcast-tower,.fa-tower-broadcast{--fa:"\\f519"}.fa-truck-pickup{--fa:"\\f63c"}.fa-long-arrow-alt-up,.fa-up-long{--fa:"\\f30c"}.fa-stop{--fa:"\\f04d"}.fa-code-merge{--fa:"\\f387"}.fa-upload{--fa:"\\f093"}.fa-hurricane{--fa:"\\f751"}.fa-mound{--fa:"\\e52d"}.fa-toilet-portable{--fa:"\\e583"}.fa-compact-disc{--fa:"\\f51f"}.fa-file-arrow-down,.fa-file-download{--fa:"\\f56d"}.fa-caravan{--fa:"\\f8ff"}.fa-shield-cat{--fa:"\\e572"}.fa-bolt,.fa-zap{--fa:"\\f0e7"}.fa-glass-water{--fa:"\\e4f4"}.fa-oil-well{--fa:"\\e532"}.fa-vault{--fa:"\\e2c5"}.fa-mars{--fa:"\\f222"}.fa-toilet{--fa:"\\f7d8"}.fa-plane-circle-xmark{--fa:"\\e557"}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:"\\f157"}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:"\\f158"}.fa-sun{--fa:"\\f185"}.fa-guitar{--fa:"\\f7a6"}.fa-face-laugh-wink,.fa-laugh-wink{--fa:"\\f59c"}.fa-horse-head{--fa:"\\f7ab"}.fa-bore-hole{--fa:"\\e4c3"}.fa-industry{--fa:"\\f275"}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:"\\f358"}.fa-arrows-turn-to-dots{--fa:"\\e4c1"}.fa-florin-sign{--fa:"\\e184"}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:"\\f884"}.fa-less-than{--fa:"\\3c"}.fa-angle-down{--fa:"\\f107"}.fa-car-tunnel{--fa:"\\e4de"}.fa-head-side-cough{--fa:"\\e061"}.fa-grip-lines{--fa:"\\f7a4"}.fa-thumbs-down{--fa:"\\f165"}.fa-user-lock{--fa:"\\f502"}.fa-arrow-right-long,.fa-long-arrow-right{--fa:"\\f178"}.fa-anchor-circle-xmark{--fa:"\\e4ac"}.fa-ellipsis,.fa-ellipsis-h{--fa:"\\f141"}.fa-chess-pawn{--fa:"\\f443"}.fa-first-aid,.fa-kit-medical{--fa:"\\f479"}.fa-person-through-window{--fa:"\\e5a9"}.fa-toolbox{--fa:"\\f552"}.fa-hands-holding-circle{--fa:"\\e4fb"}.fa-bug{--fa:"\\f188"}.fa-credit-card,.fa-credit-card-alt{--fa:"\\f09d"}.fa-automobile,.fa-car{--fa:"\\f1b9"}.fa-hand-holding-hand{--fa:"\\e4f7"}.fa-book-open-reader,.fa-book-reader{--fa:"\\f5da"}.fa-mountain-sun{--fa:"\\e52f"}.fa-arrows-left-right-to-line{--fa:"\\e4ba"}.fa-dice-d20{--fa:"\\f6cf"}.fa-truck-droplet{--fa:"\\e58c"}.fa-file-circle-xmark{--fa:"\\e5a1"}.fa-temperature-arrow-up,.fa-temperature-up{--fa:"\\e040"}.fa-medal{--fa:"\\f5a2"}.fa-bed{--fa:"\\f236"}.fa-h-square,.fa-square-h{--fa:"\\f0fd"}.fa-podcast{--fa:"\\f2ce"}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:"\\f2c7"}.fa-bell{--fa:"\\f0f3"}.fa-superscript{--fa:"\\f12b"}.fa-plug-circle-xmark{--fa:"\\e560"}.fa-star-of-life{--fa:"\\f621"}.fa-phone-slash{--fa:"\\f3dd"}.fa-paint-roller{--fa:"\\f5aa"}.fa-hands-helping,.fa-handshake-angle{--fa:"\\f4c4"}.fa-location-dot,.fa-map-marker-alt{--fa:"\\f3c5"}.fa-file{--fa:"\\f15b"}.fa-greater-than{--fa:"\\3e"}.fa-person-swimming,.fa-swimmer{--fa:"\\f5c4"}.fa-arrow-down{--fa:"\\f063"}.fa-droplet,.fa-tint{--fa:"\\f043"}.fa-eraser{--fa:"\\f12d"}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:"\\f57d"}.fa-person-burst{--fa:"\\e53b"}.fa-dove{--fa:"\\f4ba"}.fa-battery-0,.fa-battery-empty{--fa:"\\f244"}.fa-socks{--fa:"\\f696"}.fa-inbox{--fa:"\\f01c"}.fa-section{--fa:"\\e447"}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:"\\f625"}.fa-envelope-open-text{--fa:"\\f658"}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:"\\f0f8"}.fa-wine-bottle{--fa:"\\f72f"}.fa-chess-rook{--fa:"\\f447"}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:"\\f550"}.fa-dharmachakra{--fa:"\\f655"}.fa-hotdog{--fa:"\\f80f"}.fa-blind,.fa-person-walking-with-cane{--fa:"\\f29d"}.fa-drum{--fa:"\\f569"}.fa-ice-cream{--fa:"\\f810"}.fa-heart-circle-bolt{--fa:"\\e4fc"}.fa-fax{--fa:"\\f1ac"}.fa-paragraph{--fa:"\\f1dd"}.fa-check-to-slot,.fa-vote-yea{--fa:"\\f772"}.fa-star-half{--fa:"\\f089"}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:"\\f468"}.fa-chain,.fa-link{--fa:"\\f0c1"}.fa-assistive-listening-systems,.fa-ear-listen{--fa:"\\f2a2"}.fa-tree-city{--fa:"\\e587"}.fa-play{--fa:"\\f04b"}.fa-font{--fa:"\\f031"}.fa-table-cells-row-lock{--fa:"\\e67a"}.fa-rupiah-sign{--fa:"\\e23d"}.fa-magnifying-glass,.fa-search{--fa:"\\f002"}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:"\\f45d"}.fa-diagnoses,.fa-person-dots-from-line{--fa:"\\f470"}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:"\\f82a"}.fa-naira-sign{--fa:"\\e1f6"}.fa-cart-arrow-down{--fa:"\\f218"}.fa-walkie-talkie{--fa:"\\f8ef"}.fa-file-edit,.fa-file-pen{--fa:"\\f31c"}.fa-receipt{--fa:"\\f543"}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:"\\f14b"}.fa-suitcase-rolling{--fa:"\\f5c1"}.fa-person-circle-exclamation{--fa:"\\e53f"}.fa-chevron-down{--fa:"\\f078"}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:"\\f240"}.fa-skull-crossbones{--fa:"\\f714"}.fa-code-compare{--fa:"\\e13a"}.fa-list-dots,.fa-list-ul{--fa:"\\f0ca"}.fa-school-lock{--fa:"\\e56f"}.fa-tower-cell{--fa:"\\e585"}.fa-down-long,.fa-long-arrow-alt-down{--fa:"\\f309"}.fa-ranking-star{--fa:"\\e561"}.fa-chess-king{--fa:"\\f43f"}.fa-person-harassing{--fa:"\\e549"}.fa-brazilian-real-sign{--fa:"\\e46c"}.fa-landmark-alt,.fa-landmark-dome{--fa:"\\f752"}.fa-arrow-up{--fa:"\\f062"}.fa-television,.fa-tv,.fa-tv-alt{--fa:"\\f26c"}.fa-shrimp{--fa:"\\e448"}.fa-list-check,.fa-tasks{--fa:"\\f0ae"}.fa-jug-detergent{--fa:"\\e519"}.fa-circle-user,.fa-user-circle{--fa:"\\f2bd"}.fa-user-shield{--fa:"\\f505"}.fa-wind{--fa:"\\f72e"}.fa-car-burst,.fa-car-crash{--fa:"\\f5e1"}.fa-y{--fa:"\\59"}.fa-person-snowboarding,.fa-snowboarding{--fa:"\\f7ce"}.fa-shipping-fast,.fa-truck-fast{--fa:"\\f48b"}.fa-fish{--fa:"\\f578"}.fa-user-graduate{--fa:"\\f501"}.fa-adjust,.fa-circle-half-stroke{--fa:"\\f042"}.fa-clapperboard{--fa:"\\e131"}.fa-circle-radiation,.fa-radiation-alt{--fa:"\\f7ba"}.fa-baseball,.fa-baseball-ball{--fa:"\\f433"}.fa-jet-fighter-up{--fa:"\\e518"}.fa-diagram-project,.fa-project-diagram{--fa:"\\f542"}.fa-copy{--fa:"\\f0c5"}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:"\\f6a9"}.fa-hand-sparkles{--fa:"\\e05d"}.fa-grip,.fa-grip-horizontal{--fa:"\\f58d"}.fa-share-from-square,.fa-share-square{--fa:"\\f14d"}.fa-child-combatant,.fa-child-rifle{--fa:"\\e4e0"}.fa-gun{--fa:"\\e19b"}.fa-phone-square,.fa-square-phone{--fa:"\\f098"}.fa-add,.fa-plus{--fa:"\\2b"}.fa-expand{--fa:"\\f065"}.fa-computer{--fa:"\\e4e5"}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:"\\f00d"}.fa-arrows,.fa-arrows-up-down-left-right{--fa:"\\f047"}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:"\\f51c"}.fa-peso-sign{--fa:"\\e222"}.fa-building-shield{--fa:"\\e4d8"}.fa-baby{--fa:"\\f77c"}.fa-users-line{--fa:"\\e592"}.fa-quote-left,.fa-quote-left-alt{--fa:"\\f10d"}.fa-tractor{--fa:"\\f722"}.fa-trash-arrow-up,.fa-trash-restore{--fa:"\\f829"}.fa-arrow-down-up-lock{--fa:"\\e4b0"}.fa-lines-leaning{--fa:"\\e51e"}.fa-ruler-combined{--fa:"\\f546"}.fa-copyright{--fa:"\\f1f9"}.fa-equals{--fa:"\\3d"}.fa-blender{--fa:"\\f517"}.fa-teeth{--fa:"\\f62e"}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:"\\f20b"}.fa-map{--fa:"\\f279"}.fa-rocket{--fa:"\\f135"}.fa-photo-film,.fa-photo-video{--fa:"\\f87c"}.fa-folder-minus{--fa:"\\f65d"}.fa-hexagon-nodes-bolt{--fa:"\\e69a"}.fa-store{--fa:"\\f54e"}.fa-arrow-trend-up{--fa:"\\e098"}.fa-plug-circle-minus{--fa:"\\e55e"}.fa-sign,.fa-sign-hanging{--fa:"\\f4d9"}.fa-bezier-curve{--fa:"\\f55b"}.fa-bell-slash{--fa:"\\f1f6"}.fa-tablet,.fa-tablet-android{--fa:"\\f3fb"}.fa-school-flag{--fa:"\\e56e"}.fa-fill{--fa:"\\f575"}.fa-angle-up{--fa:"\\f106"}.fa-drumstick-bite{--fa:"\\f6d7"}.fa-holly-berry{--fa:"\\f7aa"}.fa-chevron-left{--fa:"\\f053"}.fa-bacteria{--fa:"\\e059"}.fa-hand-lizard{--fa:"\\f258"}.fa-notdef{--fa:"\\e1fe"}.fa-disease{--fa:"\\f7fa"}.fa-briefcase-medical{--fa:"\\f469"}.fa-genderless{--fa:"\\f22d"}.fa-chevron-right{--fa:"\\f054"}.fa-retweet{--fa:"\\f079"}.fa-car-alt,.fa-car-rear{--fa:"\\f5de"}.fa-pump-soap{--fa:"\\e06b"}.fa-video-slash{--fa:"\\f4e2"}.fa-battery-2,.fa-battery-quarter{--fa:"\\f243"}.fa-radio{--fa:"\\f8d7"}.fa-baby-carriage,.fa-carriage-baby{--fa:"\\f77d"}.fa-traffic-light{--fa:"\\f637"}.fa-thermometer{--fa:"\\f491"}.fa-vr-cardboard{--fa:"\\f729"}.fa-hand-middle-finger{--fa:"\\f806"}.fa-percent,.fa-percentage{--fa:"\\25"}.fa-truck-moving{--fa:"\\f4df"}.fa-glass-water-droplet{--fa:"\\e4f5"}.fa-display{--fa:"\\e163"}.fa-face-smile,.fa-smile{--fa:"\\f118"}.fa-thumb-tack,.fa-thumbtack{--fa:"\\f08d"}.fa-trophy{--fa:"\\f091"}.fa-person-praying,.fa-pray{--fa:"\\f683"}.fa-hammer{--fa:"\\f6e3"}.fa-hand-peace{--fa:"\\f25b"}.fa-rotate,.fa-sync-alt{--fa:"\\f2f1"}.fa-spinner{--fa:"\\f110"}.fa-robot{--fa:"\\f544"}.fa-peace{--fa:"\\f67c"}.fa-cogs,.fa-gears{--fa:"\\f085"}.fa-warehouse{--fa:"\\f494"}.fa-arrow-up-right-dots{--fa:"\\e4b7"}.fa-splotch{--fa:"\\f5bc"}.fa-face-grin-hearts,.fa-grin-hearts{--fa:"\\f584"}.fa-dice-four{--fa:"\\f524"}.fa-sim-card{--fa:"\\f7c4"}.fa-transgender,.fa-transgender-alt{--fa:"\\f225"}.fa-mercury{--fa:"\\f223"}.fa-arrow-turn-down,.fa-level-down{--fa:"\\f149"}.fa-person-falling-burst{--fa:"\\e547"}.fa-award{--fa:"\\f559"}.fa-ticket-alt,.fa-ticket-simple{--fa:"\\f3ff"}.fa-building{--fa:"\\f1ad"}.fa-angle-double-left,.fa-angles-left{--fa:"\\f100"}.fa-qrcode{--fa:"\\f029"}.fa-clock-rotate-left,.fa-history{--fa:"\\f1da"}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:"\\f583"}.fa-arrow-right-from-file,.fa-file-export{--fa:"\\f56e"}.fa-shield,.fa-shield-blank{--fa:"\\f132"}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:"\\f885"}.fa-comment-nodes{--fa:"\\e696"}.fa-house-medical{--fa:"\\e3b2"}.fa-golf-ball,.fa-golf-ball-tee{--fa:"\\f450"}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:"\\f137"}.fa-house-chimney-window{--fa:"\\e00d"}.fa-pen-nib{--fa:"\\f5ad"}.fa-tent-arrow-turn-left{--fa:"\\e580"}.fa-tents{--fa:"\\e582"}.fa-magic,.fa-wand-magic{--fa:"\\f0d0"}.fa-dog{--fa:"\\f6d3"}.fa-carrot{--fa:"\\f787"}.fa-moon{--fa:"\\f186"}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:"\\f5ce"}.fa-cheese{--fa:"\\f7ef"}.fa-yin-yang{--fa:"\\f6ad"}.fa-music{--fa:"\\f001"}.fa-code-commit{--fa:"\\f386"}.fa-temperature-low{--fa:"\\f76b"}.fa-biking,.fa-person-biking{--fa:"\\f84a"}.fa-broom{--fa:"\\f51a"}.fa-shield-heart{--fa:"\\e574"}.fa-gopuram{--fa:"\\f664"}.fa-earth-oceania,.fa-globe-oceania{--fa:"\\e47b"}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:"\\f2d3"}.fa-hashtag{--fa:"\\23"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:"\\f424"}.fa-oil-can{--fa:"\\f613"}.fa-t{--fa:"\\54"}.fa-hippo{--fa:"\\f6ed"}.fa-chart-column{--fa:"\\e0e3"}.fa-infinity{--fa:"\\f534"}.fa-vial-circle-check{--fa:"\\e596"}.fa-person-arrow-down-to-line{--fa:"\\e538"}.fa-voicemail{--fa:"\\f897"}.fa-fan{--fa:"\\f863"}.fa-person-walking-luggage{--fa:"\\e554"}.fa-arrows-alt-v,.fa-up-down{--fa:"\\f338"}.fa-cloud-moon-rain{--fa:"\\f73c"}.fa-calendar{--fa:"\\f133"}.fa-trailer{--fa:"\\e041"}.fa-bahai,.fa-haykal{--fa:"\\f666"}.fa-sd-card{--fa:"\\f7c2"}.fa-dragon{--fa:"\\f6d5"}.fa-shoe-prints{--fa:"\\f54b"}.fa-circle-plus,.fa-plus-circle{--fa:"\\f055"}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:"\\f58b"}.fa-hand-holding{--fa:"\\f4bd"}.fa-plug-circle-exclamation{--fa:"\\e55d"}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:"\\f127"}.fa-clone{--fa:"\\f24d"}.fa-person-walking-arrow-loop-left{--fa:"\\e551"}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:"\\f882"}.fa-fire-alt,.fa-fire-flame-curved{--fa:"\\f7e4"}.fa-tornado{--fa:"\\f76f"}.fa-file-circle-plus{--fa:"\\e494"}.fa-book-quran,.fa-quran{--fa:"\\f687"}.fa-anchor{--fa:"\\f13d"}.fa-border-all{--fa:"\\f84c"}.fa-angry,.fa-face-angry{--fa:"\\f556"}.fa-cookie-bite{--fa:"\\f564"}.fa-arrow-trend-down{--fa:"\\e097"}.fa-feed,.fa-rss{--fa:"\\f09e"}.fa-draw-polygon{--fa:"\\f5ee"}.fa-balance-scale,.fa-scale-balanced{--fa:"\\f24e"}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:"\\f62a"}.fa-shower{--fa:"\\f2cc"}.fa-desktop,.fa-desktop-alt{--fa:"\\f390"}.fa-m{--fa:"\\4d"}.fa-table-list,.fa-th-list{--fa:"\\f00b"}.fa-comment-sms,.fa-sms{--fa:"\\f7cd"}.fa-book{--fa:"\\f02d"}.fa-user-plus{--fa:"\\f234"}.fa-check{--fa:"\\f00c"}.fa-battery-4,.fa-battery-three-quarters{--fa:"\\f241"}.fa-house-circle-check{--fa:"\\e509"}.fa-angle-left{--fa:"\\f104"}.fa-diagram-successor{--fa:"\\e47a"}.fa-truck-arrow-right{--fa:"\\e58b"}.fa-arrows-split-up-and-left{--fa:"\\e4bc"}.fa-fist-raised,.fa-hand-fist{--fa:"\\f6de"}.fa-cloud-moon{--fa:"\\f6c3"}.fa-briefcase{--fa:"\\f0b1"}.fa-person-falling{--fa:"\\e546"}.fa-image-portrait,.fa-portrait{--fa:"\\f3e0"}.fa-user-tag{--fa:"\\f507"}.fa-rug{--fa:"\\e569"}.fa-earth-europe,.fa-globe-europe{--fa:"\\f7a2"}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:"\\f59d"}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:"\\f410"}.fa-baht-sign{--fa:"\\e0ac"}.fa-book-open{--fa:"\\f518"}.fa-book-journal-whills,.fa-journal-whills{--fa:"\\f66a"}.fa-handcuffs{--fa:"\\e4f8"}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:"\\f071"}.fa-database{--fa:"\\f1c0"}.fa-mail-forward,.fa-share{--fa:"\\f064"}.fa-bottle-droplet{--fa:"\\e4c4"}.fa-mask-face{--fa:"\\e1d7"}.fa-hill-rockslide{--fa:"\\e508"}.fa-exchange-alt,.fa-right-left{--fa:"\\f362"}.fa-paper-plane{--fa:"\\f1d8"}.fa-road-circle-exclamation{--fa:"\\e565"}.fa-dungeon{--fa:"\\f6d9"}.fa-align-right{--fa:"\\f038"}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:"\\f53b"}.fa-life-ring{--fa:"\\f1cd"}.fa-hands,.fa-sign-language,.fa-signing{--fa:"\\f2a7"}.fa-calendar-day{--fa:"\\f783"}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:"\\f5c5"}.fa-arrows-up-down,.fa-arrows-v{--fa:"\\f07d"}.fa-face-grimace,.fa-grimace{--fa:"\\f57f"}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:"\\e2ce"}.fa-level-down-alt,.fa-turn-down{--fa:"\\f3be"}.fa-person-walking-arrow-right{--fa:"\\e552"}.fa-envelope-square,.fa-square-envelope{--fa:"\\f199"}.fa-dice{--fa:"\\f522"}.fa-bowling-ball{--fa:"\\f436"}.fa-brain{--fa:"\\f5dc"}.fa-band-aid,.fa-bandage{--fa:"\\f462"}.fa-calendar-minus{--fa:"\\f272"}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:"\\f057"}.fa-gifts{--fa:"\\f79c"}.fa-hotel{--fa:"\\f594"}.fa-earth-asia,.fa-globe-asia{--fa:"\\f57e"}.fa-id-card-alt,.fa-id-card-clip{--fa:"\\f47f"}.fa-magnifying-glass-plus,.fa-search-plus{--fa:"\\f00e"}.fa-thumbs-up{--fa:"\\f164"}.fa-user-clock{--fa:"\\f4fd"}.fa-allergies,.fa-hand-dots{--fa:"\\f461"}.fa-file-invoice{--fa:"\\f570"}.fa-window-minimize{--fa:"\\f2d1"}.fa-coffee,.fa-mug-saucer{--fa:"\\f0f4"}.fa-brush{--fa:"\\f55d"}.fa-file-half-dashed{--fa:"\\e698"}.fa-mask{--fa:"\\f6fa"}.fa-magnifying-glass-minus,.fa-search-minus{--fa:"\\f010"}.fa-ruler-vertical{--fa:"\\f548"}.fa-user-alt,.fa-user-large{--fa:"\\f406"}.fa-train-tram{--fa:"\\e5b4"}.fa-user-nurse{--fa:"\\f82f"}.fa-syringe{--fa:"\\f48e"}.fa-cloud-sun{--fa:"\\f6c4"}.fa-stopwatch-20{--fa:"\\e06f"}.fa-square-full{--fa:"\\f45c"}.fa-magnet{--fa:"\\f076"}.fa-jar{--fa:"\\e516"}.fa-note-sticky,.fa-sticky-note{--fa:"\\f249"}.fa-bug-slash{--fa:"\\e490"}.fa-arrow-up-from-water-pump{--fa:"\\e4b6"}.fa-bone{--fa:"\\f5d7"}.fa-table-cells-row-unlock{--fa:"\\e691"}.fa-user-injured{--fa:"\\f728"}.fa-face-sad-tear,.fa-sad-tear{--fa:"\\f5b4"}.fa-plane{--fa:"\\f072"}.fa-tent-arrows-down{--fa:"\\e581"}.fa-exclamation{--fa:"\\21"}.fa-arrows-spin{--fa:"\\e4bb"}.fa-print{--fa:"\\f02f"}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:"\\e2bb"}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:"\\24"}.fa-x{--fa:"\\58"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:"\\f688"}.fa-users-cog,.fa-users-gear{--fa:"\\f509"}.fa-person-military-pointing{--fa:"\\e54a"}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:"\\f19c"}.fa-umbrella{--fa:"\\f0e9"}.fa-trowel{--fa:"\\e589"}.fa-d{--fa:"\\44"}.fa-stapler{--fa:"\\e5af"}.fa-masks-theater,.fa-theater-masks{--fa:"\\f630"}.fa-kip-sign{--fa:"\\e1c4"}.fa-hand-point-left{--fa:"\\f0a5"}.fa-handshake-alt,.fa-handshake-simple{--fa:"\\f4c6"}.fa-fighter-jet,.fa-jet-fighter{--fa:"\\f0fb"}.fa-share-alt-square,.fa-square-share-nodes{--fa:"\\f1e1"}.fa-barcode{--fa:"\\f02a"}.fa-plus-minus{--fa:"\\e43c"}.fa-video,.fa-video-camera{--fa:"\\f03d"}.fa-graduation-cap,.fa-mortar-board{--fa:"\\f19d"}.fa-hand-holding-medical{--fa:"\\e05c"}.fa-person-circle-check{--fa:"\\e53e"}.fa-level-up-alt,.fa-turn-up{--fa:"\\f3bf"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:"\\f3d0"}.fa-hooli{--fa:"\\f427"}.fa-yelp{--fa:"\\f1e9"}.fa-cc-visa{--fa:"\\f1f0"}.fa-lastfm{--fa:"\\f202"}.fa-shopware{--fa:"\\f5b5"}.fa-creative-commons-nc{--fa:"\\f4e8"}.fa-aws{--fa:"\\f375"}.fa-redhat{--fa:"\\f7bc"}.fa-yoast{--fa:"\\f2b1"}.fa-cloudflare{--fa:"\\e07d"}.fa-ups{--fa:"\\f7e0"}.fa-pixiv{--fa:"\\e640"}.fa-wpexplorer{--fa:"\\f2de"}.fa-dyalog{--fa:"\\f399"}.fa-bity{--fa:"\\f37a"}.fa-stackpath{--fa:"\\f842"}.fa-buysellads{--fa:"\\f20d"}.fa-first-order{--fa:"\\f2b0"}.fa-modx{--fa:"\\f285"}.fa-guilded{--fa:"\\e07e"}.fa-vnv{--fa:"\\f40b"}.fa-js-square,.fa-square-js{--fa:"\\f3b9"}.fa-microsoft{--fa:"\\f3ca"}.fa-qq{--fa:"\\f1d6"}.fa-orcid{--fa:"\\f8d2"}.fa-java{--fa:"\\f4e4"}.fa-invision{--fa:"\\f7b0"}.fa-creative-commons-pd-alt{--fa:"\\f4ed"}.fa-centercode{--fa:"\\f380"}.fa-glide-g{--fa:"\\f2a6"}.fa-drupal{--fa:"\\f1a9"}.fa-jxl{--fa:"\\e67b"}.fa-dart-lang{--fa:"\\e693"}.fa-hire-a-helper{--fa:"\\f3b0"}.fa-creative-commons-by{--fa:"\\f4e7"}.fa-unity{--fa:"\\e049"}.fa-whmcs{--fa:"\\f40d"}.fa-rocketchat{--fa:"\\f3e8"}.fa-vk{--fa:"\\f189"}.fa-untappd{--fa:"\\f405"}.fa-mailchimp{--fa:"\\f59e"}.fa-css3-alt{--fa:"\\f38b"}.fa-reddit-square,.fa-square-reddit{--fa:"\\f1a2"}.fa-vimeo-v{--fa:"\\f27d"}.fa-contao{--fa:"\\f26d"}.fa-square-font-awesome{--fa:"\\e5ad"}.fa-deskpro{--fa:"\\f38f"}.fa-brave{--fa:"\\e63c"}.fa-sistrix{--fa:"\\f3ee"}.fa-instagram-square,.fa-square-instagram{--fa:"\\e055"}.fa-battle-net{--fa:"\\f835"}.fa-the-red-yeti{--fa:"\\f69d"}.fa-hacker-news-square,.fa-square-hacker-news{--fa:"\\f3af"}.fa-edge{--fa:"\\f282"}.fa-threads{--fa:"\\e618"}.fa-napster{--fa:"\\f3d2"}.fa-snapchat-square,.fa-square-snapchat{--fa:"\\f2ad"}.fa-google-plus-g{--fa:"\\f0d5"}.fa-artstation{--fa:"\\f77a"}.fa-markdown{--fa:"\\f60f"}.fa-sourcetree{--fa:"\\f7d3"}.fa-google-plus{--fa:"\\f2b3"}.fa-diaspora{--fa:"\\f791"}.fa-foursquare{--fa:"\\f180"}.fa-stack-overflow{--fa:"\\f16c"}.fa-github-alt{--fa:"\\f113"}.fa-phoenix-squadron{--fa:"\\f511"}.fa-pagelines{--fa:"\\f18c"}.fa-algolia{--fa:"\\f36c"}.fa-red-river{--fa:"\\f3e3"}.fa-creative-commons-sa{--fa:"\\f4ef"}.fa-safari{--fa:"\\f267"}.fa-google{--fa:"\\f1a0"}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:"\\f35c"}.fa-atlassian{--fa:"\\f77b"}.fa-linkedin-in{--fa:"\\f0e1"}.fa-digital-ocean{--fa:"\\f391"}.fa-nimblr{--fa:"\\f5a8"}.fa-chromecast{--fa:"\\f838"}.fa-evernote{--fa:"\\f839"}.fa-hacker-news{--fa:"\\f1d4"}.fa-creative-commons-sampling{--fa:"\\f4f0"}.fa-adversal{--fa:"\\f36a"}.fa-creative-commons{--fa:"\\f25e"}.fa-watchman-monitoring{--fa:"\\e087"}.fa-fonticons{--fa:"\\f280"}.fa-weixin{--fa:"\\f1d7"}.fa-shirtsinbulk{--fa:"\\f214"}.fa-codepen{--fa:"\\f1cb"}.fa-git-alt{--fa:"\\f841"}.fa-lyft{--fa:"\\f3c3"}.fa-rev{--fa:"\\f5b2"}.fa-windows{--fa:"\\f17a"}.fa-wizards-of-the-coast{--fa:"\\f730"}.fa-square-viadeo,.fa-viadeo-square{--fa:"\\f2aa"}.fa-meetup{--fa:"\\f2e0"}.fa-centos{--fa:"\\f789"}.fa-adn{--fa:"\\f170"}.fa-cloudsmith{--fa:"\\f384"}.fa-opensuse{--fa:"\\e62b"}.fa-pied-piper-alt{--fa:"\\f1a8"}.fa-dribbble-square,.fa-square-dribbble{--fa:"\\f397"}.fa-codiepie{--fa:"\\f284"}.fa-node{--fa:"\\f419"}.fa-mix{--fa:"\\f3cb"}.fa-steam{--fa:"\\f1b6"}.fa-cc-apple-pay{--fa:"\\f416"}.fa-scribd{--fa:"\\f28a"}.fa-debian{--fa:"\\e60b"}.fa-openid{--fa:"\\f19b"}.fa-instalod{--fa:"\\e081"}.fa-files-pinwheel{--fa:"\\e69f"}.fa-expeditedssl{--fa:"\\f23e"}.fa-sellcast{--fa:"\\f2da"}.fa-square-twitter,.fa-twitter-square{--fa:"\\f081"}.fa-r-project{--fa:"\\f4f7"}.fa-delicious{--fa:"\\f1a5"}.fa-freebsd{--fa:"\\f3a4"}.fa-vuejs{--fa:"\\f41f"}.fa-accusoft{--fa:"\\f369"}.fa-ioxhost{--fa:"\\f208"}.fa-fonticons-fi{--fa:"\\f3a2"}.fa-app-store{--fa:"\\f36f"}.fa-cc-mastercard{--fa:"\\f1f1"}.fa-itunes-note{--fa:"\\f3b5"}.fa-golang{--fa:"\\e40f"}.fa-kickstarter,.fa-square-kickstarter{--fa:"\\f3bb"}.fa-grav{--fa:"\\f2d6"}.fa-weibo{--fa:"\\f18a"}.fa-uncharted{--fa:"\\e084"}.fa-firstdraft{--fa:"\\f3a1"}.fa-square-youtube,.fa-youtube-square{--fa:"\\f431"}.fa-wikipedia-w{--fa:"\\f266"}.fa-rendact,.fa-wpressr{--fa:"\\f3e4"}.fa-angellist{--fa:"\\f209"}.fa-galactic-republic{--fa:"\\f50c"}.fa-nfc-directional{--fa:"\\e530"}.fa-skype{--fa:"\\f17e"}.fa-joget{--fa:"\\f3b7"}.fa-fedora{--fa:"\\f798"}.fa-stripe-s{--fa:"\\f42a"}.fa-meta{--fa:"\\e49b"}.fa-laravel{--fa:"\\f3bd"}.fa-hotjar{--fa:"\\f3b1"}.fa-bluetooth-b{--fa:"\\f294"}.fa-square-letterboxd{--fa:"\\e62e"}.fa-sticker-mule{--fa:"\\f3f7"}.fa-creative-commons-zero{--fa:"\\f4f3"}.fa-hips{--fa:"\\f452"}.fa-css{--fa:"\\e6a2"}.fa-behance{--fa:"\\f1b4"}.fa-reddit{--fa:"\\f1a1"}.fa-discord{--fa:"\\f392"}.fa-chrome{--fa:"\\f268"}.fa-app-store-ios{--fa:"\\f370"}.fa-cc-discover{--fa:"\\f1f2"}.fa-wpbeginner{--fa:"\\f297"}.fa-confluence{--fa:"\\f78d"}.fa-shoelace{--fa:"\\e60c"}.fa-mdb{--fa:"\\f8ca"}.fa-dochub{--fa:"\\f394"}.fa-accessible-icon{--fa:"\\f368"}.fa-ebay{--fa:"\\f4f4"}.fa-amazon{--fa:"\\f270"}.fa-unsplash{--fa:"\\e07c"}.fa-yarn{--fa:"\\f7e3"}.fa-square-steam,.fa-steam-square{--fa:"\\f1b7"}.fa-500px{--fa:"\\f26e"}.fa-square-vimeo,.fa-vimeo-square{--fa:"\\f194"}.fa-asymmetrik{--fa:"\\f372"}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:"\\f2b4"}.fa-gratipay{--fa:"\\f184"}.fa-apple{--fa:"\\f179"}.fa-hive{--fa:"\\e07f"}.fa-gitkraken{--fa:"\\f3a6"}.fa-keybase{--fa:"\\f4f5"}.fa-apple-pay{--fa:"\\f415"}.fa-padlet{--fa:"\\e4a0"}.fa-amazon-pay{--fa:"\\f42c"}.fa-github-square,.fa-square-github{--fa:"\\f092"}.fa-stumbleupon{--fa:"\\f1a4"}.fa-fedex{--fa:"\\f797"}.fa-phoenix-framework{--fa:"\\f3dc"}.fa-shopify{--fa:"\\e057"}.fa-neos{--fa:"\\f612"}.fa-square-threads{--fa:"\\e619"}.fa-hackerrank{--fa:"\\f5f7"}.fa-researchgate{--fa:"\\f4f8"}.fa-swift{--fa:"\\f8e1"}.fa-angular{--fa:"\\f420"}.fa-speakap{--fa:"\\f3f3"}.fa-angrycreative{--fa:"\\f36e"}.fa-y-combinator{--fa:"\\f23b"}.fa-empire{--fa:"\\f1d1"}.fa-envira{--fa:"\\f299"}.fa-google-scholar{--fa:"\\e63b"}.fa-gitlab-square,.fa-square-gitlab{--fa:"\\e5ae"}.fa-studiovinari{--fa:"\\f3f8"}.fa-pied-piper{--fa:"\\f2ae"}.fa-wordpress{--fa:"\\f19a"}.fa-product-hunt{--fa:"\\f288"}.fa-firefox{--fa:"\\f269"}.fa-linode{--fa:"\\f2b8"}.fa-goodreads{--fa:"\\f3a8"}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:"\\f264"}.fa-jsfiddle{--fa:"\\f1cc"}.fa-sith{--fa:"\\f512"}.fa-themeisle{--fa:"\\f2b2"}.fa-page4{--fa:"\\f3d7"}.fa-hashnode{--fa:"\\e499"}.fa-react{--fa:"\\f41b"}.fa-cc-paypal{--fa:"\\f1f4"}.fa-squarespace{--fa:"\\f5be"}.fa-cc-stripe{--fa:"\\f1f5"}.fa-creative-commons-share{--fa:"\\f4f2"}.fa-bitcoin{--fa:"\\f379"}.fa-keycdn{--fa:"\\f3ba"}.fa-opera{--fa:"\\f26a"}.fa-itch-io{--fa:"\\f83a"}.fa-umbraco{--fa:"\\f8e8"}.fa-galactic-senate{--fa:"\\f50d"}.fa-ubuntu{--fa:"\\f7df"}.fa-draft2digital{--fa:"\\f396"}.fa-stripe{--fa:"\\f429"}.fa-houzz{--fa:"\\f27c"}.fa-gg{--fa:"\\f260"}.fa-dhl{--fa:"\\f790"}.fa-pinterest-square,.fa-square-pinterest{--fa:"\\f0d3"}.fa-xing{--fa:"\\f168"}.fa-blackberry{--fa:"\\f37b"}.fa-creative-commons-pd{--fa:"\\f4ec"}.fa-playstation{--fa:"\\f3df"}.fa-quinscape{--fa:"\\f459"}.fa-less{--fa:"\\f41d"}.fa-blogger-b{--fa:"\\f37d"}.fa-opencart{--fa:"\\f23d"}.fa-vine{--fa:"\\f1ca"}.fa-signal-messenger{--fa:"\\e663"}.fa-paypal{--fa:"\\f1ed"}.fa-gitlab{--fa:"\\f296"}.fa-typo3{--fa:"\\f42b"}.fa-reddit-alien{--fa:"\\f281"}.fa-yahoo{--fa:"\\f19e"}.fa-dailymotion{--fa:"\\e052"}.fa-affiliatetheme{--fa:"\\f36b"}.fa-pied-piper-pp{--fa:"\\f1a7"}.fa-bootstrap{--fa:"\\f836"}.fa-odnoklassniki{--fa:"\\f263"}.fa-nfc-symbol{--fa:"\\e531"}.fa-mintbit{--fa:"\\e62f"}.fa-ethereum{--fa:"\\f42e"}.fa-speaker-deck{--fa:"\\f83c"}.fa-creative-commons-nc-eu{--fa:"\\f4e9"}.fa-patreon{--fa:"\\f3d9"}.fa-avianex{--fa:"\\f374"}.fa-ello{--fa:"\\f5f1"}.fa-gofore{--fa:"\\f3a7"}.fa-bimobject{--fa:"\\f378"}.fa-brave-reverse{--fa:"\\e63d"}.fa-facebook-f{--fa:"\\f39e"}.fa-google-plus-square,.fa-square-google-plus{--fa:"\\f0d4"}.fa-web-awesome{--fa:"\\e682"}.fa-mandalorian{--fa:"\\f50f"}.fa-first-order-alt{--fa:"\\f50a"}.fa-osi{--fa:"\\f41a"}.fa-google-wallet{--fa:"\\f1ee"}.fa-d-and-d-beyond{--fa:"\\f6ca"}.fa-periscope{--fa:"\\f3da"}.fa-fulcrum{--fa:"\\f50b"}.fa-cloudscale{--fa:"\\f383"}.fa-forumbee{--fa:"\\f211"}.fa-mizuni{--fa:"\\f3cc"}.fa-schlix{--fa:"\\f3ea"}.fa-square-xing,.fa-xing-square{--fa:"\\f169"}.fa-bandcamp{--fa:"\\f2d5"}.fa-wpforms{--fa:"\\f298"}.fa-cloudversify{--fa:"\\f385"}.fa-usps{--fa:"\\f7e1"}.fa-megaport{--fa:"\\f5a3"}.fa-magento{--fa:"\\f3c4"}.fa-spotify{--fa:"\\f1bc"}.fa-optin-monster{--fa:"\\f23c"}.fa-fly{--fa:"\\f417"}.fa-square-bluesky{--fa:"\\e6a3"}.fa-aviato{--fa:"\\f421"}.fa-itunes{--fa:"\\f3b4"}.fa-cuttlefish{--fa:"\\f38c"}.fa-blogger{--fa:"\\f37c"}.fa-flickr{--fa:"\\f16e"}.fa-viber{--fa:"\\f409"}.fa-soundcloud{--fa:"\\f1be"}.fa-digg{--fa:"\\f1a6"}.fa-tencent-weibo{--fa:"\\f1d5"}.fa-letterboxd{--fa:"\\e62d"}.fa-symfony{--fa:"\\f83d"}.fa-maxcdn{--fa:"\\f136"}.fa-etsy{--fa:"\\f2d7"}.fa-facebook-messenger{--fa:"\\f39f"}.fa-audible{--fa:"\\f373"}.fa-think-peaks{--fa:"\\f731"}.fa-bilibili{--fa:"\\e3d9"}.fa-erlang{--fa:"\\f39d"}.fa-x-twitter{--fa:"\\e61b"}.fa-cotton-bureau{--fa:"\\f89e"}.fa-dashcube{--fa:"\\f210"}.fa-42-group,.fa-innosoft{--fa:"\\e080"}.fa-stack-exchange{--fa:"\\f18d"}.fa-elementor{--fa:"\\f430"}.fa-pied-piper-square,.fa-square-pied-piper{--fa:"\\e01e"}.fa-creative-commons-nd{--fa:"\\f4eb"}.fa-palfed{--fa:"\\f3d8"}.fa-superpowers{--fa:"\\f2dd"}.fa-resolving{--fa:"\\f3e7"}.fa-xbox{--fa:"\\f412"}.fa-square-web-awesome-stroke{--fa:"\\e684"}.fa-searchengin{--fa:"\\f3eb"}.fa-tiktok{--fa:"\\e07b"}.fa-facebook-square,.fa-square-facebook{--fa:"\\f082"}.fa-renren{--fa:"\\f18b"}.fa-linux{--fa:"\\f17c"}.fa-glide{--fa:"\\f2a5"}.fa-linkedin{--fa:"\\f08c"}.fa-hubspot{--fa:"\\f3b2"}.fa-deploydog{--fa:"\\f38e"}.fa-twitch{--fa:"\\f1e8"}.fa-flutter{--fa:"\\e694"}.fa-ravelry{--fa:"\\f2d9"}.fa-mixer{--fa:"\\e056"}.fa-lastfm-square,.fa-square-lastfm{--fa:"\\f203"}.fa-vimeo{--fa:"\\f40a"}.fa-mendeley{--fa:"\\f7b3"}.fa-uniregistry{--fa:"\\f404"}.fa-figma{--fa:"\\f799"}.fa-creative-commons-remix{--fa:"\\f4ee"}.fa-cc-amazon-pay{--fa:"\\f42d"}.fa-dropbox{--fa:"\\f16b"}.fa-instagram{--fa:"\\f16d"}.fa-cmplid{--fa:"\\e360"}.fa-upwork{--fa:"\\e641"}.fa-facebook{--fa:"\\f09a"}.fa-gripfire{--fa:"\\f3ac"}.fa-jedi-order{--fa:"\\f50e"}.fa-uikit{--fa:"\\f403"}.fa-fort-awesome-alt{--fa:"\\f3a3"}.fa-phabricator{--fa:"\\f3db"}.fa-ussunnah{--fa:"\\f407"}.fa-earlybirds{--fa:"\\f39a"}.fa-trade-federation{--fa:"\\f513"}.fa-autoprefixer{--fa:"\\f41c"}.fa-whatsapp{--fa:"\\f232"}.fa-square-upwork{--fa:"\\e67c"}.fa-slideshare{--fa:"\\f1e7"}.fa-google-play{--fa:"\\f3ab"}.fa-viadeo{--fa:"\\f2a9"}.fa-line{--fa:"\\f3c0"}.fa-google-drive{--fa:"\\f3aa"}.fa-servicestack{--fa:"\\f3ec"}.fa-simplybuilt{--fa:"\\f215"}.fa-bitbucket{--fa:"\\f171"}.fa-imdb{--fa:"\\f2d8"}.fa-deezer{--fa:"\\e077"}.fa-raspberry-pi{--fa:"\\f7bb"}.fa-jira{--fa:"\\f7b1"}.fa-docker{--fa:"\\f395"}.fa-screenpal{--fa:"\\e570"}.fa-bluetooth{--fa:"\\f293"}.fa-gitter{--fa:"\\f426"}.fa-d-and-d{--fa:"\\f38d"}.fa-microblog{--fa:"\\e01a"}.fa-cc-diners-club{--fa:"\\f24c"}.fa-gg-circle{--fa:"\\f261"}.fa-pied-piper-hat{--fa:"\\f4e5"}.fa-kickstarter-k{--fa:"\\f3bc"}.fa-yandex{--fa:"\\f413"}.fa-readme{--fa:"\\f4d5"}.fa-html5{--fa:"\\f13b"}.fa-sellsy{--fa:"\\f213"}.fa-square-web-awesome{--fa:"\\e683"}.fa-sass{--fa:"\\f41e"}.fa-wirsindhandwerk,.fa-wsh{--fa:"\\e2d0"}.fa-buromobelexperte{--fa:"\\f37f"}.fa-salesforce{--fa:"\\f83b"}.fa-octopus-deploy{--fa:"\\e082"}.fa-medapps{--fa:"\\f3c6"}.fa-ns8{--fa:"\\f3d5"}.fa-pinterest-p{--fa:"\\f231"}.fa-apper{--fa:"\\f371"}.fa-fort-awesome{--fa:"\\f286"}.fa-waze{--fa:"\\f83f"}.fa-bluesky{--fa:"\\e671"}.fa-cc-jcb{--fa:"\\f24b"}.fa-snapchat,.fa-snapchat-ghost{--fa:"\\f2ab"}.fa-fantasy-flight-games{--fa:"\\f6dc"}.fa-rust{--fa:"\\e07a"}.fa-wix{--fa:"\\f5cf"}.fa-behance-square,.fa-square-behance{--fa:"\\f1b5"}.fa-supple{--fa:"\\f3f9"}.fa-webflow{--fa:"\\e65c"}.fa-rebel{--fa:"\\f1d0"}.fa-css3{--fa:"\\f13c"}.fa-staylinked{--fa:"\\f3f5"}.fa-kaggle{--fa:"\\f5fa"}.fa-space-awesome{--fa:"\\e5ac"}.fa-deviantart{--fa:"\\f1bd"}.fa-cpanel{--fa:"\\f388"}.fa-goodreads-g{--fa:"\\f3a9"}.fa-git-square,.fa-square-git{--fa:"\\f1d2"}.fa-square-tumblr,.fa-tumblr-square{--fa:"\\f174"}.fa-trello{--fa:"\\f181"}.fa-creative-commons-nc-jp{--fa:"\\f4ea"}.fa-get-pocket{--fa:"\\f265"}.fa-perbyte{--fa:"\\e083"}.fa-grunt{--fa:"\\f3ad"}.fa-weebly{--fa:"\\f5cc"}.fa-connectdevelop{--fa:"\\f20e"}.fa-leanpub{--fa:"\\f212"}.fa-black-tie{--fa:"\\f27e"}.fa-themeco{--fa:"\\f5c6"}.fa-python{--fa:"\\f3e2"}.fa-android{--fa:"\\f17b"}.fa-bots{--fa:"\\e340"}.fa-free-code-camp{--fa:"\\f2c5"}.fa-hornbill{--fa:"\\f592"}.fa-js{--fa:"\\f3b8"}.fa-ideal{--fa:"\\e013"}.fa-git{--fa:"\\f1d3"}.fa-dev{--fa:"\\f6cc"}.fa-sketch{--fa:"\\f7c6"}.fa-yandex-international{--fa:"\\f414"}.fa-cc-amex{--fa:"\\f1f3"}.fa-uber{--fa:"\\f402"}.fa-github{--fa:"\\f09b"}.fa-php{--fa:"\\f457"}.fa-alipay{--fa:"\\f642"}.fa-youtube{--fa:"\\f167"}.fa-skyatlas{--fa:"\\f216"}.fa-firefox-browser{--fa:"\\e007"}.fa-replyd{--fa:"\\f3e6"}.fa-suse{--fa:"\\f7d6"}.fa-jenkins{--fa:"\\f3b6"}.fa-twitter{--fa:"\\f099"}.fa-rockrms{--fa:"\\f3e9"}.fa-pinterest{--fa:"\\f0d2"}.fa-buffer{--fa:"\\f837"}.fa-npm{--fa:"\\f3d4"}.fa-yammer{--fa:"\\f840"}.fa-btc{--fa:"\\f15a"}.fa-dribbble{--fa:"\\f17d"}.fa-stumbleupon-circle{--fa:"\\f1a3"}.fa-internet-explorer{--fa:"\\f26b"}.fa-stubber{--fa:"\\e5c7"}.fa-telegram,.fa-telegram-plane{--fa:"\\f2c6"}.fa-old-republic{--fa:"\\f510"}.fa-odysee{--fa:"\\e5c6"}.fa-square-whatsapp,.fa-whatsapp-square{--fa:"\\f40c"}.fa-node-js{--fa:"\\f3d3"}.fa-edge-legacy{--fa:"\\e078"}.fa-slack,.fa-slack-hash{--fa:"\\f198"}.fa-medrt{--fa:"\\f3c8"}.fa-usb{--fa:"\\f287"}.fa-tumblr{--fa:"\\f173"}.fa-vaadin{--fa:"\\f408"}.fa-quora{--fa:"\\f2c4"}.fa-square-x-twitter{--fa:"\\e61a"}.fa-reacteurope{--fa:"\\f75d"}.fa-medium,.fa-medium-m{--fa:"\\f23a"}.fa-amilia{--fa:"\\f36d"}.fa-mixcloud{--fa:"\\f289"}.fa-flipboard{--fa:"\\f44d"}.fa-viacoin{--fa:"\\f237"}.fa-critical-role{--fa:"\\f6c9"}.fa-sitrox{--fa:"\\e44a"}.fa-discourse{--fa:"\\f393"}.fa-joomla{--fa:"\\f1aa"}.fa-mastodon{--fa:"\\f4f6"}.fa-airbnb{--fa:"\\f834"}.fa-wolf-pack-battalion{--fa:"\\f514"}.fa-buy-n-large{--fa:"\\f8a6"}.fa-gulp{--fa:"\\f3ae"}.fa-creative-commons-sampling-plus{--fa:"\\f4f1"}.fa-strava{--fa:"\\f428"}.fa-ember{--fa:"\\f423"}.fa-canadian-maple-leaf{--fa:"\\f785"}.fa-teamspeak{--fa:"\\f4f9"}.fa-pushed{--fa:"\\f3e1"}.fa-wordpress-simple{--fa:"\\f411"}.fa-nutritionix{--fa:"\\f3d6"}.fa-wodu{--fa:"\\e088"}.fa-google-pay{--fa:"\\e079"}.fa-intercom{--fa:"\\f7af"}.fa-zhihu{--fa:"\\f63f"}.fa-korvue{--fa:"\\f42f"}.fa-pix{--fa:"\\e43a"}.fa-steam-symbol{--fa:"\\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}.button{display:flex;height:50px;padding:0;background:#3e7671;border:none;outline:none;border-radius:5px;overflow:hidden;font-size:16px;font-weight:500;cursor:pointer;min-width:220px;max-width:220px}.button:hover{background:#008168}.button:active{background:#3e7671}.button-text{display:block;margin:auto;padding:0 10px;color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:50%;text-transform:capitalize}.button-icon{margin:auto;padding:10px;font-size:20px;color:#ffffff}.button-profile{margin:auto}.button-profile svg{display:flex;margin-left:4px;background-color:#fff;border-radius:4px}.profile-image{display:flex;margin-left:4px;width:40px;height:40px;border-radius:4px;background-color:#fff}.button-text-full-width{width:auto!important}.button-link{text-decoration:none!important}.dropdown{position:relative;display:inline-block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:180px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1;border-radius:5px;text-align:left!important}.dropdown-content-link a{color:#71797E;padding:16px 20px;text-decoration:none;display:block;cursor:pointer;font-size:1rem!important}.dropdown-content-link a:hover{background-color:#f1f1f1;color:#000;opacity:0.7}.dropdown:hover .dropdown-content{display:block}.modal{display:none;position:fixed;z-index:1;padding-top:100px;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4);text-align:center}.modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:40%}.modal-body{max-height:50vh;overflow-y:auto}.close{color:#aaaaaa;float:right;font-size:28px;font-weight:bold}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer}.modal-app{background-color:#c3e9bc;padding:15px;margin:10px;border-radius:5px}.external-app-link{text-decoration:none;color:#000}.gray-text{color:#606060}.green-text{color:#3e7671}#countdown{position:relative;margin:auto;margin-top:30px;height:40px;width:40px;text-align:center}#countdown-number{color:#2e2e2e;display:inline-block;line-height:40px}#countdown svg{position:absolute;top:0;right:0;width:40px;height:40px;transform:rotateY(-180deg) rotateZ(-90deg)}#countdown svg circle{stroke-dasharray:113px;stroke-dashoffset:0px;stroke-linecap:round;stroke-width:4px;stroke:#008168;fill:none;animation:countdown 6s linear infinite forwards}@keyframes countdown{from{stroke-dashoffset:0px}to{stroke-dashoffset:113px}}.lds-ring{color:#fff}.lds-ring{display:flex;justify-content:center;align-items:center;margin:auto;position:relative}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:25px;height:25px;margin:3px;border:2px solid currentColor;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:currentColor transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.dropdown-content .dropdown-user-profile{padding:12px 10px 8px 18px;border-bottom:1px solid #aaaaaa}.dropdown-content .dropdown-user-profile .username{font-size:16px;color:#2e2e2e;text-transform:capitalize}.dropdown-content .dropdown-user-profile .first-last-name{font-size:13px;color:#606060}.menu-bar-icons{color:#008168;display:inline-block;margin-right:8px;font-size:18px}.other-links-list{padding:14px;background-color:#f1f1f1;margin-bottom:8px;text-align:start;border-radius:5px}.tab-list{margin:0px 40px;padding:0;list-style:none;display:flex;position:relative;width:85%;border-bottom:1px solid #aaa}.tab-item{flex:1;text-align:center;transition:.3s;opacity:0.5}.tab-toggle{display:none}.tab-content{display:none}.tab-toggle:nth-child(1):checked~.tab-list .tab-item:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-list .tab-item:nth-child(2){opacity:1;color:#008168;border-bottom:2px solid #008168}.tab-toggle:nth-child(2):checked~.tab-list::before{transform:translateX(100%)}.tab-toggle:nth-child(3):checked~.tab-list::before{transform:translateX(200%)}.tab-toggle:nth-child(1):checked~.tab-container .tab-content:nth-child(1),.tab-toggle:nth-child(2):checked~.tab-container .tab-content:nth-child(2){display:block}.tab-trigger{display:block;padding:10px 0}.tab-container{padding:15px 30px}.grid-view-menu{display:grid;gap:4px;grid-template-columns:repeat(3, 1fr);align-content:start;padding:8px;max-height:230px;overflow-y:auto}.grid-view-link{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:75px;height:70px;padding:6px;text-decoration:none;font-size:13px;color:#128f8b;text-align:center;transition:transform 0.2s ease, background-color 0.1s ease;position:relative;z-index:1;border-radius:3px;cursor:pointer}.grid-view-link:hover{background-color:#eeeeee;transform:scale(1.1);z-index:5}.grid-view-link-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#71797e;width:100%}.grid-view-link:hover .grid-view-link-text{white-space:pre-wrap;overflow:visible;text-overflow:unset}.grid-view-link i{transition:transform 0.2s ease}.grid-view-link:hover i{transform:scale(1.1)}hr.solid{border-top:1px solid #bbb;margin:2px 0}.restricted-overlay{position:fixed;inset:0;background:linear-gradient(135deg, #0f3d3e, #128f8b);display:flex;justify-content:center;align-items:center;padding:20px;z-index:9999999;font-family:"Segoe UI", sans-serif}.restricted-card{background:#ffffff;border-radius:10px;padding:50px;max-width:540px;width:100%;text-align:center;box-shadow:0 25px 70px rgba(0, 0, 0, 0.25);animation:fadeInUp 0.3s ease}.restricted-icon{font-size:48px;color:#128f8b;margin-bottom:30px}.restricted-card h2{margin-bottom:10px;color:#128f8b}.restricted-message{color:#555;font-size:16px;margin-bottom:30px;line-height:1.5}.restricted-links h4{margin-bottom:20px;color:#128f8b}.link-grid{display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:20px;margin-bottom:25px}.restricted-link{background:#ecf2f2;padding:10px;border-radius:10px;text-decoration:none;color:#128f8b;font-size:13px;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all 0.2s ease}.restricted-link:hover{background:#128f8b;color:#fff}.restricted-actions{display:flex;justify-content:center;gap:15px}.btn-primary{background:#128f8b;color:#fff;padding:10px 20px;border-radius:8px;text-decoration:none;font-weight:500;transition:0.2s}.btn-primary:hover{background:#0f6e6b}.btn-secondary{background:transparent;border:2px solid #128f8b;color:#128f8b;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-danger{background:transparent;border:2px solid #dc3545;color:#dc3545;padding:8px 18px;border-radius:8px;cursor:pointer;transition:0.2s}.btn-secondary:hover{background:#128f8b;color:#fff}@keyframes fadeInUp{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}'}},[1,"dash-button",{showPostLoginText:[4,"show-post-login-text"],silentCheckSso:[4,"silent-check-sso"],redirectUri:[1,"redirect-uri"],authMethod:[1,"auth-method"],portalApiUrl:[1,"portal-api-url"],plmUrl:[1,"plm-url"],showUnauthorizedModal:[4,"show-unauthorized-modal"],primaryColor:[1,"primary-color"],accentColor:[1,"accent-color"],notificationPosition:[1,"notification-position"],keycloak:[32],isAuth:[32],givenUserName:[32],silentCheckSsoRedirectUri:[32],appList:[32],avatarSvg:[32],isLoading:[32],config:[32],localMenuLinks:[32],organizationUrl:[32],isRestricted:[32]}]),j=z,C=function(){"undefined"!=typeof customElements&&["dash-button"].forEach((a=>{"dash-button"===a&&(customElements.get(t(a))||customElements.define(t(a),z))}))};export{j as DashButton,C as defineCustomElement}