@tiba-spark/client-shared-lib 10.3.0-763 → 10.3.0-781

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.
@@ -0,0 +1,28 @@
1
+ import * as CryptoJS from 'crypto-js';
2
+ import { AES_DEFAULT_IV } from '../constants';
3
+ export function decryptClientSecret(encryptedSecret, encryptionKey) {
4
+ let decryptedSecret = null;
5
+ if (encryptedSecret?.length > 0) {
6
+ var key_iv = encryptedSecret.split("#");
7
+ let key;
8
+ let iv;
9
+ if (key_iv.length == 2) {
10
+ key = CryptoJS.enc.Utf8.parse(key_iv[0]);
11
+ iv = CryptoJS.enc.Utf8.parse(key_iv[0]);
12
+ }
13
+ else {
14
+ key = CryptoJS.enc.Utf8.parse(encryptionKey);
15
+ iv = CryptoJS.enc.Hex.parse(AES_DEFAULT_IV);
16
+ }
17
+ // Perform decryption
18
+ const decrypted = CryptoJS.AES.decrypt(encryptedSecret, key, {
19
+ iv: iv,
20
+ mode: CryptoJS.mode.CBC,
21
+ padding: CryptoJS.pad.Pkcs7
22
+ });
23
+ // Return the decrypted data as a UTF-8 string
24
+ decryptedSecret = decrypted.toString(CryptoJS.enc.Utf8);
25
+ }
26
+ return decryptedSecret;
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWVzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2Flcy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLGVBQXVCLEVBQUUsYUFBcUI7SUFDaEYsSUFBSSxlQUFlLEdBQVcsSUFBSSxDQUFDO0lBQ25DLElBQUksZUFBZSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0IsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLEdBQTJCLENBQUM7UUFDaEMsSUFBSSxFQUEwQixDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdEIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO2FBQU07WUFDTCxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdDLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDN0M7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUMzRCxFQUFFLEVBQUUsRUFBRTtZQUNOLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDdkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSztTQUM1QixDQUFDLENBQUM7UUFFSCw4Q0FBOEM7UUFDOUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6RDtJQUVELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuaW1wb3J0IHsgQUVTX0RFRkFVTFRfSVYgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdENsaWVudFNlY3JldChlbmNyeXB0ZWRTZWNyZXQ6IHN0cmluZywgZW5jcnlwdGlvbktleTogc3RyaW5nKSB7XG4gIGxldCBkZWNyeXB0ZWRTZWNyZXQ6IHN0cmluZyA9IG51bGw7XG4gIGlmIChlbmNyeXB0ZWRTZWNyZXQ/Lmxlbmd0aCA+IDApIHtcbiAgICB2YXIga2V5X2l2ID0gZW5jcnlwdGVkU2VjcmV0LnNwbGl0KFwiI1wiKTtcbiAgICBsZXQga2V5OiBDcnlwdG9KUy5saWIuV29yZEFycmF5O1xuICAgIGxldCBpdjogQ3J5cHRvSlMubGliLldvcmRBcnJheTtcbiAgICBpZiAoa2V5X2l2Lmxlbmd0aCA9PSAyKSB7XG4gICAgICBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXlfaXZbMF0pO1xuICAgICAgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXlfaXZbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShlbmNyeXB0aW9uS2V5KTtcbiAgICAgIGl2ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShBRVNfREVGQVVMVF9JVik7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBkZWNyeXB0aW9uXG4gICAgY29uc3QgZGVjcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoZW5jcnlwdGVkU2VjcmV0LCBrZXksIHtcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxuICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XG4gICAgfSk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIGRlY3J5cHRlZCBkYXRhIGFzIGEgVVRGLTggc3RyaW5nXG4gICAgZGVjcnlwdGVkU2VjcmV0ID0gZGVjcnlwdGVkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcbiAgfVxuXG4gIHJldHVybiBkZWNyeXB0ZWRTZWNyZXQ7XG59Il19
@@ -18,7 +18,7 @@ export const decimalPercentageRegex = /^(100(?:\.0{1,2})?|[0-9]{1,2}(?:\.[0-9]{1
18
18
  export function isNullOrEmpty(val) {
19
19
  return (val === undefined || val === null || val === '');
20
20
  }
21
- export function convertAmPmTo24Hours(time) {
21
+ export function convertAmPmTo24Hours(time, enableFullDay) {
22
22
  let _time = null;
23
23
  if (time) {
24
24
  _time = { ...time }; // Spread operator for immutability
@@ -26,7 +26,7 @@ export function convertAmPmTo24Hours(time) {
26
26
  _time.hours = +_time.hours + 12; // Convert PM hours (except 12 PM) to 24-hour format
27
27
  }
28
28
  else if (time.middayPeriod === MiddayPeriod.AM && +time.hours === 12) {
29
- _time.hours = 0; // Midnight case (12 AM is 00:00 in 24-hour time)
29
+ _time.hours = enableFullDay ? 24 : 0; // Midnight case (12 AM is 00:00 in 24-hour time and 24:00 when full day option is active)
30
30
  }
31
31
  }
32
32
  return _time;
@@ -544,4 +544,4 @@ export class TibaValidators {
544
544
  };
545
545
  }
546
546
  }
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFFLFlBQVksRUFBb0IsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcseUhBQXlILENBQUM7QUFDdkosTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHFCQUFxQixDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyx1RkFBdUYsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdB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Q0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRTFGLE1BQU0sS0FBSyxHQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFFN0MsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEYsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVyRiwyQ0FBMkM7UUFDM0MsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsbUVBQW1FO1FBQ25FLE9BQU87WUFDTCw0QkFBNEIsRUFBRTtnQkFDNUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pCLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ3hCO1NBQ0YsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGVsYXksIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUsIFZBTElEX1RJTUVfTUFYX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBDbG91ZCwgRWRnZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHknO1xuaW1wb3J0IHsgTWlkZGF5UGVyaW9kLCBUaW1lIGFzIFRpYmFUaW1lLCB0aW1lVG9Nb21lbnQgfSBmcm9tICcuL2RhdGUudXRpbCc7XG5cbmNvbnN0IE1JTl9BTExPV0VEX0JBTEFOQ0UgPSAwO1xuY29uc3QgTUFYX0FMTE9XRURfQkFMQU5DRSA9IDI1NTtcbmV4cG9ydCBjb25zdCBub0Vtb2ppUmVnZXggPSAvW15hLXpBLVowLTkgXS9nbTtcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl0pW0EtWmEtelxcZCFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5dezQsfSQvZztcbmV4cG9ydCBjb25zdCBhbHBoYW51bWVyaWNSZWdleCA9IC9eW2EtekEtWjAtOV0rJC87XG5leHBvcnQgY29uc3QgbW9iaWxlUmVnZXggPSAvXlswLTldKyQvO1xuZXhwb3J0IGNvbnN0IGludGVnZXJOdW1iZXJSZWdleCA9IC9eWy1dPyhcXGQrKT8kLztcbmV4cG9ydCBjb25zdCBpbnRlZ2VyUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eWzAtOV0rJC87XG5leHBvcnQgY29uc3QgZGVjaW1hbE51bWJlclJlZ2V4ID0gL15bLV0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eKFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCByZWdleEV4cCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC87XG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwfFsxLTldP1swLTldKSQvO1xuZXhwb3J0IGNvbnN0IGRlY2ltYWxQZXJjZW50YWdlUmVnZXggPSAvXigxMDAoPzpcXC4wezEsMn0pP3xbMC05XXsxLDJ9KD86XFwuWzAtOV17MSwyfSk/KSQvO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09ICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBbVBtVG8yNEhvdXJzKHRpbWU6IFRpYmFUaW1lKTogVGliYVRpbWUge1xuICBsZXQgX3RpbWU6IFRpYmFUaW1lID0gbnVsbDtcbiAgaWYgKHRpbWUpIHtcbiAgICBfdGltZSA9IHsgLi4udGltZSB9OyAvLyBTcHJlYWQgb3BlcmF0b3IgZm9yIGltbXV0YWJpbGl0eVxuXG4gICAgaWYgKHRpbWUubWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuUE0gJiYgK3RpbWUuaG91cnMgIT09IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyArIDEyOyAvLyBDb252ZXJ0IFBNIGhvdXJzIChleGNlcHQgMTIgUE0pIHRvIDI0LWhvdXIgZm9ybWF0XG4gICAgfSBlbHNlIGlmICh0aW1lLm1pZGRheVBlcmlvZCA9PT0gTWlkZGF5UGVyaW9kLkFNICYmICt0aW1lLmhvdXJzID09PSAxMikge1xuICAgICAgX3RpbWUuaG91cnMgPSAwOyAvLyBNaWRuaWdodCBjYXNlICgxMiBBTSBpcyAwMDowMCBpbiAyNC1ob3VyIHRpbWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF90aW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydDI0SG91cnNUb0FtUE0odGltZTogVGliYVRpbWUpOiBUaWJhVGltZSB7XG4gIGxldCBfdGltZTogVGliYVRpbWUgPSBudWxsO1xuICBpZiAodGltZSkge1xuICAgIF90aW1lID0geyAuLi50aW1lIH07IC8vIFNwcmVhZCBvcGVyYXRvciBmb3IgaW1tdXRhYmlsaXR5XG4gICAgY29uc3QgaG91cnMgPSArdGltZS5ob3VycztcbiAgICBpZiAoaG91cnMgPj0gMCAmJiBob3VycyA8PSAxMSkge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLkFNO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIgJiYgaG91cnMgPD0gMjMpIHtcbiAgICAgIF90aW1lLm1pZGRheVBlcmlvZCA9IE1pZGRheVBlcmlvZC5QTTtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAyNCkge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLkFNO1xuICAgIH1cblxuICAgIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICAgIF90aW1lLmhvdXJzID0gMDtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyAtIDEyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfdGltZTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpYmFWYWxpZGF0b3JzIHtcblxuICAvLyBObyBlbW9qaSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBub0Vtb2ppKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgdmFsLnRvU3RyaW5nKCkubWF0Y2gobm9FbW9qaVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9FbW9qaToge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBub0Vtb2ppUmVnZXhcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBwZXJjZW50YWdlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKHBlcmNlbnRhZ2VSZWdleCkpIHtcbiAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3BlcmNlbnRhZ2U6IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBkZWNpbWFsUGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsUGVyY2VudGFnZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfZGVjaW1hbF9wZXJjZW50YWdlOiB0cnVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBNb2JpbGUgb25seSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBtb2JpbGVOdW1iZXJzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKG1vYmlsZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9iaWxlTnVtYmVyczoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBtb2JpbGVSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGhvdGVsUm9vbk51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goYWxwaGFudW1lcmljUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbHBoYW51bWVyaWNSZWdleDoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBhbHBoYW51bWVyaWNSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VySW5jbHVkZVplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBUaWJhVmFsaWRhdG9ycy52YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcihjb250cm9sLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcldpdGhvdXRaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gVGliYVZhbGlkYXRvcnMudmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbCwgMSk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBtaW5WYWx1ZTogbnVtYmVyKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmXG4gICAgICAhKGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyTnVtYmVyUmVnZXgpICYmICtjb250cm9sLnZhbHVlID49IG1pblZhbHVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHtjb250cm9sLnZhbHVlfSdgXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBJbnRlZ2VyOiAtMTIzLCAxMjNcbiAgc3RhdGljIGludGVnZXJOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlck51bWJlclJlZ2V4KSkgcmV0dXJuIHtcbiAgICAgIGludGVnZXJOdW1iZXI6IHtcbiAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEludGVnZXIgUG9zaXRpdmUgLT4gMTIzXG4gIHN0YXRpYyBpbnRlZ2VyUG9zaXRpdmVOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGludGVnZXJQb3NpdGl2ZU51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZWdlclBvc2l0aXZlTnVtYmVyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRGVjaW1hbDogLTEuMjMsIDEuMjNcbiAgc3RhdGljIGRlY2ltYWxOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbE51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbE51bWJlcjoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIERlY2ltYWwgUG9zaXRpdmU6IDEuMjNcbiAgc3RhdGljIGRlY2ltYWxQb3NpdGl2ZU51bWJlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFBvc2l0aXZlTnVtYmVyUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpbWFsUG9zaXRpdmVOdW1iZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gTnVtYmVyIGxlbmd0aFxuICBzdGF0aWMgbnVtZXJpY0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW52YWxpZE51bWJlckxlbmd0aDoge1xuICAgICAgICAgICAgYWN0dWFsTGVuZ3RoOiB2YWwsXG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aDogbGVuZ3RoXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIWNvbnRyb2wudmFsdWU/Lm1hdGNoKHBhc3N3b3JkUmVnZXgpKSB7XG4gICAgICByZXR1cm4geyBwYXNzd29yZFBvbGljeVJlcXVpcmVtZW50czogdHJ1ZSB9O1xuICAgIH1cbiAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPCA4KSB7XG4gICAgICByZXR1cm4geyBtaW5sZW5ndGg6IHsgcmVxdWlyZWRMZW5ndGg6IDggfSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBHdWlkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7IGd1aWRJc1ZhbGlkOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkRm9ybU1hdGNoVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcbiAgICBjb25zdCBjdXJyZW50UGFzc3dvcmQgPSBjb250cm9sLmdldCgnY3VycmVudFBhc3N3b3JkJyk7XG4gICAgaWYgKG5ld1Bhc3N3b3JkICYmIGN1cnJlbnRQYXNzd29yZCAmJiBuZXdQYXNzd29yZC52YWxpZCAmJiBjdXJyZW50UGFzc3dvcmQudmFsaWQgJiYgbmV3UGFzc3dvcmQudmFsdWUgPT09IGN1cnJlbnRQYXNzd29yZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmRNYXRjaDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsOyAvLyBQYXNzd29yZHMgbWF0Y2ggb3IgZm9ybSBmaWVsZHMgaGFzIGl0cyBvd24gZXJyb3JzXG4gIH1cblxuICBzdGF0aWMgUGFzc3dvcmRGb3JtTm90TWF0Y2hWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdwYXNzd29yZCcpO1xuICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdjb25maXJtUGFzc3dvcmQnKTtcbiAgICBpZiAoKG5ld1Bhc3N3b3JkLmVycm9ycyB8fCBjb25maXJtUGFzc3dvcmQuZXJyb3JzKSB8fFxuICAgICAgbmV3UGFzc3dvcmQudmFsdWUgPT09IGNvbmZpcm1QYXNzd29yZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIFBhc3N3b3JkcyBtYXRjaCBvciBmb3JtIGZpZWxkcyBoYXMgaXRzIG93biBlcnJvcnNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmROb3RNYXRjaDogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9OdW1iZXJWYWxpZGF0b3IoZnJvbUNvbnRyb2xOYW1lOiBzdHJpbmcsIHRvQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbUNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b0NvbnRyb2xOYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmICF0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZScpKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIHZhbGlkYXRpb24gZXJyb3IgaWYgJ2Zyb20nIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAndG8nIHZhbHVlXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZTogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlJykpIHtcbiAgICAgICAgICAvLyByZXNldCB0aGUgZXJyb3Igb2Yg4oCYdG/igJkgY29udHJvbCB3aGVuIOKAmGZyb23igJkgY29udHJvbCBpcyB2YWxpZCBhbmQgdG8gY29udHJvbCBjb250YWlucyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2VcbiAgICAgICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgICB0b0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUJhbGFuY2UgPSAodW5pdHNWYWx1ZSwgYmFsYW5jZVZhbHVlKSA9PiB7IHJldHVybiB1bml0c1ZhbHVlICsgYmFsYW5jZVZhbHVlIH1cblxuICBzdGF0aWMgdW5pdHNCYWxhbmNlVmFsaWRhdG9yKHVuaXRzQ29udHJvbE5hbWU6IHN0cmluZywgYmFsYW5jZUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgICAgaWYgKGNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgdW5pdHNDb250cm9sID0gZm9ybUdyb3VwLmdldCh1bml0c0NvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgYmFsYW5jZUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGJhbGFuY2VDb250cm9sTmFtZSk7XG4gICAgICAgIGNvbnN0IHVuaXRzVmFsdWUgPSBwYXJzZUludCh1bml0c0NvbnRyb2wudmFsdWUpO1xuICAgICAgICBjb25zdCBiYWxhbmNlVmFsdWUgPSBiYWxhbmNlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgYmFsYW5jZUNhbGN1bGF0ZWQgPSB0aGlzLmNhbGN1bGF0ZUJhbGFuY2UodW5pdHNWYWx1ZSwgYmFsYW5jZVZhbHVlKVxuICAgICAgICBpZiAoYmFsYW5jZUNhbGN1bGF0ZWQgPiBNQVhfQUxMT1dFRF9CQUxBTkNFKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21heGltdW06IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlQ2FsY3VsYXRlZCA8IE1JTl9BTExPV0VEX0JBTEFOQ0UpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX3VuaXRzX2JhbGFuY2VfbWluaW11bTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5EYXRlVGltZShjb250cm9sTmFtZTogc3RyaW5nLCBtaW5EYXRlVGltZVZhbHVlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbEdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuXG4gICAgICBpZiAoY29udHJvbEdyb3VwLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sR3JvdXAucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWU6IERhdGUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IG5ldyBEYXRlKGNvbnRyb2xWYWx1ZSkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgY29uc3QgbWluRGF0ZSA9IG5ldyBEYXRlKG1pbkRhdGVUaW1lVmFsdWUpLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgICAgICAgaWYgKGNvbnRyb2xEYXRlIDwgbWluRGF0ZSkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX2Zyb21fdGltZTogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9EYXRlKGZyb21EYXRlRmllbGQ6IHN0cmluZywgdG9EYXRlRmllbGQ6IHN0cmluZywgZnJvbVRpbWVGaWVsZDogc3RyaW5nID0gbnVsbCxcbiAgICB0b1RpbWVGaWVsZDogc3RyaW5nID0gbnVsbCwgZXJyb3JOYW1lOiBzdHJpbmcgPSAnZnJvbVRvRGF0ZScpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBmcm9tRGF0ZTogRGF0ZSA9IGZvcm1Hcm91cC5nZXQoZnJvbURhdGVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgdG9EYXRlOiBEYXRlID0gZm9ybUdyb3VwLmdldCh0b0RhdGVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgZnJvbVRpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldChmcm9tVGltZUZpZWxkKT8udmFsdWU7XG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCk/LnZhbHVlO1xuICAgICAgaWYgKGZyb21UaW1lKSB7XG4gICAgICAgIGZyb21EYXRlLnNldEhvdXJzKGZyb21UaW1lLmhvdXJzKTtcbiAgICAgICAgZnJvbURhdGUuc2V0TWludXRlcyhmcm9tVGltZS5taW51dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0b1RpbWUpIHtcbiAgICAgICAgdG9EYXRlLnNldEhvdXJzKHRvVGltZS5ob3Vycyk7XG4gICAgICAgIHRvRGF0ZS5zZXRNaW51dGVzKHRvVGltZS5taW51dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICgoZnJvbURhdGUgIT09IG51bGwgJiYgdG9EYXRlICE9PSBudWxsKSAmJiBmcm9tRGF0ZSA+IHRvRGF0ZSkge1xuICAgICAgICByZXR1cm4geyBbZXJyb3JOYW1lXTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9UaW1lUmFuZ2UoZnJvbVRpbWVGaWVsZDogc3RyaW5nLCB0b1RpbWVGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICAgIGlmIChjb250cm9sLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGNvbnN0IHRvQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpO1xuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVHcmVhdGVyVGhhbk9yRXF1YWxUbyhmcm9tQ29udHJvbCwgdG9Db250cm9sKSAmJiB0aGlzLmlzVmFsdWVMZW5ndGhWYWxpZChmcm9tQ29udHJvbCwgdG9Db250cm9sKSAmJlxuICAgICAgICAgICF0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2UnKSkge1xuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XG4gICAgICAgIH0gZWxzZSBpZiAodG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlJykpIHtcbiAgICAgICAgICAvLyByZXNldCB0aGUgZXJyb3Igb2Yg4oCYdG/igJkgY29udHJvbCB3aGVuIOKAmGZyb23igJkgY29udHJvbCBpcyB2YWxpZCBhbmQgdG8gY29udHJvbCBjb250YWlucyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlXG4gICAgICAgICAgdG9Db250cm9sLnNldEVycm9ycyh7fSk7XG4gICAgICAgICAgdG9Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9UaW1lKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCkudmFsdWU7XG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCkudmFsdWU7XG4gICAgICBpZiAoIXRoaXMuaXNUaW1lTnVsbChmcm9tVGltZSkgJiYgIXRoaXMuaXNUaW1lTnVsbCh0b1RpbWUpICYmXG4gICAgICAgICEodG9UaW1lLmhvdXJzID09IDAgJiYgdG9UaW1lLm1pbnV0ZXMgPT0gMCkgJiZcbiAgICAgICAgKFxuICAgICAgICAgIChmcm9tVGltZS5ob3VycyA+IHRvVGltZS5ob3VycykgfHxcbiAgICAgICAgICAoZnJvbVRpbWUuaG91cnMgPT0gdG9UaW1lLmhvdXJzICYmIGZyb21UaW1lLm1pbnV0ZXMgPiB0b1RpbWUubWludXRlcylcbiAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNUaW1lTnVsbCA9ICh0aW1lOiBUaWJhVGltZSkgPT4gdGltZSA9PT0gbnVsbCB8fFxuICAgICh0aW1lLmhvdXJzID09PSBudWxsICYmIHRpbWUubWludXRlcyA9PT0gbnVsbCAmJiB0aW1lLnNlY29uZHMgPT09IG51bGwpO1xuXG4gIHN0YXRpYyBub1doaXRlc3BhY2VWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PlxuICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmIGlzTnVsbE9yRW1wdHkoY29udHJvbD8udmFsdWU/LnRyaW0oKSkgPyB7IHJlcXVpcmVkOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyBub1doaXRlc3BhY2VXaXRoaW5TZW50ZW5jZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XG4gICAgIShjb250cm9sPy52YWx1ZT8uc3BsaXQoXCIgXCIpLmxlbmd0aCA9PT0gMSkgPyB7IG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyB0ZXJtc1BvbGljeUNoZWNrYm94KCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkVGVybXM6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEZWZhdWx0QWNjZXNzUHJvZmlsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkoY29udHJvbC52YWx1ZSkgJiYgIWNvbnRyb2wudmFsdWU/LmRlZmF1bHRBY2Nlc3NQcm9maWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub0RlZmF1bHRBY2Nlc3NQcm9maWxlOiB7XG4gICAgICAgICAgY29tcGFueU5hbWU6IGNvbnRyb2wudmFsdWUubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHpSYW5nZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBmcm9tWkZpZWxkOiBzdHJpbmcsIHRvWkZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21aQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVpGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGNvbnN0IHRvWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvWkZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuXG4gICAgICBpZiAoZnJvbVpDb250cm9sLnZhbHVlPy5pZCA+IHRvWkNvbnRyb2wudmFsdWU/LmlkKSB7XG4gICAgICAgIHJldHVybiB7IHpSYW5nZTogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5pbnZhbGlkX2ZpZWxkcykgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZENyZWRlbnRpYWxzKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIGNhclBsYXRlRmllbGQ6IHN0cmluZyA9ICdjYXJQbGF0ZScsIG1vYmlsZUZpZWxkOiBzdHJpbmcgPSAnbW9iaWxlJywgYmFkZ2VGaWVsZDogc3RyaW5nID0gJ2JhZGdlJyxcbiAgICBlbWFpbEZpZWxkOiBzdHJpbmcgPSAnZW1haWwnLCBzZW5kRW1haWxGaWVsZDogc3RyaW5nID0gJ3NlbmRFbWFpbCcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsID0+IHtcbiAgICAgIGxldCBjYXJQbGF0ZXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICBsZXQgYmFkZ2VzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgbGV0IGludGVycG9sYXRlZENyZWRlbnRpYWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBDYXJkc1xuICAgICAgY29uc3QgYmFkZ2VzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChiYWRnZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKGJhZGdlc0Zvcm1BcnJheSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyZCkpO1xuICAgICAgICBiYWRnZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoYmFkZ2VzRm9ybUFycmF5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2FyZHNJbnZhbGlkID0gYmFkZ2VzSW52YWxpZCB8fCAhYmFkZ2VzRm9ybUFycmF5O1xuXG4gICAgICAvL0NhciBwbGF0ZXNcbiAgICAgIGNvbnN0IGNhclBsYXRlc0Zvcm1BcnJheSA9IGZvcm1Hcm91cC5nZXQoY2FyUGxhdGVGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGlmIChjYXJQbGF0ZXNGb3JtQXJyYXkpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhcl9wbGF0ZSkpO1xuICAgICAgICBjYXJQbGF0ZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoY2FyUGxhdGVzRm9ybUFycmF5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2FyUGxhdGVzSW52YWxpZCA9IGNhclBsYXRlc0ludmFsaWQgfHwgIWNhclBsYXRlc0Zvcm1BcnJheTtcblxuICAgICAgLy8gTW9iaWxlXG4gICAgICBjb25zdCBtb2JpbGVGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQobW9iaWxlRmllbGQpO1xuICAgICAgaWYgKG1vYmlsZUZvcm1Db250cm9sKSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5tb2JpbGUpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTW9iaWxlSW52YWxpZCA9ICFtb2JpbGVGb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIEVtYWlsXG4gICAgICBjb25zdCBlbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChlbWFpbEZpZWxkKTtcbiAgICAgIGNvbnN0IHNlbmRFbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChzZW5kRW1haWxGaWVsZCk7XG4gICAgICBpZiAoZW1haWxGb3JtQ29udHJvbCAmJiBzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmVtYWlsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0VtYWlsSW52YWxpZCA9ICEoc2VuZEVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlICYmIGVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlKVxuXG4gICAgICBjb25zdCBpc1JlcXVpcmVkQ3JlZGVudGlhbHMgPSBpc0NhclBsYXRlc0ludmFsaWQgJiYgaXNDYXJkc0ludmFsaWQgJiYgaXNNb2JpbGVJbnZhbGlkICYmIGlzRW1haWxJbnZhbGlkO1xuXG4gICAgICBpZiAoaXNSZXF1aXJlZENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDcmVkZW50aWFsID0gaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucG9wKCk7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0ZVBhcmFtcyA9IGAke2ludGVycG9sYXRlZENyZWRlbnRpYWxzLmpvaW4oJywgJyl9ICR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5vcil9ICR7bGFzdENyZWRlbnRpYWx9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZENyZWRlbnRpYWxzOiB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnJlcXVpcmVkX2NyZWRlbnRpYWxzX21lc3NhZ2UsIHsgY3JlZGVudGlhbHM6IGludGVycG9sYXRlUGFyYW1zIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0Zvcm1Db250cm9sTGlzdEludmFsaWQobGlzdDogVW50eXBlZEZvcm1Db250cm9sW10pIHtcbiAgICBsZXQgaXNJbnZhbGlkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGxpc3QpIHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICBpc0ludmFsaWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNJbnZhbGlkO1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkRGF5cyhzcGVjaWFsRGF5c0ZpZWxkOiBzdHJpbmcsIHdlZWtEYXlzRmllbGQ6IHN0cmluZywgZXJyb3JOYW1lOiBzdHJpbmcgPSAncmVxdWlyZWREYXlzJyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNwZWNpYWxEYXlzOiBudW1iZXIgPSBmb3JtR3JvdXAuZ2V0KHNwZWNpYWxEYXlzRmllbGQpLnZhbHVlO1xuICAgICAgY29uc3Qgd2Vla0RheXM6IG51bWJlciA9IGZvcm1Hcm91cC5nZXQod2Vla0RheXNGaWVsZCkudmFsdWU7XG4gICAgICBpZiAoc3BlY2lhbERheXMgPiAwIHx8IHdlZWtEYXlzID4gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlzUm9sZU5hbWVFeGlzdHMocm9sZVNlcnZpY2VQcm94eTogQ2xvdWQuUm9sZVNlcnZpY2VQcm94eSwgcm9sZUlkOiBudW1iZXIpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXG4gICAgICAgIGRlbGF5KDUwMCksXG4gICAgICAgIGRlYm91bmNlVGltZShJTlBVVF9TRUFSQ0hfREVCT1VOQ0VfVElNRSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiByb2xlU2VydmljZVByb3h5LmlzRXhpc3RzKGNvbnRyb2wudmFsdWUsIHJvbGVJZCA/PyB1bmRlZmluZWQpLnBpcGUoXG4gICAgICAgICAgbWFwKHJlcyA9PiByZXMuZGF0YSA9PT0gdHJ1ZSB8fCAhcmVzLmlzU3VjY2VzcyA/IHsgcm9sZU5hbWVBbHJlYWR5RXhpc3RzOiB0cnVlIH0gOiBudWxsKSkpKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlzQWNjZXNzUHJvZmlsZU51bWJlckF2YWlsYWJsZShhY2Nlc3NQcm9maWxlU2VydmljZVByb3h5OiBFZGdlLkFjY2Vzc1Byb2ZpbGVTZXJ2aWNlUHJveHksIGd1aWQ6IHN0cmluZywgY3VycmVudFZhbHVlOiBudW1iZXIpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgLy8gQ2FsbCBzZXJ2aWNlIHRvIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzUHJvZmlsZVNlcnZpY2VQcm94eS5nZXRBdmFpbGFibGVOdW1iZXIodmFsdWUsIGd1aWQpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gIXJlcy5kYXRhPy5pc0F2YWlsYWJsZSB8fCAhcmVzLmlzU3VjY2VzcyA/IHsgYWNjZXNzUHJvZmlsZU51bWJlclRha2VuOiB0cnVlIH0gOiBudWxsKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHRpYmFUaW1lVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWw6IFRpYmFUaW1lID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICh2YWwgJiYgKHZhbC5ob3VycyA9PT0gbnVsbCB8fCB2YWwubWludXRlcyA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGludmFsaWRUaW1lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlVGliYVRpbWVJblJhbmdlVmFsaWRhdG9yKG1pblRpbWU6IFRpYmFUaW1lLCBtYXhUaW1lOiBUaWJhVGltZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVGliYVRpbWVJblJhbmdlKGNvbnRyb2wudmFsdWUsIG1pblRpbWUsIG1heFRpbWUpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTdHJpbmdISE1NSW5SYW5nZVZhbGlkYXRvcihtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoISFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gNCkgeyAvLyBBc3N1bWluZyB0aW1lIGZvcm1hdCBpcyAnSEhNTSdcbiAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX2Zvcm1hdDogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhvdXJzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDAsIDIpKTtcbiAgICAgICAgICBjb25zdCBtaW51dGVzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VGltZTogVGliYVRpbWUgPSB7IGhvdXJzLCBtaW51dGVzIH07XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY3VycmVudFRpbWUsIG1pblRpbWUsIG1heFRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHRpbWVSYW5nZUFycmF5T3ZlcmxhcFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoY29udHJvbC52YWxpZCAmJiBjb250cm9sLmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1BcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSYW5nZSA9IGZvcm1BcnJheVtpXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RnJvbSA9IHRpbWVUb01vbWVudChjdXJyZW50UmFuZ2UuZnJvbSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRvID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS50byk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudEZyb20gJiYgY3VycmVudFRvKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBmb3JtQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVJhbmdlID0gZm9ybUFycmF5W2pdO1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlRnJvbSA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UuZnJvbSk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVUbyA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UudG8pO1xuXG4gICAgICAgICAgICAgIGlmIChjb21wYXJlRnJvbSAmJiBjb21wYXJlVG8pIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmxhcFxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlc092ZXJsYXAgPSBjdXJyZW50RnJvbS5pc0JlZm9yZShjb21wYXJlVG8pICYmIGN1cnJlbnRUby5pc0FmdGVyKGNvbXBhcmVGcm9tKTtcblxuICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25fdGltZV9yYW5nZV9vdmVybGFwOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdG9Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBmcm9tVGltZUluTnVtYmVyOiBudW1iZXIgPSBmcm9tQ29udHJvbC52YWx1ZTtcbiAgICBjb25zdCB0b1RpbWVJbk51bWJlcjogbnVtYmVyID0gdG9Db250cm9sLnZhbHVlO1xuICAgIHJldHVybiBmcm9tVGltZUluTnVtYmVyICE9PSBudWxsICYmIHRvVGltZUluTnVtYmVyICE9PSBudWxsICYmICtmcm9tVGltZUluTnVtYmVyID4gK3RvVGltZUluTnVtYmVyO1xuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsdWVMZW5ndGhWYWxpZChmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCB0b0NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZyb21UaW1lSW5OdW1iZXI6IG51bWJlciA9IGZyb21Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IHRvVGltZUluTnVtYmVyOiBudW1iZXIgPSB0b0NvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuIGZyb21UaW1lSW5OdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSCAmJlxuICAgICAgdG9UaW1lSW5OdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlVGliYVRpbWVJblJhbmdlKGN1cnJlbnRUaW1lOiBUaWJhVGltZSwgbWluVGltZTogVGliYVRpbWUsIG1heFRpbWU6IFRpYmFUaW1lKTogeyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IH0gfCBudWxsIHtcbiAgICAvLyBJZiB0aW1lIGlzIHVuZGVmaW5lZCwgcmV0dXJuIG51bGwgKG5vIGVycm9yKVxuICAgIGlmICghY3VycmVudFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogVGliYVRpbWUpOiBzdHJpbmcgPT5cbiAgICAgIGAke3RpbWUuaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3RpbWUubWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcblxuICAgIGNvbnN0IGhvdXJzOiBudW1iZXIgPSArY3VycmVudFRpbWUuaG91cnM7XG4gICAgY29uc3QgbWludXRlczogbnVtYmVyID0gK2N1cnJlbnRUaW1lLm1pbnV0ZXM7XG5cbiAgICBjb25zdCBpc1ZhbGlkVGltZSA9XG4gICAgICAoaG91cnMgPiBtaW5UaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWluVGltZS5ob3VycyAmJiBtaW51dGVzID49IG1pblRpbWUubWludXRlcykpICYmXG4gICAgICAoaG91cnMgPCBtYXhUaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWF4VGltZS5ob3VycyAmJiBtaW51dGVzIDw9IG1heFRpbWUubWludXRlcykpO1xuXG4gICAgLy8gSWYgdGltZSBpcyB2YWxpZCwgcmV0dXJuIG51bGwgKG5vIGVycm9yKVxuICAgIGlmIChpc1ZhbGlkVGltZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3Igd2l0aCBmb3JtYXR0ZWQgdGltZSByYW5nZVxuICAgIHJldHVybiB7XG4gICAgICBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lOiB7XG4gICAgICAgIGZyb206IGZvcm1hdFRpbWUobWluVGltZSksXG4gICAgICAgIHRvOiBmb3JtYXRUaW1lKG1heFRpbWUpLFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
547
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFFLFlBQVksRUFBb0IsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcseUhBQXlILENBQUM7QUFDdkosTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHFCQUFxQixDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyx1RkFBdUYsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdB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LEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRTFGLE1BQU0sS0FBSyxHQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFFN0MsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEYsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVyRiwyQ0FBMkM7UUFDM0MsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsbUVBQW1FO1FBQ25FLE9BQU87WUFDTCw0QkFBNEIsRUFBRTtnQkFDNUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pCLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ3hCO1NBQ0YsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGVsYXksIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUsIFZBTElEX1RJTUVfTUFYX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBDbG91ZCwgRWRnZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHknO1xuaW1wb3J0IHsgTWlkZGF5UGVyaW9kLCBUaW1lIGFzIFRpYmFUaW1lLCB0aW1lVG9Nb21lbnQgfSBmcm9tICcuL2RhdGUudXRpbCc7XG5cbmNvbnN0IE1JTl9BTExPV0VEX0JBTEFOQ0UgPSAwO1xuY29uc3QgTUFYX0FMTE9XRURfQkFMQU5DRSA9IDI1NTtcbmV4cG9ydCBjb25zdCBub0Vtb2ppUmVnZXggPSAvW15hLXpBLVowLTkgXS9nbTtcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl0pW0EtWmEtelxcZCFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5dezQsfSQvZztcbmV4cG9ydCBjb25zdCBhbHBoYW51bWVyaWNSZWdleCA9IC9eW2EtekEtWjAtOV0rJC87XG5leHBvcnQgY29uc3QgbW9iaWxlUmVnZXggPSAvXlswLTldKyQvO1xuZXhwb3J0IGNvbnN0IGludGVnZXJOdW1iZXJSZWdleCA9IC9eWy1dPyhcXGQrKT8kLztcbmV4cG9ydCBjb25zdCBpbnRlZ2VyUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eWzAtOV0rJC87XG5leHBvcnQgY29uc3QgZGVjaW1hbE51bWJlclJlZ2V4ID0gL15bLV0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eKFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCByZWdleEV4cCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC87XG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwfFsxLTldP1swLTldKSQvO1xuZXhwb3J0IGNvbnN0IGRlY2ltYWxQZXJjZW50YWdlUmVnZXggPSAvXigxMDAoPzpcXC4wezEsMn0pP3xbMC05XXsxLDJ9KD86XFwuWzAtOV17MSwyfSk/KSQvO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09ICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBbVBtVG8yNEhvdXJzKHRpbWU6IFRpYmFUaW1lLCBlbmFibGVGdWxsRGF5OiBib29sZWFuKTogVGliYVRpbWUge1xuICBsZXQgX3RpbWU6IFRpYmFUaW1lID0gbnVsbDtcbiAgaWYgKHRpbWUpIHtcbiAgICBfdGltZSA9IHsgLi4udGltZSB9OyAvLyBTcHJlYWQgb3BlcmF0b3IgZm9yIGltbXV0YWJpbGl0eVxuXG4gICAgaWYgKHRpbWUubWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuUE0gJiYgK3RpbWUuaG91cnMgIT09IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyArIDEyOyAvLyBDb252ZXJ0IFBNIGhvdXJzIChleGNlcHQgMTIgUE0pIHRvIDI0LWhvdXIgZm9ybWF0XG5cbiAgICB9IGVsc2UgaWYgKHRpbWUubWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuQU0gJiYgK3RpbWUuaG91cnMgPT09IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9IGVuYWJsZUZ1bGxEYXkgPyAyNCA6IDA7ICAvLyBNaWRuaWdodCBjYXNlICgxMiBBTSBpcyAwMDowMCBpbiAyNC1ob3VyIHRpbWUgYW5kIDI0OjAwIHdoZW4gZnVsbCBkYXkgb3B0aW9uIGlzIGFjdGl2ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX3RpbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0MjRIb3Vyc1RvQW1QTSh0aW1lOiBUaWJhVGltZSk6IFRpYmFUaW1lIHtcbiAgbGV0IF90aW1lOiBUaWJhVGltZSA9IG51bGw7XG4gIGlmICh0aW1lKSB7XG4gICAgX3RpbWUgPSB7IC4uLnRpbWUgfTsgLy8gU3ByZWFkIG9wZXJhdG9yIGZvciBpbW11dGFiaWxpdHlcbiAgICBjb25zdCBob3VycyA9ICt0aW1lLmhvdXJzO1xuICAgIGlmIChob3VycyA+PSAwICYmIGhvdXJzIDw9IDExKSB7XG4gICAgICBfdGltZS5taWRkYXlQZXJpb2QgPSBNaWRkYXlQZXJpb2QuQU07XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMiAmJiBob3VycyA8PSAyMykge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLlBNO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDI0KSB7XG4gICAgICBfdGltZS5taWRkYXlQZXJpb2QgPSBNaWRkYXlQZXJpb2QuQU07XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgICAgX3RpbWUuaG91cnMgPSAwO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIF90aW1lLmhvdXJzID0gK190aW1lLmhvdXJzIC0gMTI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF90aW1lO1xufVxuXG5leHBvcnQgY2xhc3MgVGliYVZhbGlkYXRvcnMge1xuXG4gIC8vIE5vIGVtb2ppIHZhbGlkYXRpb25cbiAgc3RhdGljIG5vRW1vamkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiB2YWwudG9TdHJpbmcoKS5tYXRjaChub0Vtb2ppUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub0Vtb2ppOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgICAgIHBhdHRlcm46IG5vRW1vamlSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHBlcmNlbnRhZ2UoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2gocGVyY2VudGFnZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfcGVyY2VudGFnZTogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRlY2ltYWxQZXJjZW50YWdlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGRlY2ltYWxQZXJjZW50YWdlUmVnZXgpKSB7XG4gICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9kZWNpbWFsX3BlcmNlbnRhZ2U6IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE1vYmlsZSBvbmx5IHZhbGlkYXRpb25cbiAgc3RhdGljIG1vYmlsZU51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2gobW9iaWxlUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2JpbGVOdW1iZXJzOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgICAgIHBhdHRlcm46IG1vYmlsZVJlZ2V4XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgaG90ZWxSb29uTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChhbHBoYW51bWVyaWNSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFscGhhbnVtZXJpY1JlZ2V4OiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgICAgIHBhdHRlcm46IGFscGhhbnVtZXJpY1JlZ2V4XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXJJbmNsdWRlWmVybyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIFRpYmFWYWxpZGF0b3JzLnZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VyKGNvbnRyb2wsIDApO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VyV2l0aG91dFplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBUaWJhVmFsaWRhdG9ycy52YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcihjb250cm9sLCAxKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIG1pblZhbHVlOiBudW1iZXIpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgIWlzTnVsbE9yRW1wdHkoY29udHJvbC52YWx1ZSkgJiZcbiAgICAgICEoY29udHJvbC52YWx1ZS50b1N0cmluZygpLm1hdGNoKGludGVnZXJOdW1iZXJSZWdleCkgJiYgK2NvbnRyb2wudmFsdWUgPj0gbWluVmFsdWUpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcjoge1xuICAgICAgICAgIHZhbHVlOiBgICcke2NvbnRyb2wudmFsdWV9J2BcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEludGVnZXI6IC0xMjMsIDEyM1xuICBzdGF0aWMgaW50ZWdlck51bWJlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyTnVtYmVyUmVnZXgpKSByZXR1cm4ge1xuICAgICAgaW50ZWdlck51bWJlcjoge1xuICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gSW50ZWdlciBQb3NpdGl2ZSAtPiAxMjNcbiAgc3RhdGljIGludGVnZXJQb3NpdGl2ZU51bWJlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlclBvc2l0aXZlTnVtYmVyUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnRlZ2VyUG9zaXRpdmVOdW1iZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2BcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBEZWNpbWFsOiAtMS4yMywgMS4yM1xuICBzdGF0aWMgZGVjaW1hbE51bWJlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsTnVtYmVyUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpbWFsTnVtYmVyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRGVjaW1hbCBQb3NpdGl2ZTogMS4yM1xuICBzdGF0aWMgZGVjaW1hbFBvc2l0aXZlTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsUG9zaXRpdmVOdW1iZXJSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2ltYWxQb3NpdGl2ZU51bWJlcjoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBOdW1iZXIgbGVuZ3RoXG4gIHN0YXRpYyBudW1lcmljTGVuZ3RoKGxlbmd0aDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgdmFsLnRvU3RyaW5nKCkubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbnZhbGlkTnVtYmVyTGVuZ3RoOiB7XG4gICAgICAgICAgICBhY3R1YWxMZW5ndGg6IHZhbCxcbiAgICAgICAgICAgIHJlcXVpcmVkTGVuZ3RoOiBsZW5ndGhcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgUGFzc3dvcmRWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghY29udHJvbC52YWx1ZT8ubWF0Y2gocGFzc3dvcmRSZWdleCkpIHtcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkUG9saWN5UmVxdWlyZW1lbnRzOiB0cnVlIH07XG4gICAgfVxuICAgIGlmIChjb250cm9sLnZhbHVlLmxlbmd0aCA8IDgpIHtcbiAgICAgIHJldHVybiB7IG1pbmxlbmd0aDogeyByZXF1aXJlZExlbmd0aDogOCB9IH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIEd1aWRWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghcmVnZXhFeHAudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHsgZ3VpZElzVmFsaWQ6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgUGFzc3dvcmRGb3JtTWF0Y2hWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdwYXNzd29yZCcpO1xuICAgIGNvbnN0IGN1cnJlbnRQYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdjdXJyZW50UGFzc3dvcmQnKTtcbiAgICBpZiAobmV3UGFzc3dvcmQgJiYgY3VycmVudFBhc3N3b3JkICYmIG5ld1Bhc3N3b3JkLnZhbGlkICYmIGN1cnJlbnRQYXNzd29yZC52YWxpZCAmJiBuZXdQYXNzd29yZC52YWx1ZSA9PT0gY3VycmVudFBhc3N3b3JkLnZhbHVlKSB7XG4gICAgICByZXR1cm4geyBwYXNzd29yZE1hdGNoOiB0cnVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7IC8vIFBhc3N3b3JkcyBtYXRjaCBvciBmb3JtIGZpZWxkcyBoYXMgaXRzIG93biBlcnJvcnNcbiAgfVxuXG4gIHN0YXRpYyBQYXNzd29yZEZvcm1Ob3RNYXRjaFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1Bhc3N3b3JkID0gY29udHJvbC5nZXQoJ3Bhc3N3b3JkJyk7XG4gICAgY29uc3QgY29uZmlybVBhc3N3b3JkID0gY29udHJvbC5nZXQoJ2NvbmZpcm1QYXNzd29yZCcpO1xuICAgIGlmICgobmV3UGFzc3dvcmQuZXJyb3JzIHx8IGNvbmZpcm1QYXNzd29yZC5lcnJvcnMpIHx8XG4gICAgICBuZXdQYXNzd29yZC52YWx1ZSA9PT0gY29uZmlybVBhc3N3b3JkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gUGFzc3dvcmRzIG1hdGNoIG9yIGZvcm0gZmllbGRzIGhhcyBpdHMgb3duIGVycm9yc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyBwYXNzd29yZE5vdE1hdGNoOiB0cnVlIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21Ub051bWJlclZhbGlkYXRvcihmcm9tQ29udHJvbE5hbWU6IHN0cmluZywgdG9Db250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICAgIGlmIChjb250cm9sLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGNvbnN0IGZyb21Db250cm9sID0gZm9ybUdyb3VwLmdldChmcm9tQ29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCB0b0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvQ29udHJvbE5hbWUpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiYgIXRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlJykpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gdmFsaWRhdGlvbiBlcnJvciBpZiAnZnJvbScgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICd0bycgdmFsdWVcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlOiB0cnVlIH07XG4gICAgICAgIH0gZWxzZSBpZiAodG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2UnKSkge1xuICAgICAgICAgIC8vIHJlc2V0IHRoZSBlcnJvciBvZiDigJh0b+KAmSBjb250cm9sIHdoZW4g4oCYZnJvbeKAmSBjb250cm9sIGlzIHZhbGlkIGFuZCB0byBjb250cm9sIGNvbnRhaW5zIGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZVxuICAgICAgICAgIHRvQ29udHJvbC5zZXRFcnJvcnMoe30pO1xuICAgICAgICAgIHRvQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY2FsY3VsYXRlQmFsYW5jZSA9ICh1bml0c1ZhbHVlLCBiYWxhbmNlVmFsdWUpID0+IHsgcmV0dXJuIHVuaXRzVmFsdWUgKyBiYWxhbmNlVmFsdWUgfVxuXG4gIHN0YXRpYyB1bml0c0JhbGFuY2VWYWxpZGF0b3IodW5pdHNDb250cm9sTmFtZTogc3RyaW5nLCBiYWxhbmNlQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCB1bml0c0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHVuaXRzQ29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBiYWxhbmNlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoYmFsYW5jZUNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgdW5pdHNWYWx1ZSA9IHBhcnNlSW50KHVuaXRzQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VWYWx1ZSA9IGJhbGFuY2VDb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCBiYWxhbmNlQ2FsY3VsYXRlZCA9IHRoaXMuY2FsY3VsYXRlQmFsYW5jZSh1bml0c1ZhbHVlLCBiYWxhbmNlVmFsdWUpXG4gICAgICAgIGlmIChiYWxhbmNlQ2FsY3VsYXRlZCA+IE1BWF9BTExPV0VEX0JBTEFOQ0UpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX3VuaXRzX2JhbGFuY2VfbWF4aW11bTogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKGJhbGFuY2VDYWxjdWxhdGVkIDwgTUlOX0FMTE9XRURfQkFMQU5DRSkge1xuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25fdW5pdHNfYmFsYW5jZV9taW5pbXVtOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIG1pbkRhdGVUaW1lKGNvbnRyb2xOYW1lOiBzdHJpbmcsIG1pbkRhdGVUaW1lVmFsdWU6IERhdGUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG5cbiAgICAgIGlmIChjb250cm9sR3JvdXAucGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2xHcm91cC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZTogRGF0ZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbnRyb2xWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xEYXRlID0gbmV3IERhdGUoY29udHJvbFZhbHVlKS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICBjb25zdCBtaW5EYXRlID0gbmV3IERhdGUobWluRGF0ZVRpbWVWYWx1ZSkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cbiAgICAgICAgICBpZiAoY29udHJvbERhdGUgPCBtaW5EYXRlKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfZnJvbV90aW1lOiB0cnVlIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub0RhdGUoZnJvbURhdGVGaWVsZDogc3RyaW5nLCB0b0RhdGVGaWVsZDogc3RyaW5nLCBmcm9tVGltZUZpZWxkOiBzdHJpbmcgPSBudWxsLFxuICAgIHRvVGltZUZpZWxkOiBzdHJpbmcgPSBudWxsLCBlcnJvck5hbWU6IHN0cmluZyA9ICdmcm9tVG9EYXRlJyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21EYXRlOiBEYXRlID0gZm9ybUdyb3VwLmdldChmcm9tRGF0ZUZpZWxkKT8udmFsdWU7XG4gICAgICBjb25zdCB0b0RhdGU6IERhdGUgPSBmb3JtR3JvdXAuZ2V0KHRvRGF0ZUZpZWxkKT8udmFsdWU7XG4gICAgICBjb25zdCBmcm9tVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IHRvVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKT8udmFsdWU7XG4gICAgICBpZiAoZnJvbVRpbWUpIHtcbiAgICAgICAgZnJvbURhdGUuc2V0SG91cnMoZnJvbVRpbWUuaG91cnMpO1xuICAgICAgICBmcm9tRGF0ZS5zZXRNaW51dGVzKGZyb21UaW1lLm1pbnV0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHRvVGltZSkge1xuICAgICAgICB0b0RhdGUuc2V0SG91cnModG9UaW1lLmhvdXJzKTtcbiAgICAgICAgdG9EYXRlLnNldE1pbnV0ZXModG9UaW1lLm1pbnV0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKChmcm9tRGF0ZSAhPT0gbnVsbCAmJiB0b0RhdGUgIT09IG51bGwpICYmIGZyb21EYXRlID4gdG9EYXRlKSB7XG4gICAgICAgIHJldHVybiB7IFtlcnJvck5hbWVdOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub1RpbWVSYW5nZShmcm9tVGltZUZpZWxkOiBzdHJpbmcsIHRvVGltZUZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgICAgaWYgKGNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCk7XG4gICAgICAgIGNvbnN0IGZyb21Db250cm9sID0gZm9ybUdyb3VwLmdldChmcm9tVGltZUZpZWxkKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmIHRoaXMuaXNWYWx1ZUxlbmd0aFZhbGlkKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmXG4gICAgICAgICAgIXRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZScpKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2U6IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2UnKSkge1xuICAgICAgICAgIC8vIHJlc2V0IHRoZSBlcnJvciBvZiDigJh0b+KAmSBjb250cm9sIHdoZW4g4oCYZnJvbeKAmSBjb250cm9sIGlzIHZhbGlkIGFuZCB0byBjb250cm9sIGNvbnRhaW5zIGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2VcbiAgICAgICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgICB0b0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub1RpbWUoZnJvbVRpbWVGaWVsZDogc3RyaW5nLCB0b1RpbWVGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZnJvbVRpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldChmcm9tVGltZUZpZWxkKS52YWx1ZTtcbiAgICAgIGNvbnN0IHRvVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKS52YWx1ZTtcbiAgICAgIGlmICghdGhpcy5pc1RpbWVOdWxsKGZyb21UaW1lKSAmJiAhdGhpcy5pc1RpbWVOdWxsKHRvVGltZSkgJiZcbiAgICAgICAgISh0b1RpbWUuaG91cnMgPT0gMCAmJiB0b1RpbWUubWludXRlcyA9PSAwKSAmJlxuICAgICAgICAoXG4gICAgICAgICAgKGZyb21UaW1lLmhvdXJzID4gdG9UaW1lLmhvdXJzKSB8fFxuICAgICAgICAgIChmcm9tVGltZS5ob3VycyA9PSB0b1RpbWUuaG91cnMgJiYgZnJvbVRpbWUubWludXRlcyA+IHRvVGltZS5taW51dGVzKVxuICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2U6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1RpbWVOdWxsID0gKHRpbWU6IFRpYmFUaW1lKSA9PiB0aW1lID09PSBudWxsIHx8XG4gICAgKHRpbWUuaG91cnMgPT09IG51bGwgJiYgdGltZS5taW51dGVzID09PSBudWxsICYmIHRpbWUuc2Vjb25kcyA9PT0gbnVsbCk7XG5cbiAgc3RhdGljIG5vV2hpdGVzcGFjZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XG4gICAgIWlzTnVsbE9yRW1wdHkoY29udHJvbC52YWx1ZSkgJiYgaXNOdWxsT3JFbXB0eShjb250cm9sPy52YWx1ZT8udHJpbSgpKSA/IHsgcmVxdWlyZWQ6IHRydWUgfSA6IG51bGw7XG5cbiAgc3RhdGljIG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlVmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT5cbiAgICAhKGNvbnRyb2w/LnZhbHVlPy5zcGxpdChcIiBcIikubGVuZ3RoID09PSAxKSA/IHsgbm9XaGl0ZXNwYWNlV2l0aGluU2VudGVuY2U6IHRydWUgfSA6IG51bGw7XG5cbiAgc3RhdGljIHRlcm1zUG9saWN5Q2hlY2tib3goKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IGludmFsaWRUZXJtczogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRBY2Nlc3NQcm9maWxlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghaXNOdWxsT3JFbXB0eShjb250cm9sLnZhbHVlKSAmJiAhY29udHJvbC52YWx1ZT8uZGVmYXVsdEFjY2Vzc1Byb2ZpbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vRGVmYXVsdEFjY2Vzc1Byb2ZpbGU6IHtcbiAgICAgICAgICBjb21wYW55TmFtZTogY29udHJvbC52YWx1ZS5uYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgelJhbmdlKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIGZyb21aRmllbGQ6IHN0cmluZywgdG9aRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZnJvbVpDb250cm9sID0gZm9ybUdyb3VwLmdldChmcm9tWkZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgY29uc3QgdG9aQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQodG9aRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG5cbiAgICAgIGlmIChmcm9tWkNvbnRyb2wudmFsdWU/LmlkID4gdG9aQ29udHJvbC52YWx1ZT8uaWQpIHtcbiAgICAgICAgcmV0dXJuIHsgelJhbmdlOiB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmludmFsaWRfZmllbGRzKSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkQ3JlZGVudGlhbHModHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgY2FyUGxhdGVGaWVsZDogc3RyaW5nID0gJ2NhclBsYXRlJywgbW9iaWxlRmllbGQ6IHN0cmluZyA9ICdtb2JpbGUnLCBiYWRnZUZpZWxkOiBzdHJpbmcgPSAnYmFkZ2UnLFxuICAgIGVtYWlsRmllbGQ6IHN0cmluZyA9ICdlbWFpbCcsIHNlbmRFbWFpbEZpZWxkOiBzdHJpbmcgPSAnc2VuZEVtYWlsJyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICAgICAgbGV0IGNhclBsYXRlc0ludmFsaWQgPSBmYWxzZTtcbiAgICAgIGxldCBiYWRnZXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICBsZXQgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIC8vIENhcmRzXG4gICAgICBjb25zdCBiYWRnZXNGb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KGJhZGdlRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBpZiAoYmFkZ2VzRm9ybUFycmF5KSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYXJkKSk7XG4gICAgICAgIGJhZGdlc0ludmFsaWQgPSB0aGlzLmlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChiYWRnZXNGb3JtQXJyYXkudmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDYXJkc0ludmFsaWQgPSBiYWRnZXNJbnZhbGlkIHx8ICFiYWRnZXNGb3JtQXJyYXk7XG5cbiAgICAgIC8vQ2FyIHBsYXRlc1xuICAgICAgY29uc3QgY2FyUGxhdGVzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChjYXJQbGF0ZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKGNhclBsYXRlc0Zvcm1BcnJheSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyX3BsYXRlKSk7XG4gICAgICAgIGNhclBsYXRlc0ludmFsaWQgPSB0aGlzLmlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChjYXJQbGF0ZXNGb3JtQXJyYXkudmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDYXJQbGF0ZXNJbnZhbGlkID0gY2FyUGxhdGVzSW52YWxpZCB8fCAhY2FyUGxhdGVzRm9ybUFycmF5O1xuXG4gICAgICAvLyBNb2JpbGVcbiAgICAgIGNvbnN0IG1vYmlsZUZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChtb2JpbGVGaWVsZCk7XG4gICAgICBpZiAobW9iaWxlRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLm1vYmlsZSkpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNNb2JpbGVJbnZhbGlkID0gIW1vYmlsZUZvcm1Db250cm9sPy52YWx1ZTtcblxuICAgICAgLy8gRW1haWxcbiAgICAgIGNvbnN0IGVtYWlsRm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGVtYWlsRmllbGQpO1xuICAgICAgY29uc3Qgc2VuZEVtYWlsRm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHNlbmRFbWFpbEZpZWxkKTtcbiAgICAgIGlmIChlbWFpbEZvcm1Db250cm9sICYmIHNlbmRFbWFpbEZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZW1haWwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzRW1haWxJbnZhbGlkID0gIShzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUgJiYgZW1haWxGb3JtQ29udHJvbD8udmFsdWUpXG5cbiAgICAgIGNvbnN0IGlzUmVxdWlyZWRDcmVkZW50aWFscyA9IGlzQ2FyUGxhdGVzSW52YWxpZCAmJiBpc0NhcmRzSW52YWxpZCAmJiBpc01vYmlsZUludmFsaWQgJiYgaXNFbWFpbEludmFsaWQ7XG5cbiAgICAgIGlmIChpc1JlcXVpcmVkQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgY29uc3QgbGFzdENyZWRlbnRpYWwgPSBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wb3AoKTtcbiAgICAgICAgbGV0IGludGVycG9sYXRlUGFyYW1zID0gYCR7aW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMuam9pbignLCAnKX0gJHt0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLm9yKX0gJHtsYXN0Q3JlZGVudGlhbH1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkQ3JlZGVudGlhbHM6IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ucmVxdWlyZWRfY3JlZGVudGlhbHNfbWVzc2FnZSwgeyBjcmVkZW50aWFsczogaW50ZXJwb2xhdGVQYXJhbXMgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChsaXN0OiBVbnR5cGVkRm9ybUNvbnRyb2xbXSkge1xuICAgIGxldCBpc0ludmFsaWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgbGlzdCkge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIGlzSW52YWxpZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc0ludmFsaWQ7XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWREYXlzKHNwZWNpYWxEYXlzRmllbGQ6IHN0cmluZywgd2Vla0RheXNGaWVsZDogc3RyaW5nLCBlcnJvck5hbWU6IHN0cmluZyA9ICdyZXF1aXJlZERheXMnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc3BlY2lhbERheXM6IG51bWJlciA9IGZvcm1Hcm91cC5nZXQoc3BlY2lhbERheXNGaWVsZCkudmFsdWU7XG4gICAgICBjb25zdCB3ZWVrRGF5czogbnVtYmVyID0gZm9ybUdyb3VwLmdldCh3ZWVrRGF5c0ZpZWxkKS52YWx1ZTtcbiAgICAgIGlmIChzcGVjaWFsRGF5cyA+IDAgfHwgd2Vla0RheXMgPiAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBbZXJyb3JOYW1lXTogdHJ1ZSB9O1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaXNSb2xlTmFtZUV4aXN0cyhyb2xlU2VydmljZVByb3h5OiBDbG91ZC5Sb2xlU2VydmljZVByb3h5LCByb2xlSWQ6IG51bWJlcik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XG4gICAgICByZXR1cm4gb2YoY29udHJvbC52YWx1ZSkucGlwZShcbiAgICAgICAgZGVsYXkoNTAwKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKElOUFVUX1NFQVJDSF9ERUJPVU5DRV9USU1FKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHJvbGVTZXJ2aWNlUHJveHkuaXNFeGlzdHMoY29udHJvbC52YWx1ZSwgcm9sZUlkID8/IHVuZGVmaW5lZCkucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+IHJlcy5kYXRhID09PSB0cnVlIHx8ICFyZXMuaXNTdWNjZXNzID8geyByb2xlTmFtZUFscmVhZHlFeGlzdHM6IHRydWUgfSA6IG51bGwpKSkpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaXNBY2Nlc3NQcm9maWxlTnVtYmVyQXZhaWxhYmxlKGFjY2Vzc1Byb2ZpbGVTZXJ2aWNlUHJveHk6IEVkZ2UuQWNjZXNzUHJvZmlsZVNlcnZpY2VQcm94eSwgZ3VpZDogc3RyaW5nLCBjdXJyZW50VmFsdWU6IG51bWJlcik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XG4gICAgICByZXR1cm4gb2YoY29udHJvbC52YWx1ZSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSAhPT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDYWxsIHNlcnZpY2UgdG8gY2hlY2sgaWYgdGhlIG51bWJlciBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NQcm9maWxlU2VydmljZVByb3h5LmdldEF2YWlsYWJsZU51bWJlcih2YWx1ZSwgZ3VpZCkucGlwZShcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiAhcmVzLmRhdGE/LmlzQXZhaWxhYmxlIHx8ICFyZXMuaXNTdWNjZXNzID8geyBhY2Nlc3NQcm9maWxlTnVtYmVyVGFrZW46IHRydWUgfSA6IG51bGwpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGF2YWlsYWJsZVxuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdGliYVRpbWVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbDogVGliYVRpbWUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKHZhbCAmJiAodmFsLmhvdXJzID09PSBudWxsIHx8IHZhbC5taW51dGVzID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW52YWxpZFRpbWU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVUaWJhVGltZUluUmFuZ2VWYWxpZGF0b3IobWluVGltZTogVGliYVRpbWUsIG1heFRpbWU6IFRpYmFUaW1lKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY29udHJvbC52YWx1ZSwgbWluVGltZSwgbWF4VGltZSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVN0cmluZ0hITU1JblJhbmdlVmFsaWRhdG9yKG1pblRpbWU6IFRpYmFUaW1lLCBtYXhUaW1lOiBUaWJhVGltZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoICE9PSA0KSB7IC8vIEFzc3VtaW5nIHRpbWUgZm9ybWF0IGlzICdISE1NJ1xuICAgICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfZm9ybWF0OiB0cnVlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaG91cnM6IG51bWJlciA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUuc2xpY2UoMCwgMikpO1xuICAgICAgICAgIGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lOiBUaWJhVGltZSA9IHsgaG91cnMsIG1pbnV0ZXMgfTtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZShjdXJyZW50VGltZSwgbWluVGltZSwgbWF4VGltZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdGltZVJhbmdlQXJyYXlPdmVybGFwVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmIChjb250cm9sLnZhbGlkICYmIGNvbnRyb2wuZW5hYmxlZCkge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFJhbmdlID0gZm9ybUFycmF5W2ldO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRGcm9tID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS5mcm9tKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VG8gPSB0aW1lVG9Nb21lbnQoY3VycmVudFJhbmdlLnRvKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50RnJvbSAmJiBjdXJyZW50VG8pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGZvcm1BcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlUmFuZ2UgPSBmb3JtQXJyYXlbal07XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVGcm9tID0gdGltZVRvTW9tZW50KGNvbXBhcmVSYW5nZS5mcm9tKTtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVRvID0gdGltZVRvTW9tZW50KGNvbXBhcmVSYW5nZS50byk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmVGcm9tICYmIGNvbXBhcmVUbykge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVybGFwXG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VzT3ZlcmxhcCA9IGN1cnJlbnRGcm9tLmlzQmVmb3JlKGNvbXBhcmVUbykgJiYgY3VycmVudFRvLmlzQWZ0ZXIoY29tcGFyZUZyb20pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlc092ZXJsYXApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl90aW1lX3JhbmdlX292ZXJsYXA6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsdWVHcmVhdGVyVGhhbk9yRXF1YWxUbyhmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCB0b0NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZyb21UaW1lSW5OdW1iZXI6IG51bWJlciA9IGZyb21Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IHRvVGltZUluTnVtYmVyOiBudW1iZXIgPSB0b0NvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuIGZyb21UaW1lSW5OdW1iZXIgIT09IG51bGwgJiYgdG9UaW1lSW5OdW1iZXIgIT09IG51bGwgJiYgK2Zyb21UaW1lSW5OdW1iZXIgPiArdG9UaW1lSW5OdW1iZXI7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWx1ZUxlbmd0aFZhbGlkKGZyb21Db250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHRvQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZnJvbVRpbWVJbk51bWJlcjogbnVtYmVyID0gZnJvbUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgdG9UaW1lSW5OdW1iZXI6IG51bWJlciA9IHRvQ29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gZnJvbVRpbWVJbk51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gVkFMSURfVElNRV9NQVhfTEVOR1RIICYmXG4gICAgICB0b1RpbWVJbk51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gVkFMSURfVElNRV9NQVhfTEVOR1RIO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY3VycmVudFRpbWU6IFRpYmFUaW1lLCBtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWU6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0gfSB8IG51bGwge1xuICAgIC8vIElmIHRpbWUgaXMgdW5kZWZpbmVkLCByZXR1cm4gbnVsbCAobm8gZXJyb3IpXG4gICAgaWYgKCFjdXJyZW50VGltZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBUaWJhVGltZSk6IHN0cmluZyA9PlxuICAgICAgYCR7dGltZS5ob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7dGltZS5taW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgY29uc3QgaG91cnM6IG51bWJlciA9ICtjdXJyZW50VGltZS5ob3VycztcbiAgICBjb25zdCBtaW51dGVzOiBudW1iZXIgPSArY3VycmVudFRpbWUubWludXRlcztcblxuICAgIGNvbnN0IGlzVmFsaWRUaW1lID1cbiAgICAgIChob3VycyA+IG1pblRpbWUuaG91cnMgfHwgKGhvdXJzID09PSBtaW5UaW1lLmhvdXJzICYmIG1pbnV0ZXMgPj0gbWluVGltZS5taW51dGVzKSkgJiZcbiAgICAgIChob3VycyA8IG1heFRpbWUuaG91cnMgfHwgKGhvdXJzID09PSBtYXhUaW1lLmhvdXJzICYmIG1pbnV0ZXMgPD0gbWF4VGltZS5taW51dGVzKSk7XG5cbiAgICAvLyBJZiB0aW1lIGlzIHZhbGlkLCByZXR1cm4gbnVsbCAobm8gZXJyb3IpXG4gICAgaWYgKGlzVmFsaWRUaW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHJldHVybiB0aGUgdmFsaWRhdGlvbiBlcnJvciB3aXRoIGZvcm1hdHRlZCB0aW1lIHJhbmdlXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWU6IHtcbiAgICAgICAgZnJvbTogZm9ybWF0VGltZShtaW5UaW1lKSxcbiAgICAgICAgdG86IGZvcm1hdFRpbWUobWF4VGltZSksXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -182,4 +182,18 @@ export const AppModuleToMainPermissionTypeMap = {
182
182
  [Edge.AppModule.Management]: Edge.PermissionType.TenantSettingsMain,
183
183
  [Edge.AppModule.ECommerceBackoffice]: Edge.PermissionType.ECommerceBackofficeMain,
184
184
  };
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2hlbHBlci51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRELE9BQU8sRUFBUyxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsNEJBQTRCO0FBQzVCLGtDQUFrQztBQUNsQyxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLFFBQVEsQ0FBSSxHQUFNLEVBQUUsSUFBYztJQUNoRCxJQUFJLEdBQUcsR0FBTSxFQUFPLENBQUM7SUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckI7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFHO0lBQ3ZDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQzVCLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQUMsSUFBWSxFQUFFLE9BQXlCO0lBQzdFLGlEQUFp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QUFVLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQjtJQUNuRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QjtDQUNsRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMT0NBTF9FTkdMSVNIX0xBTkdVQUdFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSAnLi4vcGlwZXMvZmlsdGVyLnBpcGUnO1xuaW1wb3J0IHsgQ2xvdWQsIEVkZ2UgfSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5JztcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4vbGFuZy51dGlsJztcbmltcG9ydCB7IGlzQ2hhcmFjdGVyTGVuZ3RoVmFsaWQgfSBmcm9tICcuL3RleHQudXRpbCc7XG5cbi8vIEdldHMgYW4gb2JqZWN0IG9mIHR5cGU8VD5cbi8vIEdldHMgYW4gYXJyYXkgb2Yga2V5cyB0byBpZ25vcmVcbi8vIFJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGhvdXQgdGhlIG9taXR0ZWQga2V5c1xuZXhwb3J0IGZ1bmN0aW9uIG9taXRLZXlzPFQ+KG9iajogVCwga2V5czogc3RyaW5nW10pIHtcbiAgdmFyIGR1cDogVCA9IHt9IGFzIFQ7XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgPT0gLTEpIHtcbiAgICAgIGR1cFtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBkdXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJXaXRoTGVhZGluZ1plcm8obnVtKSB7XG4gIGlmIChudW0gIT09IG51bGwgJiYgbnVtIDw9IDkpIHtcbiAgICBudW0gPSAoYDAke251bX1gKS5zbGljZSgtMTApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheUNhbmNlbGxhdGlvbih0aW1lOiBudW1iZXIsIHN1YmplY3Q6IFN1YmplY3Q8Ym9vbGVhbj4pIHtcbiAgLy8gY3JlYXRlIGEgc3Vic2NyaXB0aW9uIHRvIHVzZSB3aXRoIHlvdXIgcHJvbWlzZVxuICBjb25zdCBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGlkID0gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lKTtcbiAgICAvLyBhZGQgdGVhcmRvd24gbG9naWMgdG8gdGhlIHN1YnNjcmlwdGlvblxuICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHN1YlN1YmplY3QgPSBzdWJqZWN0LnN1YnNjcmliZShjYW5jZWxTdWJzY3JpcHRpb24gPT4ge1xuICAgIGlmIChjYW5jZWxTdWJzY3JpcHRpb24pIHtcbiAgICAgIC8vIGNhbGwgdW5zdWJzY3JpYmUgdG8gY2FuY2VsXG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHVzZSB0aGUgcHJvbWlzZSBpbnZva2UgdGhlIGRlYWx5XG4gIGF3YWl0IHByb21pc2U7XG5cbiAgc3ViU3ViamVjdC51bnN1YnNjcmliZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbChzdHIsIGZpbmQsIHJlcGxhY2UpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoZmluZCwgJ2cnKSwgcmVwbGFjZSk7XG59XG5cblxuZXhwb3J0IGVudW0gUm93T3BlcmF0aW9uIHtcbiAgSW5zZXJ0LFxuICBVcGRhdGUsXG4gIERlbGV0ZSxcbiAgTm9uZSxcbiAgSW5zZXJ0VG9QYXJlbnQsXG4gIFVwZGF0aW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrRW50aXR5QXNVbmNoYW5nZWQ8VD4oZW50aXR5OiBUKTogVCB7XG4gIHJldHVybiBvbWl0S2V5czxUPihlbnRpdHksIFsnZXhwYW5kZWQnLCAnZXhwYW5kaW5nJywgJ2NoYW5nZWQnLCAncm93T3BlcmF0aW9uJywgJ2ZpbmRSb3dJbmRleCddKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtFbnRpdGllc0FzQ2hhbmdlZDxUID0gYW55PihlbnRpdGllczogYW55W10sIHJvd09wZXJhdGlvbjogUm93T3BlcmF0aW9uID0gUm93T3BlcmF0aW9uLk5vbmUsXG4gIGZpbmRSb3dJbmRleD86IChlbnRpdHk6IFQsIGVudGl0aWVzOiBUW10pID0+IG51bWJlcikge1xuXG4gIGlmICgocm93T3BlcmF0aW9uID09PSBSb3dPcGVyYXRpb24uVXBkYXRlIHx8IHJvd09wZXJhdGlvbiA9PT0gUm93T3BlcmF0aW9uLkRlbGV0ZSkgJiYgIWZpbmRSb3dJbmRleCkge1xuICAgIGZpbmRSb3dJbmRleCA9IChlbnRpdHk6IGFueSwgZW50aXRpZXM6IGFueVtdKSA9PiBlbnRpdGllcy5maW5kSW5kZXgoZSA9PiBlLmlkID09PSBlbnRpdHkuaWQpO1xuICB9XG5cbiAgZmxhZ0VudGl0eShlbnRpdGllcywgdHJ1ZSwgcm93T3BlcmF0aW9uLCBmaW5kUm93SW5kZXgpO1xuXG4gIC8vc29sdXRpb24gZm9yIHVubWFya2VkIHByZXZpb3VlcyByb3dzXG4gIHNldFRpbWVvdXQoKCkgPT4gZmxhZ0VudGl0eShlbnRpdGllcywgZmFsc2UsIFJvd09wZXJhdGlvbi5Ob25lKSwgMTAwMCk7XG59XG5cbmV4cG9ydCB0eXBlIFJvd1RhYmxlUGF5bG9hZDxUID0gYW55PiA9IHsgcm93T3BlcmF0aW9uOiBSb3dPcGVyYXRpb24sIGNoYW5nZWQ6IGJvb2xlYW4sIGZpbmRSb3dJbmRleD86IChlbnRpdHk6IFQsIGVudGl0aWVzOiBUW10pID0+IG51bWJlciB9O1xuXG5mdW5jdGlvbiBmbGFnRW50aXR5PFQgZXh0ZW5kcyBSb3dUYWJsZVBheWxvYWQ+KGVudGl0aWVzOiBUW10sIGZsYWc6IGJvb2xlYW4sIHJvd09wZXJhdGlvbjogUm93T3BlcmF0aW9uLCBmaW5kUm93SW5kZXg/OiAoZW50aXR5OiBULCBlbnRpdGllczogVFtdKSA9PiBudW1iZXIpIHtcbiAgZW50aXRpZXMuZm9yRWFjaChlbnRpdHkgPT4ge1xuICAgIGVudGl0eS5jaGFuZ2VkID0gZmxhZztcbiAgICBlbnRpdHkucm93T3BlcmF0aW9uID0gcm93T3BlcmF0aW9uID8/IGVudGl0eS5yb3dPcGVyYXRpb247XG4gICAgZW50aXR5LmZpbmRSb3dJbmRleCA9IGZpbmRSb3dJbmRleCB8fCAoKGVudGl0eSwgZW50aXRpZXMpID0+IG51bGwpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzKGNpdHk6IHN0cmluZywgc3RyZWV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgYWRkcmVzcyA9IG51bGw7XG4gIGlmIChjaXR5ICYmIHN0cmVldCkge1xuICAgIGFkZHJlc3MgPSBgJHtzdHJlZXR9LCAke2NpdHl9YDtcbiAgfSBlbHNlIGlmIChjaXR5KSB7XG4gICAgYWRkcmVzcyA9IGNpdHk7XG4gIH0gZWxzZSBpZiAoc3RyZWV0KSB7XG4gICAgYWRkcmVzcyA9IHN0cmVldDtcbiAgfVxuXG4gIHJldHVybiBhZGRyZXNzO1xufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJWYWx1ZVJlc29sdmVyPFQ+ID0gKG9iajogVCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IGFueTtcbmV4cG9ydCB0eXBlIFNvbWVWYWx1ZVJlc29sdmVyPFQ+ID0gKG9iajogVCwgc3ViR3JvdXBQcm9wZXJ0eU5hbWU6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHNlYXJjaFZhbHVlOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgcmVkdWNlOiBhbnkpID0+IGFueTtcblxuZXhwb3J0IGNvbnN0IGJhc2VSZWR1Y2U6IEZpbHRlclZhbHVlUmVzb2x2ZXI8YW55PiA9IChvYmo6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG9ialtwcm9wZXJ0eU5hbWVdO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyS2V5VmFsdWVCYXNlUmVkdWNlOiBGaWx0ZXJWYWx1ZVJlc29sdmVyPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IH0+ID0gKFxuICBvYmosXG4gIF8sXG4pID0+IG9iai52YWx1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uKiBmbGF0dGVuQnlLZXkoYXJyYXksIG5lc3RlZEtleTogc3RyaW5nLCBkZXB0aCA9IDEpIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFycmF5KSB7XG4gICAgaWYgKGl0ZW1bbmVzdGVkS2V5XSAmJiBBcnJheS5pc0FycmF5KGl0ZW1bbmVzdGVkS2V5XSkgJiYgZGVwdGggPiAwKSB7XG4gICAgICB5aWVsZCogZmxhdHRlbkJ5S2V5KGl0ZW1bbmVzdGVkS2V5XSwgbmVzdGVkS2V5LCBkZXB0aCAtIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCBpdGVtO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJT1NEZXZpY2UoKSB7XG4gIHZhciBpc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB2YXIgaXNBcHBsZURldmljZSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ01hY2ludG9zaCcpO1xuICB2YXIgaXNUb3VjaFNjcmVlbiA9IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+PSAxOyAvLyB0cnVlIGZvciBpT1MgMTMgKGFuZCBob3BlZnVsbHkgYmV5b25kKVxuICByZXR1cm4gaXNJT1MgfHwgKGlzQXBwbGVEZXZpY2UgJiYgKGlzVG91Y2hTY3JlZW4gfHwgaU9TMXRvMTJxdWlyaygpKSk7XG59XG5cbmZ1bmN0aW9uIGlPUzF0bzEycXVpcmsoKSB7XG4gIHZhciBhdWRpbyA9IG5ldyBBdWRpbygpOyAvLyB0ZW1wb3JhcnkgQXVkaW8gb2JqZWN0XG4gIGF1ZGlvLnZvbHVtZSA9IDAuNTsgLy8gaGFzIG5vIGVmZmVjdCBvbiBpT1MgPD0gMTJcbiAgcmV0dXJuIGF1ZGlvLnZvbHVtZSA9PT0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqOiB7fSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RydWVJbkJpbmFyeShkZWNpbWFsVmFsdWU6IG51bWJlciwgYml0UG9zaXRpb246IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKGRlY2ltYWxWYWx1ZSAmIGJpdFBvc2l0aW9uKSAhPT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRCaW5hcnlUb0RlY2ltYWwoYmluYXJ5U3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAvLyBVc2UgcGFyc2VJbnQgZnVuY3Rpb24gdG8gY29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGRlY2ltYWwgbnVtYmVyXG4gIHJldHVybiBwYXJzZUludChiaW5hcnlTdHJpbmcsIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERlY2ltYWxUb0JpbmFyeShkZWNpbWFsTnVtYmVyOiBudW1iZXIpOiBzdHJpbmcge1xuICAvLyBVc2UgdG9TdHJpbmcoMikgZnVuY3Rpb24gdG8gY29udmVydCBkZWNpbWFsIG51bWJlciB0byBiaW5hcnkgc3RyaW5nXG4gIHJldHVybiBpc05hTihkZWNpbWFsTnVtYmVyKSA/ICcnIDogZGVjaW1hbE51bWJlci50b1N0cmluZygyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0T2JqZWN0QnlQcm9wZXJ0eTxULCBLIGV4dGVuZHMga2V5b2YgVD4oYXJyOiBUW10sIHByb3A6IEspOiBUW10ge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPFRbS10sIFQ+KCk7XG4gIGFyci5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGNvbnN0IGtleSA9IGl0ZW1bcHJvcF07XG4gICAgaWYgKCFtYXAuaGFzKGtleSkpIHtcbiAgICAgIG1hcC5zZXQoa2V5LCBpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RPYmplY3RCeVByb3BlcnRpZXM8VCwgSyBleHRlbmRzIGtleW9mIFQ+KGFycjogVFtdLCAuLi5wcm9wczogS1tdKTogVFtdIHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFQ+KCk7XG4gIGFyci5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGNvbnN0IGtleSA9IHByb3BzLm1hcChwcm9wID0+IGl0ZW1bcHJvcF0pLmpvaW4oJ18nKTtcbiAgICBpZiAoIW1hcC5oYXMoa2V5KSkge1xuICAgICAgbWFwLnNldChrZXksIGl0ZW0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBBcnJheS5mcm9tKG1hcC52YWx1ZXMoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50TGFuZyh1c2VyU2V0dGluZ3M6IE1hcDxFZGdlLlNldHRpbmdzQ2F0ZWdvcnksIGFueT4pIHtcbiAgY29uc3QgdmFsdWU6IENsb3VkLkxvY2FsaXphdGlvbkR0byA9IHVzZXJTZXR0aW5ncz8uZ2V0KEVkZ2UuU2V0dGluZ3NDYXRlZ29yeS5Mb2NhbGl6YXRpb24pO1xuICByZXR1cm4gdmFsdWU/LmtleU5hbWUgPz8gTE9DQUxfRU5HTElTSF9MQU5HVUFHRTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2VhcmNoRmllbGRDaGFuZ2VkKHByZXY6IGFueSwgY3VycjogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGlzRmllbGRTZWxlY3RvckNoYW5nZWQgPSBwcmV2LnNlYXJjaEZpZWxkU2VsZWN0b3IgIT09IGN1cnIuc2VhcmNoRmllbGRTZWxlY3RvciAmJiBjdXJyLnNlYXJjaFZhbHVlO1xuICBjb25zdCBpc1NlYXJjaFZhbHVlQ2hhbmdlZCA9IHByZXYuc2VhcmNoVmFsdWUgIT09IGN1cnIuc2VhcmNoVmFsdWU7XG5cbiAgcmV0dXJuIChpc0ZpZWxkU2VsZWN0b3JDaGFuZ2VkIHx8IGlzU2VhcmNoVmFsdWVDaGFuZ2VkKSAmJiBpc0NoYXJhY3Rlckxlbmd0aFZhbGlkKGN1cnIuc2VhcmNoVmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgTWFpbk1vZHVsZVRvU3ViTW9kdWxlc1Blcm1pc3Npb25UeXBlTWFwOiBOdW1iZXJNYXA8RWRnZS5QZXJtaXNzaW9uVHlwZVtdPiA9IHtcbiAgW0VkZ2UuUGVybWlzc2lvblR5cGUuQ2NNYWluXTogW10sXG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLkFjY291bnRNYW5hZ2VtZW50TWFpbl06IFtFZGdlLlBlcm1pc3Npb25UeXBlLkFjY291bnRNYW5hZ2VtZW50QWNjb3VudFZpZXcsIEVkZ2UuUGVybWlzc2lvblR5cGUuQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50Q3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLkFjY291bnRNYW5hZ2VtZW50QWNjb3VudFVwZGF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5BY2NvdW50TWFuYWdlbWVudEFjY291bnREZWxldGVdLFxuICBbRWRnZS5QZXJtaXNzaW9uVHlwZS5Nb250aGxpZXNNYWluXTogW0VkZ2UuUGVybWlzc2lvblR5cGUuTW9udGhsaWVzVmlldywgRWRnZS5QZXJtaXNzaW9uVHlwZS5Nb250aGxpZXNDcmVhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuTW9udGhsaWVzVXBkYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLk1vbnRobGllc0RlbGV0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5Nb250aGx5U2VyaWVzQ3JlYXRlXSxcbiAgW0VkZ2UuUGVybWlzc2lvblR5cGUuR3Vlc3RNYWluXTogW0VkZ2UuUGVybWlzc2lvblR5cGUuR3Vlc3RWaWV3LCBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0Q3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0VXBkYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0RGVsZXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0R3JvdXBWaWV3LCBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0R3JvdXBDcmVhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuR3Vlc3RIb3RlbEd1ZXN0VmlldywgRWRnZS5QZXJtaXNzaW9uVHlwZS5Ib3RlbEd1ZXN0SU9DcmVhdGVdLFxuICBbRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uTWFpbl06IFtcbiAgICBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25FVmFsaWRhdGlvblZpZXcsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbkVWYWxpZGF0aW9uQ3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25FVmFsaWRhdGlvblVwZGF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uRVZhbGlkYXRpb25EZWxldGUsXG4gICAgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uU3RpY2tlclZpZXcsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvblN0aWNrZXJDcmVhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvblN0aWNrZXJVcGRhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvblN0aWNrZXJEZWxldGUsXG4gICAgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uQ291cG9uVmlldywgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uQ291cG9uQ3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25Db3Vwb25VcGRhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbkNvdXBvbkRlbGV0ZV0sXG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLlJlcG9ydHNNYWluXTogW10sXG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25NYWluXTogW0VkZ2UuUGVybWlzc2lvblR5cGUuTG90Q29uZmlndXJhdGlvblJhdGVzLCBFZGdlLlBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25TY2hlZHVsZXIsIEVkZ2UuUGVybWlzc2lvblR5cGUuTG90Q29uZmlndXJhdGlvblZhbGlkYXRpb25Qcm9maWxlLCBFZGdlLlBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25BY2Nlc3NQcm9maWxlXSxcbiAgW0VkZ2UuUGVybWlzc2lvblR5cGUuVGVuYW50U2V0dGluZ3NNYWluXTogW0VkZ2UuUGVybWlzc2lvblR5cGUuTWFuYWdlbWVudEFkbWluXSxcbiAgW0VkZ2UuUGVybWlzc2lvblR5cGUuRUNvbW1lcmNlQmFja29mZmljZU1haW5dOiBbRWRnZS5QZXJtaXNzaW9uVHlwZS5FQ29tbWVyY2VBZG1pbiwgRWRnZS5QZXJtaXNzaW9uVHlwZS5FQ29tbWVyY2VSZWd1bGFyXVxufTtcblxuZXhwb3J0IGNvbnN0IEFwcE1vZHVsZVRvTWFpblBlcm1pc3Npb25UeXBlTWFwOiBOdW1iZXJNYXA8RWRnZS5QZXJtaXNzaW9uVHlwZT4gPSB7XG4gIFtFZGdlLkFwcE1vZHVsZS5DY106IEVkZ2UuUGVybWlzc2lvblR5cGUuQ2NNYWluLFxuICBbRWRnZS5BcHBNb2R1bGUuQWNjb3VudHNdOiBFZGdlLlBlcm1pc3Npb25UeXBlLkFjY291bnRNYW5hZ2VtZW50TWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLk1vbnRobGllc106IEVkZ2UuUGVybWlzc2lvblR5cGUuTW9udGhsaWVzTWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLkd1ZXN0c106IEVkZ2UuUGVybWlzc2lvblR5cGUuR3Vlc3RNYWluLFxuICBbRWRnZS5BcHBNb2R1bGUuVmFsaWRhdGlvbl06IEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbk1haW4sXG4gIFtFZGdlLkFwcE1vZHVsZS5SZXBvcnRzXTogRWRnZS5QZXJtaXNzaW9uVHlwZS5SZXBvcnRzTWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLkxvdENvbmZpZ3VyYXRpb25dOiBFZGdlLlBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25NYWluLFxuICBbRWRnZS5BcHBNb2R1bGUuTWFuYWdlbWVudF06IEVkZ2UuUGVybWlzc2lvblR5cGUuVGVuYW50U2V0dGluZ3NNYWluLFxuICBbRWRnZS5BcHBNb2R1bGUuRUNvbW1lcmNlQmFja29mZmljZV06IEVkZ2UuUGVybWlzc2lvblR5cGUuRUNvbW1lcmNlQmFja29mZmljZU1haW4sXG59O1xuIl19
185
+ export function openBackgroundIframe(url, timeoutMs = 60000) {
186
+ // Create an invisible iframe
187
+ const iframe = document.createElement('iframe');
188
+ iframe.style.width = '0';
189
+ iframe.style.height = '0';
190
+ iframe.style.border = 'none';
191
+ iframe.style.position = 'absolute';
192
+ iframe.src = url;
193
+ document.body.appendChild(iframe);
194
+ // Remove the iframe after the specified timeout
195
+ setTimeout(() => {
196
+ iframe.remove();
197
+ }, timeoutMs);
198
+ }
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2hlbHBlci51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRELE9BQU8sRUFBUyxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsNEJBQTRCO0FBQzVCLGtDQUFrQztBQUNsQyxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLFFBQVEsQ0FBSSxHQUFNLEVBQUUsSUFBYztJQUNoRCxJQUFJLEdBQUcsR0FBTSxFQUFPLENBQUM7SUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckI7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFHO0lBQ3ZDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQzVCLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQUMsSUFBWSxFQUFFLE9BQXlCO0lBQzdFLGlEQUFp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QUFVLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQjtJQUNuRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QjtDQUNsRixDQUFDO0FBRUYsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxZQUFvQixLQUFLO0lBQ3pFLDZCQUE2QjtJQUM3QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUNuQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsQyxnREFBZ0Q7SUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTE9DQUxfRU5HTElTSF9MQU5HVUFHRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gJy4uL3BpcGVzL2ZpbHRlci5waXBlJztcbmltcG9ydCB7IENsb3VkLCBFZGdlIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eSc7XG5pbXBvcnQgeyBOdW1iZXJNYXAgfSBmcm9tICcuL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBpc0NoYXJhY3Rlckxlbmd0aFZhbGlkIH0gZnJvbSAnLi90ZXh0LnV0aWwnO1xuXG4vLyBHZXRzIGFuIG9iamVjdCBvZiB0eXBlPFQ+XG4vLyBHZXRzIGFuIGFycmF5IG9mIGtleXMgdG8gaWdub3JlXG4vLyBSZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRob3V0IHRoZSBvbWl0dGVkIGtleXNcbmV4cG9ydCBmdW5jdGlvbiBvbWl0S2V5czxUPihvYmo6IFQsIGtleXM6IHN0cmluZ1tdKSB7XG4gIHZhciBkdXA6IFQgPSB7fSBhcyBUO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpID09IC0xKSB7XG4gICAgICBkdXBba2V5XSA9IG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZHVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyV2l0aExlYWRpbmdaZXJvKG51bSkge1xuICBpZiAobnVtICE9PSBudWxsICYmIG51bSA8PSA5KSB7XG4gICAgbnVtID0gKGAwJHtudW19YCkuc2xpY2UoLTEwKTtcbiAgfVxuICByZXR1cm4gbnVtO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXlDYW5jZWxsYXRpb24odGltZTogbnVtYmVyLCBzdWJqZWN0OiBTdWJqZWN0PGJvb2xlYW4+KSB7XG4gIC8vIGNyZWF0ZSBhIHN1YnNjcmlwdGlvbiB0byB1c2Ugd2l0aCB5b3VyIHByb21pc2VcbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZSk7XG4gICAgLy8gYWRkIHRlYXJkb3duIGxvZ2ljIHRvIHRoZSBzdWJzY3JpcHRpb25cbiAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICByZXNvbHZlKG51bGwpO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBzdWJTdWJqZWN0ID0gc3ViamVjdC5zdWJzY3JpYmUoY2FuY2VsU3Vic2NyaXB0aW9uID0+IHtcbiAgICBpZiAoY2FuY2VsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAvLyBjYWxsIHVuc3Vic2NyaWJlIHRvIGNhbmNlbFxuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyB1c2UgdGhlIHByb21pc2UgaW52b2tlIHRoZSBkZWFseVxuICBhd2FpdCBwcm9taXNlO1xuXG4gIHN1YlN1YmplY3QudW5zdWJzY3JpYmUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBbGwoc3RyLCBmaW5kLCByZXBsYWNlKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGZpbmQsICdnJyksIHJlcGxhY2UpO1xufVxuXG5cbmV4cG9ydCBlbnVtIFJvd09wZXJhdGlvbiB7XG4gIEluc2VydCxcbiAgVXBkYXRlLFxuICBEZWxldGUsXG4gIE5vbmUsXG4gIEluc2VydFRvUGFyZW50LFxuICBVcGRhdGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0VudGl0eUFzVW5jaGFuZ2VkPFQ+KGVudGl0eTogVCk6IFQge1xuICByZXR1cm4gb21pdEtleXM8VD4oZW50aXR5LCBbJ2V4cGFuZGVkJywgJ2V4cGFuZGluZycsICdjaGFuZ2VkJywgJ3Jvd09wZXJhdGlvbicsICdmaW5kUm93SW5kZXgnXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrRW50aXRpZXNBc0NoYW5nZWQ8VCA9IGFueT4oZW50aXRpZXM6IGFueVtdLCByb3dPcGVyYXRpb246IFJvd09wZXJhdGlvbiA9IFJvd09wZXJhdGlvbi5Ob25lLFxuICBmaW5kUm93SW5kZXg/OiAoZW50aXR5OiBULCBlbnRpdGllczogVFtdKSA9PiBudW1iZXIpIHtcblxuICBpZiAoKHJvd09wZXJhdGlvbiA9PT0gUm93T3BlcmF0aW9uLlVwZGF0ZSB8fCByb3dPcGVyYXRpb24gPT09IFJvd09wZXJhdGlvbi5EZWxldGUpICYmICFmaW5kUm93SW5kZXgpIHtcbiAgICBmaW5kUm93SW5kZXggPSAoZW50aXR5OiBhbnksIGVudGl0aWVzOiBhbnlbXSkgPT4gZW50aXRpZXMuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gZW50aXR5LmlkKTtcbiAgfVxuXG4gIGZsYWdFbnRpdHkoZW50aXRpZXMsIHRydWUsIHJvd09wZXJhdGlvbiwgZmluZFJvd0luZGV4KTtcblxuICAvL3NvbHV0aW9uIGZvciB1bm1hcmtlZCBwcmV2aW91ZXMgcm93c1xuICBzZXRUaW1lb3V0KCgpID0+IGZsYWdFbnRpdHkoZW50aXRpZXMsIGZhbHNlLCBSb3dPcGVyYXRpb24uTm9uZSksIDEwMDApO1xufVxuXG5leHBvcnQgdHlwZSBSb3dUYWJsZVBheWxvYWQ8VCA9IGFueT4gPSB7IHJvd09wZXJhdGlvbjogUm93T3BlcmF0aW9uLCBjaGFuZ2VkOiBib29sZWFuLCBmaW5kUm93SW5kZXg/OiAoZW50aXR5OiBULCBlbnRpdGllczogVFtdKSA9PiBudW1iZXIgfTtcblxuZnVuY3Rpb24gZmxhZ0VudGl0eTxUIGV4dGVuZHMgUm93VGFibGVQYXlsb2FkPihlbnRpdGllczogVFtdLCBmbGFnOiBib29sZWFuLCByb3dPcGVyYXRpb246IFJvd09wZXJhdGlvbiwgZmluZFJvd0luZGV4PzogKGVudGl0eTogVCwgZW50aXRpZXM6IFRbXSkgPT4gbnVtYmVyKSB7XG4gIGVudGl0aWVzLmZvckVhY2goZW50aXR5ID0+IHtcbiAgICBlbnRpdHkuY2hhbmdlZCA9IGZsYWc7XG4gICAgZW50aXR5LnJvd09wZXJhdGlvbiA9IHJvd09wZXJhdGlvbiA/PyBlbnRpdHkucm93T3BlcmF0aW9uO1xuICAgIGVudGl0eS5maW5kUm93SW5kZXggPSBmaW5kUm93SW5kZXggfHwgKChlbnRpdHksIGVudGl0aWVzKSA9PiBudWxsKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzcyhjaXR5OiBzdHJpbmcsIHN0cmVldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGFkZHJlc3MgPSBudWxsO1xuICBpZiAoY2l0eSAmJiBzdHJlZXQpIHtcbiAgICBhZGRyZXNzID0gYCR7c3RyZWV0fSwgJHtjaXR5fWA7XG4gIH0gZWxzZSBpZiAoY2l0eSkge1xuICAgIGFkZHJlc3MgPSBjaXR5O1xuICB9IGVsc2UgaWYgKHN0cmVldCkge1xuICAgIGFkZHJlc3MgPSBzdHJlZXQ7XG4gIH1cblxuICByZXR1cm4gYWRkcmVzcztcbn1cblxuZXhwb3J0IHR5cGUgRmlsdGVyVmFsdWVSZXNvbHZlcjxUPiA9IChvYmo6IFQsIHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiBhbnk7XG5leHBvcnQgdHlwZSBTb21lVmFsdWVSZXNvbHZlcjxUPiA9IChvYmo6IFQsIHN1Ykdyb3VwUHJvcGVydHlOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nLCBzZWFyY2hWYWx1ZTogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHJlZHVjZTogYW55KSA9PiBhbnk7XG5cbmV4cG9ydCBjb25zdCBiYXNlUmVkdWNlOiBGaWx0ZXJWYWx1ZVJlc29sdmVyPGFueT4gPSAob2JqOiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBvYmpbcHJvcGVydHlOYW1lXTtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlcktleVZhbHVlQmFzZVJlZHVjZTogRmlsdGVyVmFsdWVSZXNvbHZlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB9PiA9IChcbiAgb2JqLFxuICBfLFxuKSA9PiBvYmoudmFsdWU7XG5cbmV4cG9ydCBmdW5jdGlvbiogZmxhdHRlbkJ5S2V5KGFycmF5LCBuZXN0ZWRLZXk6IHN0cmluZywgZGVwdGggPSAxKSB7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xuICAgIGlmIChpdGVtW25lc3RlZEtleV0gJiYgQXJyYXkuaXNBcnJheShpdGVtW25lc3RlZEtleV0pICYmIGRlcHRoID4gMCkge1xuICAgICAgeWllbGQqIGZsYXR0ZW5CeUtleShpdGVtW25lc3RlZEtleV0sIG5lc3RlZEtleSwgZGVwdGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeWllbGQgaXRlbTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSU9TRGV2aWNlKCkge1xuICB2YXIgaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgdmFyIGlzQXBwbGVEZXZpY2UgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKCdNYWNpbnRvc2gnKTtcbiAgdmFyIGlzVG91Y2hTY3JlZW4gPSBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPj0gMTsgLy8gdHJ1ZSBmb3IgaU9TIDEzIChhbmQgaG9wZWZ1bGx5IGJleW9uZClcbiAgcmV0dXJuIGlzSU9TIHx8IChpc0FwcGxlRGV2aWNlICYmIChpc1RvdWNoU2NyZWVuIHx8IGlPUzF0bzEycXVpcmsoKSkpO1xufVxuXG5mdW5jdGlvbiBpT1MxdG8xMnF1aXJrKCkge1xuICB2YXIgYXVkaW8gPSBuZXcgQXVkaW8oKTsgLy8gdGVtcG9yYXJ5IEF1ZGlvIG9iamVjdFxuICBhdWRpby52b2x1bWUgPSAwLjU7IC8vIGhhcyBubyBlZmZlY3Qgb24gaU9TIDw9IDEyXG4gIHJldHVybiBhdWRpby52b2x1bWUgPT09IDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtaWxsaXNlY29uZHM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iajoge30pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUcnVlSW5CaW5hcnkoZGVjaW1hbFZhbHVlOiBudW1iZXIsIGJpdFBvc2l0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChkZWNpbWFsVmFsdWUgJiBiaXRQb3NpdGlvbikgIT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QmluYXJ5VG9EZWNpbWFsKGJpbmFyeVN0cmluZzogc3RyaW5nKTogbnVtYmVyIHtcbiAgLy8gVXNlIHBhcnNlSW50IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBkZWNpbWFsIG51bWJlclxuICByZXR1cm4gcGFyc2VJbnQoYmluYXJ5U3RyaW5nLCAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREZWNpbWFsVG9CaW5hcnkoZGVjaW1hbE51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgLy8gVXNlIHRvU3RyaW5nKDIpIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZGVjaW1hbCBudW1iZXIgdG8gYmluYXJ5IHN0cmluZ1xuICByZXR1cm4gaXNOYU4oZGVjaW1hbE51bWJlcikgPyAnJyA6IGRlY2ltYWxOdW1iZXIudG9TdHJpbmcoMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdE9iamVjdEJ5UHJvcGVydHk8VCwgSyBleHRlbmRzIGtleW9mIFQ+KGFycjogVFtdLCBwcm9wOiBLKTogVFtdIHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxUW0tdLCBUPigpO1xuICBhcnIuZm9yRWFjaChpdGVtID0+IHtcbiAgICBjb25zdCBrZXkgPSBpdGVtW3Byb3BdO1xuICAgIGlmICghbWFwLmhhcyhrZXkpKSB7XG4gICAgICBtYXAuc2V0KGtleSwgaXRlbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIEFycmF5LmZyb20obWFwLnZhbHVlcygpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0T2JqZWN0QnlQcm9wZXJ0aWVzPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPihhcnI6IFRbXSwgLi4ucHJvcHM6IEtbXSk6IFRbXSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUPigpO1xuICBhcnIuZm9yRWFjaChpdGVtID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcm9wcy5tYXAocHJvcCA9PiBpdGVtW3Byb3BdKS5qb2luKCdfJyk7XG4gICAgaWYgKCFtYXAuaGFzKGtleSkpIHtcbiAgICAgIG1hcC5zZXQoa2V5LCBpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudExhbmcodXNlclNldHRpbmdzOiBNYXA8RWRnZS5TZXR0aW5nc0NhdGVnb3J5LCBhbnk+KSB7XG4gIGNvbnN0IHZhbHVlOiBDbG91ZC5Mb2NhbGl6YXRpb25EdG8gPSB1c2VyU2V0dGluZ3M/LmdldChFZGdlLlNldHRpbmdzQ2F0ZWdvcnkuTG9jYWxpemF0aW9uKTtcbiAgcmV0dXJuIHZhbHVlPy5rZXlOYW1lID8/IExPQ0FMX0VOR0xJU0hfTEFOR1VBR0U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYXJjaEZpZWxkQ2hhbmdlZChwcmV2OiBhbnksIGN1cnI6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBpc0ZpZWxkU2VsZWN0b3JDaGFuZ2VkID0gcHJldi5zZWFyY2hGaWVsZFNlbGVjdG9yICE9PSBjdXJyLnNlYXJjaEZpZWxkU2VsZWN0b3IgJiYgY3Vyci5zZWFyY2hWYWx1ZTtcbiAgY29uc3QgaXNTZWFyY2hWYWx1ZUNoYW5nZWQgPSBwcmV2LnNlYXJjaFZhbHVlICE9PSBjdXJyLnNlYXJjaFZhbHVlO1xuXG4gIHJldHVybiAoaXNGaWVsZFNlbGVjdG9yQ2hhbmdlZCB8fCBpc1NlYXJjaFZhbHVlQ2hhbmdlZCkgJiYgaXNDaGFyYWN0ZXJMZW5ndGhWYWxpZChjdXJyLnNlYXJjaFZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IE1haW5Nb2R1bGVUb1N1Yk1vZHVsZXNQZXJtaXNzaW9uVHlwZU1hcDogTnVtYmVyTWFwPEVkZ2UuUGVybWlzc2lvblR5cGVbXT4gPSB7XG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLkNjTWFpbl06IFtdLFxuICBbRWRnZS5QZXJtaXNzaW9uVHlwZS5BY2NvdW50TWFuYWdlbWVudE1haW5dOiBbRWRnZS5QZXJtaXNzaW9uVHlwZS5BY2NvdW50TWFuYWdlbWVudEFjY291bnRWaWV3LCBFZGdlLlBlcm1pc3Npb25UeXBlLkFjY291bnRNYW5hZ2VtZW50QWNjb3VudENyZWF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5BY2NvdW50TWFuYWdlbWVudEFjY291bnRVcGRhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50RGVsZXRlXSxcbiAgW0VkZ2UuUGVybWlzc2lvblR5cGUuTW9udGhsaWVzTWFpbl06IFtFZGdlLlBlcm1pc3Npb25UeXBlLk1vbnRobGllc1ZpZXcsIEVkZ2UuUGVybWlzc2lvblR5cGUuTW9udGhsaWVzQ3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLk1vbnRobGllc1VwZGF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5Nb250aGxpZXNEZWxldGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuTW9udGhseVNlcmllc0NyZWF0ZV0sXG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0TWFpbl06IFtFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0VmlldywgRWRnZS5QZXJtaXNzaW9uVHlwZS5HdWVzdENyZWF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5HdWVzdFVwZGF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5HdWVzdERlbGV0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5HdWVzdEdyb3VwVmlldywgRWRnZS5QZXJtaXNzaW9uVHlwZS5HdWVzdEdyb3VwQ3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0SG90ZWxHdWVzdFZpZXcsIEVkZ2UuUGVybWlzc2lvblR5cGUuSG90ZWxHdWVzdElPQ3JlYXRlXSxcbiAgW0VkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbk1haW5dOiBbXG4gICAgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uRVZhbGlkYXRpb25WaWV3LCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25FVmFsaWRhdGlvbkNyZWF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uRVZhbGlkYXRpb25VcGRhdGUsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbkVWYWxpZGF0aW9uRGVsZXRlLFxuICAgIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvblN0aWNrZXJWaWV3LCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25TdGlja2VyQ3JlYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25TdGlja2VyVXBkYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25TdGlja2VyRGVsZXRlLFxuICAgIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbkNvdXBvblZpZXcsIEVkZ2UuUGVybWlzc2lvblR5cGUuVmFsaWRhdGlvbkNvdXBvbkNyZWF0ZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5WYWxpZGF0aW9uQ291cG9uVXBkYXRlLCBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25Db3Vwb25EZWxldGVdLFxuICBbRWRnZS5QZXJtaXNzaW9uVHlwZS5SZXBvcnRzTWFpbl06IFtdLFxuICBbRWRnZS5QZXJtaXNzaW9uVHlwZS5Mb3RDb25maWd1cmF0aW9uTWFpbl06IFtFZGdlLlBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25SYXRlcywgRWRnZS5QZXJtaXNzaW9uVHlwZS5Mb3RDb25maWd1cmF0aW9uU2NoZWR1bGVyLCBFZGdlLlBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25WYWxpZGF0aW9uUHJvZmlsZSwgRWRnZS5QZXJtaXNzaW9uVHlwZS5Mb3RDb25maWd1cmF0aW9uQWNjZXNzUHJvZmlsZV0sXG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLlRlbmFudFNldHRpbmdzTWFpbl06IFtFZGdlLlBlcm1pc3Npb25UeXBlLk1hbmFnZW1lbnRBZG1pbl0sXG4gIFtFZGdlLlBlcm1pc3Npb25UeXBlLkVDb21tZXJjZUJhY2tvZmZpY2VNYWluXTogW0VkZ2UuUGVybWlzc2lvblR5cGUuRUNvbW1lcmNlQWRtaW4sIEVkZ2UuUGVybWlzc2lvblR5cGUuRUNvbW1lcmNlUmVndWxhcl1cbn07XG5cbmV4cG9ydCBjb25zdCBBcHBNb2R1bGVUb01haW5QZXJtaXNzaW9uVHlwZU1hcDogTnVtYmVyTWFwPEVkZ2UuUGVybWlzc2lvblR5cGU+ID0ge1xuICBbRWRnZS5BcHBNb2R1bGUuQ2NdOiBFZGdlLlBlcm1pc3Npb25UeXBlLkNjTWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLkFjY291bnRzXTogRWRnZS5QZXJtaXNzaW9uVHlwZS5BY2NvdW50TWFuYWdlbWVudE1haW4sXG4gIFtFZGdlLkFwcE1vZHVsZS5Nb250aGxpZXNdOiBFZGdlLlBlcm1pc3Npb25UeXBlLk1vbnRobGllc01haW4sXG4gIFtFZGdlLkFwcE1vZHVsZS5HdWVzdHNdOiBFZGdlLlBlcm1pc3Npb25UeXBlLkd1ZXN0TWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLlZhbGlkYXRpb25dOiBFZGdlLlBlcm1pc3Npb25UeXBlLlZhbGlkYXRpb25NYWluLFxuICBbRWRnZS5BcHBNb2R1bGUuUmVwb3J0c106IEVkZ2UuUGVybWlzc2lvblR5cGUuUmVwb3J0c01haW4sXG4gIFtFZGdlLkFwcE1vZHVsZS5Mb3RDb25maWd1cmF0aW9uXTogRWRnZS5QZXJtaXNzaW9uVHlwZS5Mb3RDb25maWd1cmF0aW9uTWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLk1hbmFnZW1lbnRdOiBFZGdlLlBlcm1pc3Npb25UeXBlLlRlbmFudFNldHRpbmdzTWFpbixcbiAgW0VkZ2UuQXBwTW9kdWxlLkVDb21tZXJjZUJhY2tvZmZpY2VdOiBFZGdlLlBlcm1pc3Npb25UeXBlLkVDb21tZXJjZUJhY2tvZmZpY2VNYWluLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5CYWNrZ3JvdW5kSWZyYW1lKHVybDogc3RyaW5nLCB0aW1lb3V0TXM6IG51bWJlciA9IDYwMDAwKTogdm9pZCB7XG4gIC8vIENyZWF0ZSBhbiBpbnZpc2libGUgaWZyYW1lXG4gIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICBpZnJhbWUuc3R5bGUud2lkdGggPSAnMCc7XG4gIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMCc7XG4gIGlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XG4gIGlmcmFtZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIGlmcmFtZS5zcmMgPSB1cmw7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICAvLyBSZW1vdmUgdGhlIGlmcmFtZSBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXRcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWZyYW1lLnJlbW92ZSgpO1xuICB9LCB0aW1lb3V0TXMpO1xufSJdfQ==
@@ -20,4 +20,5 @@ export * from './permission-type-mapper.util';
20
20
  export * from './search-params.util';
21
21
  export * from './support-version.util';
22
22
  export * from './text.util';
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU87QUFDUCxjQUFjLFFBQVEsQ0FBQTtBQUV0QixRQUFRO0FBQ1IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOR1hTXG5leHBvcnQgKiBmcm9tICcuL25neHMnXG5cbi8vIFV0aWxzXG5leHBvcnQgKiBmcm9tICcuL2FycmF5LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC1jb250cm9sLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGktaGVscGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9ib29sZWFuLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jdXJyZW5jeS1oZWxwZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2N1c3RvbS12YWxpZGF0b3IudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2tleWJvYXJkLWV2ZW50LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sYW5nLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhbC1zdG9yYWdlLW1pZ3JhdG9yLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRhZGF0YS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbnVtYmVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtcGFyYW1zLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3RleHQudXRpbCc7XG4iXX0=
23
+ export * from './aes.util';
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU87QUFDUCxjQUFjLFFBQVEsQ0FBQTtBQUV0QixRQUFRO0FBQ1IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOR1hTXG5leHBvcnQgKiBmcm9tICcuL25neHMnXG5cbi8vIFV0aWxzXG5leHBvcnQgKiBmcm9tICcuL2FycmF5LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC1jb250cm9sLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9hcGktaGVscGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9ib29sZWFuLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jdXJyZW5jeS1oZWxwZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2N1c3RvbS12YWxpZGF0b3IudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2tleWJvYXJkLWV2ZW50LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sYW5nLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhbC1zdG9yYWdlLW1pZ3JhdG9yLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRhZGF0YS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbnVtYmVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9uLXR5cGUtbWFwcGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtcGFyYW1zLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3RleHQudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Flcy51dGlsJztcbiJdfQ==
@@ -14,6 +14,7 @@ import * as i1$2 from '@angular/common/http';
14
14
  import { HttpHeaders, HttpResponseBase, HttpResponse, HttpClient, HttpClientModule } from '@angular/common/http';
15
15
  import moment from 'moment';
16
16
  import moment$1 from 'moment-timezone';
17
+ import * as CryptoJS from 'crypto-js';
17
18
  import * as i1$3 from '@ngx-translate/core';
18
19
  import { TranslateModule, TranslateStore } from '@ngx-translate/core';
19
20
  import { __decorate } from 'tslib';
@@ -6287,20 +6288,10 @@ let UsersServiceProxy$1 = class UsersServiceProxy {
6287
6288
  return of(null);
6288
6289
  }
6289
6290
  /**
6290
- * @param userId (optional)
6291
- * @param tenantId (optional)
6292
6291
  * @return Success
6293
6292
  */
6294
- auditLogout(userId, tenantId) {
6295
- let url_ = this.baseUrl + "/api/services/users/audit-logout?";
6296
- if (userId === null)
6297
- throw new Error("The parameter 'userId' cannot be null.");
6298
- else if (userId !== undefined)
6299
- url_ += "userId=" + encodeURIComponent("" + userId) + "&";
6300
- if (tenantId === null)
6301
- throw new Error("The parameter 'tenantId' cannot be null.");
6302
- else if (tenantId !== undefined)
6303
- url_ += "tenantId=" + encodeURIComponent("" + tenantId) + "&";
6293
+ auditLogout() {
6294
+ let url_ = this.baseUrl + "/api/services/users/audit-logout";
6304
6295
  url_ = url_.replace(/[?&]$/, "");
6305
6296
  let options_ = {
6306
6297
  observe: "response",
@@ -70534,6 +70525,8 @@ const DEFAULT_MINUMIM_LENGTH = 8;
70534
70525
  const MAX_NUMBER_OF_NIGHTS = 999999;
70535
70526
  const MAX_INT32_VALUE = 2147483647;
70536
70527
  const MAX_ALLOWED_IDENTIFIER_VALUE = 36;
70528
+ const STATUS_CODE_UNAUTHORIZED = 401;
70529
+ const AES_DEFAULT_IV = '00000000000000000000000000000000';
70537
70530
  const SUPPORTED_DEVICES_SCHEDULER = [DeviceType.CashReader,
70538
70531
  DeviceType.Dispenser,
70539
70532
  DeviceType.Verifier,
@@ -70922,7 +70915,7 @@ const decimalPercentageRegex = /^(100(?:\.0{1,2})?|[0-9]{1,2}(?:\.[0-9]{1,2})?)$
70922
70915
  function isNullOrEmpty(val) {
70923
70916
  return (val === undefined || val === null || val === '');
70924
70917
  }
70925
- function convertAmPmTo24Hours(time) {
70918
+ function convertAmPmTo24Hours(time, enableFullDay) {
70926
70919
  let _time = null;
70927
70920
  if (time) {
70928
70921
  _time = { ...time }; // Spread operator for immutability
@@ -70930,7 +70923,7 @@ function convertAmPmTo24Hours(time) {
70930
70923
  _time.hours = +_time.hours + 12; // Convert PM hours (except 12 PM) to 24-hour format
70931
70924
  }
70932
70925
  else if (time.middayPeriod === MiddayPeriod.AM && +time.hours === 12) {
70933
- _time.hours = 0; // Midnight case (12 AM is 00:00 in 24-hour time)
70926
+ _time.hours = enableFullDay ? 24 : 0; // Midnight case (12 AM is 00:00 in 24-hour time and 24:00 when full day option is active)
70934
70927
  }
70935
70928
  }
70936
70929
  return _time;
@@ -71652,6 +71645,20 @@ const AppModuleToMainPermissionTypeMap = {
71652
71645
  [AppModule$1.Management]: PermissionType$1.TenantSettingsMain,
71653
71646
  [AppModule$1.ECommerceBackoffice]: PermissionType$1.ECommerceBackofficeMain,
71654
71647
  };
71648
+ function openBackgroundIframe(url, timeoutMs = 60000) {
71649
+ // Create an invisible iframe
71650
+ const iframe = document.createElement('iframe');
71651
+ iframe.style.width = '0';
71652
+ iframe.style.height = '0';
71653
+ iframe.style.border = 'none';
71654
+ iframe.style.position = 'absolute';
71655
+ iframe.src = url;
71656
+ document.body.appendChild(iframe);
71657
+ // Remove the iframe after the specified timeout
71658
+ setTimeout(() => {
71659
+ iframe.remove();
71660
+ }, timeoutMs);
71661
+ }
71655
71662
 
71656
71663
  function findParentElement(elementRef, className) {
71657
71664
  let element = elementRef.nativeElement;
@@ -71822,6 +71829,32 @@ function versionValue(version) {
71822
71829
  return (+tmp[0] * 100) + (+tmp[1] * 10) + +tmp[2];
71823
71830
  }
71824
71831
 
71832
+ function decryptClientSecret(encryptedSecret, encryptionKey) {
71833
+ let decryptedSecret = null;
71834
+ if (encryptedSecret?.length > 0) {
71835
+ var key_iv = encryptedSecret.split("#");
71836
+ let key;
71837
+ let iv;
71838
+ if (key_iv.length == 2) {
71839
+ key = CryptoJS.enc.Utf8.parse(key_iv[0]);
71840
+ iv = CryptoJS.enc.Utf8.parse(key_iv[0]);
71841
+ }
71842
+ else {
71843
+ key = CryptoJS.enc.Utf8.parse(encryptionKey);
71844
+ iv = CryptoJS.enc.Hex.parse(AES_DEFAULT_IV);
71845
+ }
71846
+ // Perform decryption
71847
+ const decrypted = CryptoJS.AES.decrypt(encryptedSecret, key, {
71848
+ iv: iv,
71849
+ mode: CryptoJS.mode.CBC,
71850
+ padding: CryptoJS.pad.Pkcs7
71851
+ });
71852
+ // Return the decrypted data as a UTF-8 string
71853
+ decryptedSecret = decrypted.toString(CryptoJS.enc.Utf8);
71854
+ }
71855
+ return decryptedSecret;
71856
+ }
71857
+
71825
71858
  // NGXS
71826
71859
 
71827
71860
  class TBNumberDirective {
@@ -73253,5 +73286,5 @@ function slideUpDown() {
73253
73286
  * Generated bundle index. Do not edit.
73254
73287
  */
73255
73288
 
73256
- export { ACCESS_PROFILE_DAT_TYPES_SP, ALERT_NOTIFICATION_CONTAINER, ALLOWED_FILES_FORMATS, ALLOWED_FILES_MAX_SIZE_MB, ALLOWED_NUMBER_OF_DAYS, ALLOWED_UPLOAD_FILES_QUANTITY, ActionStatusService, AppModuleToMainPermissionTypeMap, AppSectionLabel, AppSectionModuleMenu, AppSectionRoute, AuditActionTypeText, AutofocusDirective, BOM_UNICODE, BaseComponent, CLogItPipe, COLORS, CREDIT_CARD_POSTFIX_LENGTH, CentToCoinPipe, cloudServiceProxies as Cloud, ContainerRefDirective, CurlyToBoldPipe, DATA_IMAGE_BASE64_PREFIX, DATA_IMAGE_BASE64_SVG_PREFIX, DEFAULT_MINUMIM_LENGTH, DEFAULT_SMART_PARK_DATE_TIME, DEVICE_EVENT_OPTIONS_KEY, DEVICE_NAVIGATE_KEY, DISABLED_FOCUS_ELEMENT_CLASSES, DISABLED_FOCUS_ELEMENT_TYPES, DataQaAttribute, DecimalToAmountPipe, DecimalToCurrencyPipe, DialogMode, DurationMessageBar, ENGLISH_LANGUAGE, ENVIRONMENT, EXPIRATION_MONTH_OPTIONS, edgeServiceProxies as Edge, EllipsisMultilineDirective, EnumsToArrayPipe, EnvironmentModeText, FieldLabelComponent, FieldValidationsComponent, FilterKeysPipe, FilterNumbersPipe, FilterPipe, FormValidationsComponent, GenerateSearchParamsDto, GetAllLocalizationsAction, HOUR_FORMAT_12, HOUR_FORMAT_24, HOUR_FORMAT_FULL_DAY, HasActionErrored, HttpCancelBlackListUrls, INPUT_SEARCH_DEBOUNCE_TIME, INPUT_SEARCH_DEBOUNCE_TIME_LOW, INPUT_SEARCH_DEBOUNCE_TIME_MEDIUM, IconsHelper, IconsHelperText, identityServiceProxies as Identity, InternetConnectionStatus, IsActionExecuting, IsEllipsisDirective, LOCAL_ENGLISH_LANGUAGE, LOGGED_TENANT_KEY, LanguageTypeKeys, LocalStorageMigrator, Localization, LocalizationModule, LocalizationService, LocalizationState, MAX_ALLOWED_BADGE_VALUE, MAX_ALLOWED_CURRENT_BALANCE, MAX_ALLOWED_IDENTIFIER_VALUE, MAX_CARDS, MAX_CAR_PLATES, MAX_EXPORT_RECORDS, MAX_HOTEL_ROOM_NUMBER_LENGTH, MAX_INT16_VALUE, MAX_INT32_VALUE, MAX_INTEGER_VALUE, MAX_LENGTH_DESCRIPTION, MAX_LENGTH_NAME_30, MAX_LENGTH_NAME_50, MAX_LENGTH_SERACH_TERM, MAX_MOBILE_LENGTH, MAX_NUMBER_OF_NIGHTS, MAX_PLATE_ID_LENGTH, MAX_PRICE_NO_TIME_LIMIT_VALUE, MAX_PRICE_PERIOD_VALUE, MAX_REPEAT_COUNT_VALUE, MAX_RESULTS, MAX_ROLE_NAME_LENGTH, MAX_SP, MC_READER_ID, MINIMUM_LENGTH_OPTIONS, MINUTES_PER_HOUR, MOBILE_REFRESH_INFO, MULTIPLE, MainModuleToSubModulesPermissionTypeMap, MiddayPeriod, MobileAppSectionLabel, MslEventType, NONE_USER_ID, NO_RESULT, NativeElementInjectorDirective, ONE_DAY_IN_MINUTES_VALUE, ONE_SECOND_IN_MILLISECONDS, OffScreenDirective, Operator, OrderBy, OrderByPipe, OrderDirection, PARKER_SEARCH_AUTO_REDIRECT, PASSWORD_EXPIRED, PERIOD_TIME, PREVENT_CLICK_ELEMENT_CLASSES, REDIRECT_URL, RESET_PASSWORD_EMAIL, RowOperation, SESSION, STATUS_CODE_SERVER_VALIDATION, STRING_ZERO, SUPER_PARK_ROUTE_KEY, SUPPORTED_DEVICES_SCHEDULER, SYSTEM_ALERT_VALUE, ServiceProxyModule, SharedComponentsModule, SharedDirectivesModule, SharedModule, SharedPipesModule, SortPipe, SpinnerDiameterSize, StopPropagationDirective, StringItPipe, TBFormatPipe, TBNumberDirective, TENANT_KEY, TENS_MULTIPLIER, TibaValidators, TimeAgoPipe, TimeElapsedFormats, TimeElapsedPipe, TimeRangeFormats, TimeRangePipe, TooltipPositions, TrackAction, TranslateLocalPipe, TreeFilterKeysPipe, TreeMode, UNSAVED_DATA, USER_IS_TEMPORARY_BLOCKED, VALID_TIME_MAX_LENGTH, VERSION_10_1_0, VERSION_10_2_0, VERSION_10_2_1, VERSION_10_3_0, VERSION_7_4_0, VERSION_7_4_1, VERSION_8_1_0, VERSION_8_2_0, VERSION_8_3_0, VERSION_8_4_0, VERSION_9_1_0, VERSION_9_2_0, VERSION_9_2_2, VERSION_9_3_0, VERSION_9_4_0, VarDirective, WrapFnPipe, ZerofyNegativePipe, accountModuleAnimation, adjustForTimezone, allowSpecialKeys, alphanumericRegex, appModuleAnimation, areDatesIdentical, areVersionsCompatible, arrayEquals, arraysAreDifferent, baseReduce, camelize, canceled, capitalizeFirstLetter, convert24HoursToAmPM, convertAmPmTo24Hours, convertBinaryToDecimal, convertCentToWholeCoin, convertDecimalToBinary, convertFeaturePermissionsToDictionary, convertFormatWithoutTime, convertPermissionsToDictionary, convertWholeCoinToCent, createDescriptor, dateDiffInSeconds, decimalNumberRegex, decimalPercentageRegex, decimalPositiveNumberRegex, delayCancellation, diffInMillis, dispatched, distinctObjectByProperties, distinctObjectByProperty, ensureObjectMetadata, errored, extractErrorsChanges, extractNumber, extractResetChanges, extractSetValueChanges, extractToggleStatusChanges, extractTouchedChanges, extractUpdateValueAndValidityChanges, filterKeyValueBaseReduce, findParentElement, findParentElementDimensions, flattenByKey, formatMinutesToTimeNumber, formatTimeToMinutes, formatTimeWithMidnight, formatTimeWithSeparator, formatTimeWithoutMidnight, formatTimeWithoutSeparator, formatTimeWithoutSeperatorAndWithMidnight, formatTimeWithoutSeperatorAndWithoutMidnight, getAddress, getCurrentLang, getDateTimeInSeconds, getDateWithoutTime, getMomenWithTime, getMomentNullable, getMomentWithoutTime, getObjectMetadata, getUserTimeZone, getUtcMomentNullable, hasValue, humanizeTimeElapsed, humanizeUtcTimeElapsed, identity, integerNumberRegex, integerPositiveNumberRegex, isBoolean, isCharacterLengthValid, isFalsy, isIOSDevice, isMaxDaysRangeValid, isNullOrEmpty, isNumber, isObjectEmpty, isSearchFieldChanged, isSingularOrPlural, isTrueInBinary, isTruthy, isVersionGreaterThanEqual, loadHTMLContent, lowerCase, lowerCaseFirstLetter, markEntitiesAsChanged, markEntityAsUnchanged, minutesToTime, mobileRegex, noEmojiRegex, notificationAnimation, numberWithLeadingZero, ofStatus, omitKeys, openCloseFiltersAnimation, parseApiErrorData, parseApiErrorMessage, parseDateTimeToSparkParkTime, parseSmartParkTime, passwordRegex, percentageRegex, printStackTrace, readjustForTimezone, regexExp, replaceAll, searchBarPopupAnimation, setErrorMessage, sleep, slideFromBottom, slideFromRight, slideFromUp, slideUpDown, successful, timeToMinutes, timeToMoment, toInt, toNumberMap, toStringMap, wrapConstructor };
73289
+ export { ACCESS_PROFILE_DAT_TYPES_SP, AES_DEFAULT_IV, ALERT_NOTIFICATION_CONTAINER, ALLOWED_FILES_FORMATS, ALLOWED_FILES_MAX_SIZE_MB, ALLOWED_NUMBER_OF_DAYS, ALLOWED_UPLOAD_FILES_QUANTITY, ActionStatusService, AppModuleToMainPermissionTypeMap, AppSectionLabel, AppSectionModuleMenu, AppSectionRoute, AuditActionTypeText, AutofocusDirective, BOM_UNICODE, BaseComponent, CLogItPipe, COLORS, CREDIT_CARD_POSTFIX_LENGTH, CentToCoinPipe, cloudServiceProxies as Cloud, ContainerRefDirective, CurlyToBoldPipe, DATA_IMAGE_BASE64_PREFIX, DATA_IMAGE_BASE64_SVG_PREFIX, DEFAULT_MINUMIM_LENGTH, DEFAULT_SMART_PARK_DATE_TIME, DEVICE_EVENT_OPTIONS_KEY, DEVICE_NAVIGATE_KEY, DISABLED_FOCUS_ELEMENT_CLASSES, DISABLED_FOCUS_ELEMENT_TYPES, DataQaAttribute, DecimalToAmountPipe, DecimalToCurrencyPipe, DialogMode, DurationMessageBar, ENGLISH_LANGUAGE, ENVIRONMENT, EXPIRATION_MONTH_OPTIONS, edgeServiceProxies as Edge, EllipsisMultilineDirective, EnumsToArrayPipe, EnvironmentModeText, FieldLabelComponent, FieldValidationsComponent, FilterKeysPipe, FilterNumbersPipe, FilterPipe, FormValidationsComponent, GenerateSearchParamsDto, GetAllLocalizationsAction, HOUR_FORMAT_12, HOUR_FORMAT_24, HOUR_FORMAT_FULL_DAY, HasActionErrored, HttpCancelBlackListUrls, INPUT_SEARCH_DEBOUNCE_TIME, INPUT_SEARCH_DEBOUNCE_TIME_LOW, INPUT_SEARCH_DEBOUNCE_TIME_MEDIUM, IconsHelper, IconsHelperText, identityServiceProxies as Identity, InternetConnectionStatus, IsActionExecuting, IsEllipsisDirective, LOCAL_ENGLISH_LANGUAGE, LOGGED_TENANT_KEY, LanguageTypeKeys, LocalStorageMigrator, Localization, LocalizationModule, LocalizationService, LocalizationState, MAX_ALLOWED_BADGE_VALUE, MAX_ALLOWED_CURRENT_BALANCE, MAX_ALLOWED_IDENTIFIER_VALUE, MAX_CARDS, MAX_CAR_PLATES, MAX_EXPORT_RECORDS, MAX_HOTEL_ROOM_NUMBER_LENGTH, MAX_INT16_VALUE, MAX_INT32_VALUE, MAX_INTEGER_VALUE, MAX_LENGTH_DESCRIPTION, MAX_LENGTH_NAME_30, MAX_LENGTH_NAME_50, MAX_LENGTH_SERACH_TERM, MAX_MOBILE_LENGTH, MAX_NUMBER_OF_NIGHTS, MAX_PLATE_ID_LENGTH, MAX_PRICE_NO_TIME_LIMIT_VALUE, MAX_PRICE_PERIOD_VALUE, MAX_REPEAT_COUNT_VALUE, MAX_RESULTS, MAX_ROLE_NAME_LENGTH, MAX_SP, MC_READER_ID, MINIMUM_LENGTH_OPTIONS, MINUTES_PER_HOUR, MOBILE_REFRESH_INFO, MULTIPLE, MainModuleToSubModulesPermissionTypeMap, MiddayPeriod, MobileAppSectionLabel, MslEventType, NONE_USER_ID, NO_RESULT, NativeElementInjectorDirective, ONE_DAY_IN_MINUTES_VALUE, ONE_SECOND_IN_MILLISECONDS, OffScreenDirective, Operator, OrderBy, OrderByPipe, OrderDirection, PARKER_SEARCH_AUTO_REDIRECT, PASSWORD_EXPIRED, PERIOD_TIME, PREVENT_CLICK_ELEMENT_CLASSES, REDIRECT_URL, RESET_PASSWORD_EMAIL, RowOperation, SESSION, STATUS_CODE_SERVER_VALIDATION, STATUS_CODE_UNAUTHORIZED, STRING_ZERO, SUPER_PARK_ROUTE_KEY, SUPPORTED_DEVICES_SCHEDULER, SYSTEM_ALERT_VALUE, ServiceProxyModule, SharedComponentsModule, SharedDirectivesModule, SharedModule, SharedPipesModule, SortPipe, SpinnerDiameterSize, StopPropagationDirective, StringItPipe, TBFormatPipe, TBNumberDirective, TENANT_KEY, TENS_MULTIPLIER, TibaValidators, TimeAgoPipe, TimeElapsedFormats, TimeElapsedPipe, TimeRangeFormats, TimeRangePipe, TooltipPositions, TrackAction, TranslateLocalPipe, TreeFilterKeysPipe, TreeMode, UNSAVED_DATA, USER_IS_TEMPORARY_BLOCKED, VALID_TIME_MAX_LENGTH, VERSION_10_1_0, VERSION_10_2_0, VERSION_10_2_1, VERSION_10_3_0, VERSION_7_4_0, VERSION_7_4_1, VERSION_8_1_0, VERSION_8_2_0, VERSION_8_3_0, VERSION_8_4_0, VERSION_9_1_0, VERSION_9_2_0, VERSION_9_2_2, VERSION_9_3_0, VERSION_9_4_0, VarDirective, WrapFnPipe, ZerofyNegativePipe, accountModuleAnimation, adjustForTimezone, allowSpecialKeys, alphanumericRegex, appModuleAnimation, areDatesIdentical, areVersionsCompatible, arrayEquals, arraysAreDifferent, baseReduce, camelize, canceled, capitalizeFirstLetter, convert24HoursToAmPM, convertAmPmTo24Hours, convertBinaryToDecimal, convertCentToWholeCoin, convertDecimalToBinary, convertFeaturePermissionsToDictionary, convertFormatWithoutTime, convertPermissionsToDictionary, convertWholeCoinToCent, createDescriptor, dateDiffInSeconds, decimalNumberRegex, decimalPercentageRegex, decimalPositiveNumberRegex, decryptClientSecret, delayCancellation, diffInMillis, dispatched, distinctObjectByProperties, distinctObjectByProperty, ensureObjectMetadata, errored, extractErrorsChanges, extractNumber, extractResetChanges, extractSetValueChanges, extractToggleStatusChanges, extractTouchedChanges, extractUpdateValueAndValidityChanges, filterKeyValueBaseReduce, findParentElement, findParentElementDimensions, flattenByKey, formatMinutesToTimeNumber, formatTimeToMinutes, formatTimeWithMidnight, formatTimeWithSeparator, formatTimeWithoutMidnight, formatTimeWithoutSeparator, formatTimeWithoutSeperatorAndWithMidnight, formatTimeWithoutSeperatorAndWithoutMidnight, getAddress, getCurrentLang, getDateTimeInSeconds, getDateWithoutTime, getMomenWithTime, getMomentNullable, getMomentWithoutTime, getObjectMetadata, getUserTimeZone, getUtcMomentNullable, hasValue, humanizeTimeElapsed, humanizeUtcTimeElapsed, identity, integerNumberRegex, integerPositiveNumberRegex, isBoolean, isCharacterLengthValid, isFalsy, isIOSDevice, isMaxDaysRangeValid, isNullOrEmpty, isNumber, isObjectEmpty, isSearchFieldChanged, isSingularOrPlural, isTrueInBinary, isTruthy, isVersionGreaterThanEqual, loadHTMLContent, lowerCase, lowerCaseFirstLetter, markEntitiesAsChanged, markEntityAsUnchanged, minutesToTime, mobileRegex, noEmojiRegex, notificationAnimation, numberWithLeadingZero, ofStatus, omitKeys, openBackgroundIframe, openCloseFiltersAnimation, parseApiErrorData, parseApiErrorMessage, parseDateTimeToSparkParkTime, parseSmartParkTime, passwordRegex, percentageRegex, printStackTrace, readjustForTimezone, regexExp, replaceAll, searchBarPopupAnimation, setErrorMessage, sleep, slideFromBottom, slideFromRight, slideFromUp, slideUpDown, successful, timeToMinutes, timeToMoment, toInt, toNumberMap, toStringMap, wrapConstructor };
73257
73290
  //# sourceMappingURL=tiba-spark-client-shared-lib.mjs.map