@minsize/utils 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -42,8 +42,8 @@ yarn add @minsize/utils
42
42
  | `groupBy` | Группирует элементы массива по заданному критерию. |
43
43
  | `orderBy` | Сортирует массив объектов по указанным вложенным ключам и направлениям. |
44
44
  | `parseVersionString` | Преобразует строку версии в объект JSON, разделяя её на основные части версии. |
45
- | `parseVersionString` | Преобразует строку версии в объект JSON, разделяя её на основные части версии. |
46
45
  | `EventEmitter` | Класс для работы с событиями (подписка/отписка/вызов). |
47
46
  | `elasticClamp` | Ограничивает число указанным минимальным и максимальным значением. С эффектов упругости. |
48
47
  | `DebouncedFunction` | Класс для отложенного выполнения функции с возможностью накопления и обновления аргументов. |
49
- | `UrlSecurityManager` | Менеджер безопасности URL. |
48
+ | `UrlSecurityManager` | Менеджер безопасности URL. |
49
+ | `ObjectURLManager` | Управление URL.createObjectURL. |
package/index.d.ts CHANGED
@@ -21,8 +21,6 @@ declare function alignTo(num: number, by: number): number;
21
21
 
22
22
  declare const toShort: (number: number, customParts?: string[], fixed?: number) => string;
23
23
 
24
- declare const timeAgo: (timestamp: number) => string;
25
-
26
24
  declare const formatNumber: (number: number) => string;
27
25
 
28
26
  declare function random(min: number, max: number, seed?: number): number;
@@ -291,6 +289,8 @@ declare const RGBtoHSV: (r: number, g: number, b: number) => [number, number, nu
291
289
 
292
290
  declare const HEXtoRGB: (hex: string) => [number, number, number];
293
291
 
292
+ declare const timeAgo: (timestamp: number) => string;
293
+
294
294
  type Callback<T extends unknown[] = unknown[]> = (...args: T) => void;
295
295
  declare class EventEmitter<TEvents extends Record<string, unknown[]>> {
296
296
  e: Record<string, Callback[]>;
@@ -549,4 +549,47 @@ declare class UrlSecurityManager {
549
549
  getCacheSize(): number;
550
550
  }
551
551
 
552
- export { DataKeeper, DebouncedFunction, EventEmitter, HEXtoRGB, HSVtoRGB, RGBtoHEX, RGBtoHSV, RequestDeduplicator, UrlAction, type UrlRule, UrlSecurityManager, alignTo, chunks, clamp, distributor as comparison, copyText, createLinksFromText, decWord, elasticClamp, formatNumber, generateUniqueKey, getChangedData, groupBy, isType, memoize, omit, orderBy, parseQueryString, parseTextTokens, parseVersionString, pick, random, randomByWeight, retry, shuffle, sleep, textParserUrl, timeAgo, toShort, unique, unlink, updateCurrent };
552
+ declare class ObjectURLManager {
553
+ private urls;
554
+ /**
555
+ * Создает URL и устанавливает время открытия
556
+ * @param key - Уникальный ключ
557
+ * @param obj - объект
558
+ * @param ttl - Время жизни в миллисекундах после создания
559
+ * @returns {string} - Созданный URL
560
+ */
561
+ create(key: string, obj: Parameters<typeof URL.createObjectURL>["0"], ttl: number): string;
562
+ /**
563
+ * Обновляет время последнего открытия URL
564
+ * @param key - URL для обновления
565
+ * @returns {boolean} - Успешно ли обновлено
566
+ */
567
+ access(key: string): boolean;
568
+ /**
569
+ * Принудительно удаляет URL
570
+ * @param key - Уникальный ключ
571
+ * @returns {boolean}
572
+ */
573
+ revoke(key: string): boolean;
574
+ /**
575
+ * Удаляет все истекшие URL
576
+ * @returns {number} - Количество удаленных URL
577
+ */
578
+ cleanup(): number;
579
+ /**
580
+ * Создает URL с таймером автоматического удаления
581
+ * @param key - Уникальный ключ
582
+ * @param obj - объект
583
+ * @param ttl - Время жизни в миллисекундах после создания
584
+ * @returns {string} - Созданный URL
585
+ */
586
+ createWithAutoRevoke(key: string, obj: Parameters<typeof URL.createObjectURL>["0"], ttl: number): string;
587
+ /**
588
+ * Проверяет, истек ли срок жизни URL
589
+ * @param {string} url - URL для проверки
590
+ * @returns {boolean} - Истек ли срок
591
+ */
592
+ isExpired(key: string): boolean;
593
+ }
594
+
595
+ export { DataKeeper, DebouncedFunction, EventEmitter, HEXtoRGB, HSVtoRGB, ObjectURLManager, RGBtoHEX, RGBtoHSV, RequestDeduplicator, UrlAction, type UrlRule, UrlSecurityManager, alignTo, chunks, clamp, distributor as comparison, copyText, createLinksFromText, decWord, elasticClamp, formatNumber, generateUniqueKey, getChangedData, groupBy, isType, memoize, omit, orderBy, parseQueryString, parseTextTokens, parseVersionString, pick, random, randomByWeight, retry, shuffle, sleep, textParserUrl, timeAgo, toShort, unique, unlink, updateCurrent };
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var u=require("@minsize/mutex");const D=(u,D)=>D[u%10==1&&u%100!=11?0:u%10>=2&&u%10<=4&&(u%100<10||u%100>=20)?1:2];function F(u,D,F){if(!F){const u=new Date;F=u.getDate()*u.getFullYear()*(u.getHours()??1)*u.getMilliseconds()}const e=function(u){const D=2**32;let F=u;return function(){var u;return F=(1664525*F+1013904223)%D,u=F,u^=u>>>21,F=(u^=u<<35)^u>>>4,(F>>>0)/D}}(F);return function(u,D,F){if(D>F)throw new Error("Минимальная граница не может быть больше максимальной.");return Math.floor(u()*(F-D+1))+D}(e,u,D)}function e(u,D){var F=Object.prototype.toString.call(u).replace("[object ","").replace("]","").toLowerCase();try{"number"===F?isNaN(u)&&(F="nan"):u instanceof Buffer&&(F="buffer")}catch{}return void 0!==D?F===D:F}const t=(u,D)=>{switch(e(u)){case"array":if(!function(u,D,F){if(!r(u,D,"array",F))return!1;if(u.length!==D.length)return!1;for(var e=0;e<u.length;e++)if(!t(u[e],D[e]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"object":if(!function(u,D,F){if(!r(u,D,"object",F))return!1;const e=Object.keys(u),s=Object.keys(D);if(e.length!==s.length)return!1;for(var n of e){if(!D.hasOwnProperty(n))return!1;if(!t(u[n],D[n]))return!1}return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"function":if(!function(u,D,F){return!!r(u,D,"function",F)&&u===D}(u,D,{skipCheckPrev:!0}))return!1;break;case"date":if(!function(u,D,F){return!!r(u,D,"date",F)&&u.getTime()===D.getTime()}(u,D,{skipCheckPrev:!0}))return!1;break;case"map":if(!function(u,D,F){if(!r(u,D,"map",F))return!1;if(u.size!==D.size)return!1;for(const[F,e]of u)if(!t(e,D.get(F)))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"set":if(!function(u,D,F){if(!r(u,D,"set",F))return!1;if(u.size!==D.size)return!1;const e=Array.from(u.keys()),s=Array.from(D.keys());for(var n=0;n<e.length;n++)if(!t(e[n],s[n]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;default:if(u!==D)return!1}return!0};function r(u,D,F,t){return!(!t?.skipCheckPrev&&!e(u,F)||!e(D,F))}const s=u=>{switch(e(u)){case"array":return n(u);case"object":return C(u);case"number":return Number(String(u));case"string":return String(u);case"bigint":return BigInt(String(u));case"map":return new Map(u);case"set":return new Set(u);default:return u}},n=u=>{const D=[];for(const F of u)D.push(s(F));return D},C=u=>{const D={};for(const F in u)D[F]=s(u[F]);return D},o=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),E=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),i=u=>u,a=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),c=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),l=/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g,h=u=>u;function B(u){return Array.from(new Set(u))}function f(u,D){switch(e(u)){case"object":return function(u,D){const F={},e=Object.keys(u),t=Object.keys(D),r=B([...e,...t]);for(const e of r)F[e]=f(u[e],D[e]);return F}(u,D);case"array":return function(u,D){const F=[];for(var e=0;e<u.length;e++)F.push(f(u?.[e],D?.[e]));for(e=u.length;e<D.length;e++)F.push(f(u?.[e],D?.[e]));return F}(u,D);default:return u??D}}function p(u,D){switch(e(u)){case"object":return function(u,D){const F={};var e=!1;for(const t in D)if(u.hasOwnProperty(t)){const r=p(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}else F[t]=D[t],e=!0;for(const t in u)t in D||(F[t]=void 0,e=!0);return e?F:void 0}(u,D);case"array":return function(u,D){const F=[];for(var e=!1,t=0;t<u.length;t++){const r=p(u?.[t],D?.[t]);void 0===r&&void 0!==D?.[t]||(F[t]=r,e=!0)}for(t=0;t<D.length;t++){const r=p(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}return e?F:void 0}(u,D);default:if(u!==D)return D}}function g(u,D){return D.split(".").reduce(((u,D)=>u?u[D]:void 0),u)}const m=u=>{const D=u.toString(16);return 1==D.length?"0"+D:D};var A=Object.defineProperty,d=(u,D,F)=>(((u,D,F)=>{D in u?A(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class b{constructor(){d(this,"e",{})}on(u,D){return this.e[u]||(this.e[u]=[]),this.e[u].push(D),()=>this.off(u,D)}off(u,D){if(!this.e[u])return;const F=this.e[u].findIndex((u=>u===D));-1!==F&&(this.e[u].splice(F,1),0===this.e[u].length&&delete this.e[u])}emit(u,...D){if(!this.e[u])return;const F=this.e[u].slice();for(const e of F)try{e(...D)}catch(D){console.error(`Ошибка в обработчике события ${u}:`,D)}}once(u,D){const F=(...e)=>{this.off(u,F),D(...e)};return this.on(u,F)}clear(u){u?delete this.e[u]:this.e={}}}var y=Object.defineProperty,k=(u,D,F)=>(((u,D,F)=>{D in u?y(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);var v=Object.defineProperty,w=(u,D,F)=>(((u,D,F)=>{D in u?v(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);var x=Object.defineProperty,j=(u,D,F)=>(((u,D,F)=>{D in u?x(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);var z=Object.defineProperty,$=(u,D,F)=>(((u,D,F)=>{D in u?z(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F),P=(u=>(u[u.ALLOW=1]="ALLOW",u[u.DENY=2]="DENY",u))(P||{});exports.DataKeeper=class{constructor(u){w(this,"initValue"),w(this,"currentValue"),this.initValue=s(u),this.currentValue=u}setter(u){this.currentValue=u(this.currentValue)}reset(u){this.initValue=s(u),this.currentValue=u}isModified(){return!t(this.initValue,this.currentValue)}get updateValues(){return p(this.initValue,this.currentValue)}},exports.DebouncedFunction=class{constructor(u,D){k(this,"cb"),k(this,"o"),k(this,"tId",null),k(this,"s"),this.cb=u,this.o=D,this.s=[]}execute(...u){if(this.cancel(),"[object Function]"===Object.prototype.toString.call(u[0]))this.s=u[0](...this.s);else for(let D=0;D<this.cb.length;D++)this.s[D]=u[D];this.tId=setTimeout(this.executeImmediately.bind(this),this.o.delay)}executeImmediately(){this.cancel(),this.cb(...this.s),this.s=[]}cancel(){this.tId&&(clearTimeout(this.tId),this.tId=null)}},exports.EventEmitter=b,exports.HEXtoRGB=u=>{if(3===(u=u.replace("#","")).length&&(u=u[0]+u[0]+u[1]+u[1]+u[2]+u[2]),6!==u.length)return[0,0,0];const D=parseInt(u.substring(0,2),16),F=parseInt(u.substring(2,4),16),e=parseInt(u.substring(4,6),16);return isNaN(D)||isNaN(F)||isNaN(e)||D<0||D>255||F<0||F>255||e<0||e>255?[0,0,0]:[D,F,e]},exports.HSVtoRGB=(u,D,F)=>{var e,t,r,s,n,C,o,E;switch(C=F*(1-D),o=F*(1-(n=6*u-(s=Math.floor(6*u)))*D),E=F*(1-(1-n)*D),s%6){case 0:e=F,t=E,r=C;break;case 1:e=o,t=F,r=C;break;case 2:e=C,t=F,r=E;break;case 3:e=C,t=o,r=F;break;case 4:e=E,t=C,r=F;break;case 5:e=F,t=C,r=o}return[Math.round(255*e),Math.round(255*t),Math.round(255*r)]},exports.RGBtoHEX=(u,D,F)=>"#"+m(u)+m(D)+m(F),exports.RGBtoHSV=(u,D,F)=>{var e=Math.max(u,D,F),t=Math.min(u,D,F),r=e-t,s=0,n=0===e?0:r/e,C=e/255;switch(e){case t:s=0;break;case u:s=D-F+r*(D<F?6:0),s/=6*r;break;case D:s=F-u+2*r,s/=6*r;break;case F:s=u-D+4*r,s/=6*r}return[s,n,C]},exports.RequestDeduplicator=class{constructor(){j(this,"requests",new Set),j(this,"emitter",new b),j(this,"mutex",u.Mutex({globalLimit:999999}))}async fetch(u,D){const F=await this.mutex.wait({key:u,limit:1});return this.requests.has(u)?(F(),new Promise(((D,F)=>{this.emitter.once(u,(u=>{u.error?F(u.error):D([u.result,{duplicated:!0}])}))}))):(this.requests.add(u),F(),new Promise(((F,e)=>{D().then((D=>{F([D,{duplicated:!1}]),this.emitter.emit(u,{result:D}),this.requests.delete(u)})).catch((D=>{e(D),this.emitter.emit(u,{error:D}),this.requests.delete(u)}))})))}},exports.UrlAction=P,exports.UrlSecurityManager=class{constructor(u=[],D=!0){$(this,"rules"),$(this,"cache"),$(this,"cacheEnabled"),this.rules=[...u].sort(((u,D)=>(u.priority||50)-(D.priority||50))),this.cache=new Map,this.cacheEnabled=D,this.validateConfig()}isAllowed(u){try{const D="string"==typeof u?new URL(u):u;if(this.isObfuscatedUrl(D))return!1;const F=this.getCacheKey(D);if(this.cacheEnabled&&this.cache.has(F))return this.cache.get(F);const e=this.evaluateRules(D);return this.cacheEnabled&&this.cache.set(F,e),this.logAccess(D,e),e}catch(D){return console.error("Invalid URL:",u,D),!1}}evaluateRules(u){let D=null,F=null;for(const e of this.rules)this.ruleMatches(u,e)&&(null===D&&(D=1===e.action,F=e.id||null),console.debug(`Rule "${e.id}" matched for ${u.href}`));return null===D?(console.warn(`No rules matched for ${u.href}, defaulting to deny`),!1):(console.debug(`Final decision for ${u.href}: ${D} (rule: ${F})`),D)}ruleMatches(u,D){return this.checkHost(D,u)&&this.checkPaths(D,u)&&this.checkHash(D,u)&&this.checkParams(D,u)}checkHost(u,D){return u.hosts.some((u=>"string"==typeof u?"*"===u||D.host===u:u.test(D.host)))}checkPaths(u,D){return!u.paths||0===u.paths.length||u.paths.some((u=>"string"==typeof u?D.pathname===u||D.pathname.startsWith(u+"/"):u.test(D.pathname)))}checkHash(u,D){if(!u.hash||0===u.hash.length)return!0;const F=D.hash;return u.hash.some((u=>"string"==typeof u?F===u:u.test(F)))}checkParams(u,D){if(!u.allowedParams&&!u.ignoreParams)return!0;const F=new URL(D.toString());if(u.ignoreParams&&u.ignoreParams.forEach((u=>{F.searchParams.delete(u)})),u.allowedParams&&F.searchParams.size>0)for(const[D]of F.searchParams)if(!u.allowedParams.includes(D))return!1;return!0}isObfuscatedUrl(u){return[/@/,/\\/,/^\d+\.\d+\.\d+\.\d+$/,/\[.*\]/,/localhost/].some((D=>D.test(u.hostname)||D.test(u.href)))}getCacheKey(u){const D=new URL(u.toString());return D.searchParams.sort(),`${D.host}${D.pathname}${D.search}${D.hash}`}logAccess(u,D){console[D?"info":"warn"](`URL ${D?"allowed":"blocked"}: ${u.href}`)}validateConfig(){const u=[];this.rules.forEach(((D,F)=>{D.hosts&&Array.isArray(D.hosts)&&0!==D.hosts.length||u.push(`Rule ${F}: missing or invalid 'hosts' array`),void 0!==D.priority&&(D.priority<1||D.priority>100)&&u.push(`Rule ${F}: priority must be between 1 and 100`),D.action&&![1,2].includes(D.action)&&u.push(`Rule ${F}: action must be 'allow' or 'deny'`)})),u.length>0&&console.warn("URL security config validation errors:",u)}findMatchingRule(u){try{const D="string"==typeof u?new URL(u):u;for(const u of this.rules)if(this.ruleMatches(D,u))return u;return null}catch(u){return null}}clearCache(){this.cache.clear()}setCacheEnabled(u){this.cacheEnabled=u,u||this.clearCache()}getCacheSize(){return this.cache.size}},exports.alignTo=function(u,D){return u<=0?D:u+(D-u%D)%D},exports.chunks=(u,D)=>{const F=[];for(let e=0;e<D.length;e+=u)F.push(D.slice(e,e+u));return F},exports.clamp=(u,D,F)=>u>D?u<F?u:F:D,exports.comparison=t,exports.copyText=u=>{if(u){try{navigator.clipboard?.writeText(u)}catch{}try{var D=document.createElement("input");D.value=u,document.body.appendChild(D),D.select(),document.execCommand("copy"),document.body.removeChild(D)}catch{}}},exports.createLinksFromText=(u,D)=>{const F=[],e=/{{([^}]+):([^}]+)}}/g;let t,r=0;for(;null!==(t=e.exec(u));)F.push(u.substring(r,t.index)),r=t.index+t[0].length,F.push({key:t[1],text:t[2]});return F.push(u.substring(r)),F.map((u=>"string"==typeof u?u:D(u.key,u.text)))},exports.decWord=D,exports.elasticClamp=(u,D,F,e={})=>{const{threshold:t=50,resistance:r=.2}=e;if(u<D){const F=D-u;return D-t*(1-Math.exp(-F*r/t))}if(u>F){const D=u-F;return F+t*(1-Math.exp(-D*r/t))}return u},exports.formatNumber=u=>(u||0).toString().replace(/\B(?=(\d{3})+(?!\d))/g,"."),exports.generateUniqueKey=u=>{const D=u=>{if("string"==typeof u||"number"==typeof u||"boolean"==typeof u||null===u)return JSON.stringify(u);if(Array.isArray(u))return"["+u.map(D).join(",")+"]";if("object"==typeof u){const F=Object.keys(u).sort();let e="{";for(let t=0;t<F.length;t++){const r=F[t];e+=JSON.stringify(r)+":"+D(u[r]),t<F.length-1&&(e+=",")}return e+="}",e}return String(u)},F=u=>{let D=0;if(0===u.length)return D;for(let F=0;F<u.length;F++){D=(D<<5)-D+u.charCodeAt(F),D|=0}return D};try{const e=D(u);return F(e).toString(16)}catch(D){return console.warn(`Object could not be fully stringified. Using a simple string conversion. Error: ${D}`),F(String(u)).toString(16)}},exports.getChangedData=p,exports.groupBy=function(u,D){return u.reduce(((u,F)=>{const e=D(F);return u[e]||(u[e]=[]),u[e].push(F),u}),{})},exports.isType=e,exports.memoize=function(u){const D=new Map;return function(...F){const e=JSON.stringify(F);if(D.has(e))return D.get(e);const t=u(...F);return D.set(e,t),t}},exports.omit=function(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)||(F[e]=u[e]),F)),{})},exports.orderBy=function(u,D){const F=Object.keys(D);return u.slice().sort(((u,e)=>{for(const t of F){const F="desc"===D[t]?-1:1,r=g(u,t),s=g(e,t);if(r<s)return-F;if(r>s)return F}return 0}))},exports.parseQueryString=function(u){const D={},F=(u.startsWith("?")?u.slice(1):u).split("&");for(const u of F){const[F,e]=u.split("=");if(F){const u=decodeURIComponent(F),t=e?decodeURIComponent(e):"";D[u]=t}}return D},exports.parseTextTokens=(u,D)=>{const{onToken:F=h,requireProtocol:e=!1,regex:t}=D||{},r=[];if(!u)return r;let s=u;const n=u=>{if(!u)return;const D=[...u.matchAll(l)];if(0===D.length)return void r.push(F({type:"raw",value:u}));let e=0;for(const t of D){const D=t[0],s=t.index;if(s>e){const D=u.substring(e,s);r.push(F({type:"raw",value:D}))}r.push(F({type:"emoji",value:D})),e=s+D.length}if(e<u.length){const D=u.substring(e);r.push(F({type:"raw",value:D}))}};let C,o=0;const E=new RegExp((t||(e?c:a)).source,"g");for(;null!==(C=E.exec(s));){const u=C[0],D=C.index;if(D>o){n(s.substring(o,D))}r.push(F({type:"url",value:u})),o=D+u.length}if(o<s.length){n(s.substring(o))}return r},exports.parseVersionString=function(u){const D=u.match(/^(\d+|\*)\.(\d+|\*)\.(\d+|\*)(?:-([a-zA-Z0-9-.]+))?$/);if(!D)throw new Error("Invalid version string");const[,F,e,t,r]=D,s=u=>"*"===u?"*":parseInt(u,10);return{major:s(F),minor:s(e),patch:s(t),prerelease:r||null}},exports.pick=function(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)&&(F[e]=u[e]),F)),{})},exports.random=F,exports.randomByWeight=function(u,D){let e=0;for(const D in u)e+=u[D];const t=F(0,e,D);let r=0;for(const D in u)if(r+=u[D],t<r)return D;const s=Object.keys(u);return s[F(0,s.length-1,D)]},exports.retry=function(u,D,F){return new Promise(((e,t)=>{const r=D=>{u().then(e).catch((u=>{0===D?t(u):(console.log(`Retrying... attempts left: ${D}`),setTimeout((()=>r(D-1)),F))}))};r(D)}))},exports.shuffle=(u,D)=>{for(let e=u.length-1;e>0;e--){const t=F(0,e,D);[u[e],u[t]]=[u[t],u[e]]}return u},exports.sleep=async u=>await new Promise((D=>setTimeout(D,u))),exports.textParserUrl=(u,D)=>{const F=D?.onToken??i,e=D?.requireProtocol??!1,t=D?.regex??e?E:o,r=[];let s=u+" ",n=t.exec(s);for(;n;){const u=n[0].trim(),D=n.index;D>0&&(r.push(F({type:"raw",value:s.substring(0,D)})),s=s.substring(D)),r.push(F({type:"url",value:u})),s=s.substring(u.length),n=t.exec(s)}return s.length>0&&r.push(F({type:"raw",value:s})),r},exports.timeAgo=u=>{if(!u)return"только что";const F=new Date(u),e=Math.floor((Date.now()-F.getTime())/1e3),t=()=>new Intl.DateTimeFormat("RU-ru",{day:"numeric",month:"short"}).format(F).replace(".",""),r=()=>F.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),s=(u,F,e)=>Array.isArray(u)?`${e} ${D(e,u)} ${F}`:`${u} ${F}`;switch(!0){case e<0:return"скоро";case e<60:return s(["секунду","секунды","секунд"],"назад",e);case e<3600:return s(["минуту","минуты","минут"],"назад",Math.floor(e/60));case e<7200:return s("час","назад",Math.floor(e/3600));case e<10800:return s("два часа","назад",Math.floor(e/3600));case e<14400:return s("три часа","назад",Math.floor(e/3600));case e<86400:return s(`сегодня в ${r()}`,"",Math.floor(e/3600));case e<172800:return s(`вчера в ${r()}`,"",Math.floor(e/86400));case e<259200:return s("два дня","назад",Math.floor(e/86400));case e<345600:return s("три дня","назад",Math.floor(e/86400));case e<31536e3:return s(`${t()} в ${r()}`,"",Math.floor(e/86400));case e>=31536e3:return s(`${t()} ${F.getFullYear()} г.`,"",Math.floor(e/31536e3))}return"только что"},exports.toShort=(u,D,F=1)=>{const e=D||["","k","M","G","T","P"],t=u<0,r=Math.abs(u),s=Math.log10(r)/3|0,n=r/10**(3*s);return parseFloat(`${t?"-":""}${n%1?(Math.floor(10*n)/10).toFixed(F):n}`)+e[s]},exports.unique=B,exports.unlink=s,exports.updateCurrent=f;
1
+ "use strict";var u=require("@minsize/mutex");const D=(u,D)=>D[u%10==1&&u%100!=11?0:u%10>=2&&u%10<=4&&(u%100<10||u%100>=20)?1:2];function F(u,D,F){if(!F){const u=new Date;F=u.getDate()*u.getFullYear()*(u.getHours()??1)*u.getMilliseconds()}const e=function(u){const D=2**32;let F=u;return function(){var u;return F=(1664525*F+1013904223)%D,u=F,u^=u>>>21,F=(u^=u<<35)^u>>>4,(F>>>0)/D}}(F);return function(u,D,F){if(D>F)throw new Error("Минимальная граница не может быть больше максимальной.");return Math.floor(u()*(F-D+1))+D}(e,u,D)}function e(u,D){var F=Object.prototype.toString.call(u).replace("[object ","").replace("]","").toLowerCase();try{"number"===F?isNaN(u)&&(F="nan"):u instanceof Buffer&&(F="buffer")}catch{}return void 0!==D?F===D:F}const t=(u,D)=>{switch(e(u)){case"array":if(!function(u,D,F){if(!r(u,D,"array",F))return!1;if(u.length!==D.length)return!1;for(var e=0;e<u.length;e++)if(!t(u[e],D[e]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"object":if(!function(u,D,F){if(!r(u,D,"object",F))return!1;const e=Object.keys(u),s=Object.keys(D);if(e.length!==s.length)return!1;for(var n of e){if(!D.hasOwnProperty(n))return!1;if(!t(u[n],D[n]))return!1}return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"function":if(!function(u,D,F){return!!r(u,D,"function",F)&&u===D}(u,D,{skipCheckPrev:!0}))return!1;break;case"date":if(!function(u,D,F){return!!r(u,D,"date",F)&&u.getTime()===D.getTime()}(u,D,{skipCheckPrev:!0}))return!1;break;case"map":if(!function(u,D,F){if(!r(u,D,"map",F))return!1;if(u.size!==D.size)return!1;for(const[F,e]of u)if(!t(e,D.get(F)))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"set":if(!function(u,D,F){if(!r(u,D,"set",F))return!1;if(u.size!==D.size)return!1;const e=Array.from(u.keys()),s=Array.from(D.keys());for(var n=0;n<e.length;n++)if(!t(e[n],s[n]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;default:if(u!==D)return!1}return!0};function r(u,D,F,t){return!(!t?.skipCheckPrev&&!e(u,F)||!e(D,F))}const s=u=>{switch(e(u)){case"array":return n(u);case"object":return o(u);case"number":return Number(String(u));case"string":return String(u);case"bigint":return BigInt(String(u));case"map":return new Map(u);case"set":return new Set(u);default:return u}},n=u=>{const D=[];for(const F of u)D.push(s(F));return D},o=u=>{const D={};for(const F in u)D[F]=s(u[F]);return D},C=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),i=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),E=u=>u,a=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),c=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),l=/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g,h=u=>u;function B(u){return Array.from(new Set(u))}function f(u,D){switch(e(u)){case"object":return function(u,D){const F={},e=Object.keys(u),t=Object.keys(D),r=B([...e,...t]);for(const e of r)F[e]=f(u[e],D[e]);return F}(u,D);case"array":return function(u,D){const F=[];for(var e=0;e<u.length;e++)F.push(f(u?.[e],D?.[e]));for(e=u.length;e<D.length;e++)F.push(f(u?.[e],D?.[e]));return F}(u,D);default:return u??D}}function p(u,D){switch(e(u)){case"object":return function(u,D){const F={};var e=!1;for(const t in D)if(u.hasOwnProperty(t)){const r=p(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}else F[t]=D[t],e=!0;for(const t in u)t in D||(F[t]=void 0,e=!0);return e?F:void 0}(u,D);case"array":return function(u,D){const F=[];for(var e=!1,t=0;t<u.length;t++){const r=p(u?.[t],D?.[t]);void 0===r&&void 0!==D?.[t]||(F[t]=r,e=!0)}for(t=0;t<D.length;t++){const r=p(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}return e?F:void 0}(u,D);default:if(u!==D)return D}}function m(u,D){return D.split(".").reduce(((u,D)=>u?u[D]:void 0),u)}const g=u=>{const D=u.toString(16);return 1==D.length?"0"+D:D};var d=Object.defineProperty,A=(u,D,F)=>(((u,D,F)=>{D in u?d(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class b{constructor(){A(this,"e",{})}on(u,D){return this.e[u]||(this.e[u]=[]),this.e[u].push(D),()=>this.off(u,D)}off(u,D){if(!this.e[u])return;const F=this.e[u].findIndex((u=>u===D));-1!==F&&(this.e[u].splice(F,1),0===this.e[u].length&&delete this.e[u])}emit(u,...D){if(!this.e[u])return;const F=this.e[u].slice();for(const e of F)try{e(...D)}catch(D){console.error(`Ошибка в обработчике события ${u}:`,D)}}once(u,D){const F=(...e)=>{this.off(u,F),D(...e)};return this.on(u,F)}clear(u){u?delete this.e[u]:this.e={}}}var y=Object.defineProperty,k=(u,D,F)=>(((u,D,F)=>{D in u?y(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);var v=Object.defineProperty,w=(u,D,F)=>(((u,D,F)=>{D in u?v(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);var x=Object.defineProperty,j=(u,D,F)=>(((u,D,F)=>{D in u?x(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);var z=Object.defineProperty,$=(u,D,F)=>(((u,D,F)=>{D in u?z(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F),M=(u=>(u[u.ALLOW=1]="ALLOW",u[u.DENY=2]="DENY",u))(M||{});var P=Object.defineProperty,R=(u,D,F)=>(((u,D,F)=>{D in u?P(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);exports.DataKeeper=class{constructor(u){w(this,"initValue"),w(this,"currentValue"),this.initValue=s(u),this.currentValue=u}setter(u){this.currentValue=u(this.currentValue)}reset(u){this.initValue=s(u),this.currentValue=u}isModified(){return!t(this.initValue,this.currentValue)}get updateValues(){return p(this.initValue,this.currentValue)}},exports.DebouncedFunction=class{constructor(u,D){k(this,"cb"),k(this,"o"),k(this,"tId",null),k(this,"s"),this.cb=u,this.o=D,this.s=[]}execute(...u){if(this.cancel(),"[object Function]"===Object.prototype.toString.call(u[0]))this.s=u[0](...this.s);else for(let D=0;D<this.cb.length;D++)this.s[D]=u[D];this.tId=setTimeout(this.executeImmediately.bind(this),this.o.delay)}executeImmediately(){this.cancel(),this.cb(...this.s),this.s=[]}cancel(){this.tId&&(clearTimeout(this.tId),this.tId=null)}},exports.EventEmitter=b,exports.HEXtoRGB=u=>{if(3===(u=u.replace("#","")).length&&(u=u[0]+u[0]+u[1]+u[1]+u[2]+u[2]),6!==u.length)return[0,0,0];const D=parseInt(u.substring(0,2),16),F=parseInt(u.substring(2,4),16),e=parseInt(u.substring(4,6),16);return isNaN(D)||isNaN(F)||isNaN(e)||D<0||D>255||F<0||F>255||e<0||e>255?[0,0,0]:[D,F,e]},exports.HSVtoRGB=(u,D,F)=>{var e,t,r,s,n,o,C,i;switch(o=F*(1-D),C=F*(1-(n=6*u-(s=Math.floor(6*u)))*D),i=F*(1-(1-n)*D),s%6){case 0:e=F,t=i,r=o;break;case 1:e=C,t=F,r=o;break;case 2:e=o,t=F,r=i;break;case 3:e=o,t=C,r=F;break;case 4:e=i,t=o,r=F;break;case 5:e=F,t=o,r=C}return[Math.round(255*e),Math.round(255*t),Math.round(255*r)]},exports.ObjectURLManager=class{constructor(){R(this,"urls",new Map)}create(u,D,F){const e=URL.createObjectURL(D),t=new Date;return this.urls.set(u,{url:e,ttl:F,createdAt:t,updatedAt:t}),e}access(u){const D=this.urls.get(u);return!!D&&(D.updatedAt=new Date,D.timeoutId&&(clearTimeout(D.timeoutId),D.timeoutId=setTimeout((()=>{this.urls.has(u)&&this.isExpired(u)&&this.revoke(u)}),D.ttl)),!0)}revoke(u){const D=this.urls.get(u);return!!D&&(D.timeoutId&&clearTimeout(D.timeoutId),URL.revokeObjectURL(D.url),this.urls.delete(u),!0)}cleanup(){let u=0;for(const[D,F]of this.urls.entries()){const e=F.updatedAt.getTime()+F.ttl;Date.now()>e&&(this.revoke(D),u++)}return u}createWithAutoRevoke(u,D,F){const e=this.create(u,D,F),t=this.urls.get(u);return t&&(t.timeoutId=setTimeout((()=>{this.urls.has(u)&&this.isExpired(u)&&this.revoke(u)}),t.ttl)),e}isExpired(u){const D=this.urls.get(u);if(!D)return!0;const F=D.updatedAt.getTime()+D.ttl;return Date.now()>F}},exports.RGBtoHEX=(u,D,F)=>"#"+g(u)+g(D)+g(F),exports.RGBtoHSV=(u,D,F)=>{var e=Math.max(u,D,F),t=Math.min(u,D,F),r=e-t,s=0,n=0===e?0:r/e,o=e/255;switch(e){case t:s=0;break;case u:s=D-F+r*(D<F?6:0),s/=6*r;break;case D:s=F-u+2*r,s/=6*r;break;case F:s=u-D+4*r,s/=6*r}return[s,n,o]},exports.RequestDeduplicator=class{constructor(){j(this,"requests",new Set),j(this,"emitter",new b),j(this,"mutex",u.Mutex({globalLimit:999999}))}async fetch(u,D){const F=await this.mutex.wait({key:u,limit:1});return this.requests.has(u)?(F(),new Promise(((D,F)=>{this.emitter.once(u,(u=>{u.error?F(u.error):D([u.result,{duplicated:!0}])}))}))):(this.requests.add(u),F(),new Promise(((F,e)=>{D().then((D=>{F([D,{duplicated:!1}]),this.emitter.emit(u,{result:D}),this.requests.delete(u)})).catch((D=>{e(D),this.emitter.emit(u,{error:D}),this.requests.delete(u)}))})))}},exports.UrlAction=M,exports.UrlSecurityManager=class{constructor(u=[],D=!0){$(this,"rules"),$(this,"cache"),$(this,"cacheEnabled"),this.rules=[...u].sort(((u,D)=>(u.priority||50)-(D.priority||50))),this.cache=new Map,this.cacheEnabled=D,this.validateConfig()}isAllowed(u){try{const D="string"==typeof u?new URL(u):u;if(this.isObfuscatedUrl(D))return!1;const F=this.getCacheKey(D);if(this.cacheEnabled&&this.cache.has(F))return this.cache.get(F);const e=this.evaluateRules(D);return this.cacheEnabled&&this.cache.set(F,e),this.logAccess(D,e),e}catch(D){return console.error("Invalid URL:",u,D),!1}}evaluateRules(u){let D=null,F=null;for(const e of this.rules)this.ruleMatches(u,e)&&(null===D&&(D=1===e.action,F=e.id||null),console.debug(`Rule "${e.id}" matched for ${u.href}`));return null===D?(console.warn(`No rules matched for ${u.href}, defaulting to deny`),!1):(console.debug(`Final decision for ${u.href}: ${D} (rule: ${F})`),D)}ruleMatches(u,D){return this.checkHost(D,u)&&this.checkPaths(D,u)&&this.checkHash(D,u)&&this.checkParams(D,u)}checkHost(u,D){return u.hosts.some((u=>"string"==typeof u?"*"===u||D.host===u:u.test(D.host)))}checkPaths(u,D){return!u.paths||0===u.paths.length||u.paths.some((u=>"string"==typeof u?D.pathname===u||D.pathname.startsWith(u+"/"):u.test(D.pathname)))}checkHash(u,D){if(!u.hash||0===u.hash.length)return!0;const F=D.hash;return u.hash.some((u=>"string"==typeof u?F===u:u.test(F)))}checkParams(u,D){if(!u.allowedParams&&!u.ignoreParams)return!0;const F=new URL(D.toString());if(u.ignoreParams&&u.ignoreParams.forEach((u=>{F.searchParams.delete(u)})),u.allowedParams&&F.searchParams.size>0)for(const[D]of F.searchParams)if(!u.allowedParams.includes(D))return!1;return!0}isObfuscatedUrl(u){return[/@/,/\\/,/^\d+\.\d+\.\d+\.\d+$/,/\[.*\]/,/localhost/].some((D=>D.test(u.hostname)||D.test(u.href)))}getCacheKey(u){const D=new URL(u.toString());return D.searchParams.sort(),`${D.host}${D.pathname}${D.search}${D.hash}`}logAccess(u,D){console[D?"info":"warn"](`URL ${D?"allowed":"blocked"}: ${u.href}`)}validateConfig(){const u=[];this.rules.forEach(((D,F)=>{D.hosts&&Array.isArray(D.hosts)&&0!==D.hosts.length||u.push(`Rule ${F}: missing or invalid 'hosts' array`),void 0!==D.priority&&(D.priority<1||D.priority>100)&&u.push(`Rule ${F}: priority must be between 1 and 100`),D.action&&![1,2].includes(D.action)&&u.push(`Rule ${F}: action must be 'allow' or 'deny'`)})),u.length>0&&console.warn("URL security config validation errors:",u)}findMatchingRule(u){try{const D="string"==typeof u?new URL(u):u;for(const u of this.rules)if(this.ruleMatches(D,u))return u;return null}catch(u){return null}}clearCache(){this.cache.clear()}setCacheEnabled(u){this.cacheEnabled=u,u||this.clearCache()}getCacheSize(){return this.cache.size}},exports.alignTo=function(u,D){return u<=0?D:u+(D-u%D)%D},exports.chunks=(u,D)=>{const F=[];for(let e=0;e<D.length;e+=u)F.push(D.slice(e,e+u));return F},exports.clamp=(u,D,F)=>u>D?u<F?u:F:D,exports.comparison=t,exports.copyText=u=>{if(u){try{navigator.clipboard?.writeText(u)}catch{}try{var D=document.createElement("input");D.value=u,document.body.appendChild(D),D.select(),document.execCommand("copy"),document.body.removeChild(D)}catch{}}},exports.createLinksFromText=(u,D)=>{const F=[],e=/{{([^}]+):([^}]+)}}/g;let t,r=0;for(;null!==(t=e.exec(u));)F.push(u.substring(r,t.index)),r=t.index+t[0].length,F.push({key:t[1],text:t[2]});return F.push(u.substring(r)),F.map((u=>"string"==typeof u?u:D(u.key,u.text)))},exports.decWord=D,exports.elasticClamp=(u,D,F,e={})=>{const{threshold:t=50,resistance:r=.2}=e;if(u<D){const F=D-u;return D-t*(1-Math.exp(-F*r/t))}if(u>F){const D=u-F;return F+t*(1-Math.exp(-D*r/t))}return u},exports.formatNumber=u=>(u||0).toString().replace(/\B(?=(\d{3})+(?!\d))/g,"."),exports.generateUniqueKey=u=>{const D=u=>{if("string"==typeof u||"number"==typeof u||"boolean"==typeof u||null===u)return JSON.stringify(u);if(Array.isArray(u))return"["+u.map(D).join(",")+"]";if("object"==typeof u){const F=Object.keys(u).sort();let e="{";for(let t=0;t<F.length;t++){const r=F[t];e+=JSON.stringify(r)+":"+D(u[r]),t<F.length-1&&(e+=",")}return e+="}",e}return String(u)},F=u=>{let D=0;if(0===u.length)return D;for(let F=0;F<u.length;F++){D=(D<<5)-D+u.charCodeAt(F),D|=0}return D};try{const e=D(u);return F(e).toString(16)}catch(D){return console.warn(`Object could not be fully stringified. Using a simple string conversion. Error: ${D}`),F(String(u)).toString(16)}},exports.getChangedData=p,exports.groupBy=function(u,D){return u.reduce(((u,F)=>{const e=D(F);return u[e]||(u[e]=[]),u[e].push(F),u}),{})},exports.isType=e,exports.memoize=function(u){const D=new Map;return function(...F){const e=JSON.stringify(F);if(D.has(e))return D.get(e);const t=u(...F);return D.set(e,t),t}},exports.omit=function(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)||(F[e]=u[e]),F)),{})},exports.orderBy=function(u,D){const F=Object.keys(D);return u.slice().sort(((u,e)=>{for(const t of F){const F="desc"===D[t]?-1:1,r=m(u,t),s=m(e,t);if(r<s)return-F;if(r>s)return F}return 0}))},exports.parseQueryString=function(u){const D={},F=(u.startsWith("?")?u.slice(1):u).split("&");for(const u of F){const[F,e]=u.split("=");if(F){const u=decodeURIComponent(F),t=e?decodeURIComponent(e):"";D[u]=t}}return D},exports.parseTextTokens=(u,D)=>{const{onToken:F=h,requireProtocol:e=!1,regex:t}=D||{},r=[];if(!u)return r;let s=u;const n=u=>{if(!u)return;const D=[...u.matchAll(l)];if(0===D.length)return void r.push(F({type:"raw",value:u}));let e=0;for(const t of D){const D=t[0],s=t.index;if(s>e){const D=u.substring(e,s);r.push(F({type:"raw",value:D}))}r.push(F({type:"emoji",value:D})),e=s+D.length}if(e<u.length){const D=u.substring(e);r.push(F({type:"raw",value:D}))}};let o,C=0;const i=new RegExp((t||(e?c:a)).source,"g");for(;null!==(o=i.exec(s));){const u=o[0],D=o.index;if(D>C){n(s.substring(C,D))}r.push(F({type:"url",value:u})),C=D+u.length}if(C<s.length){n(s.substring(C))}return r},exports.parseVersionString=function(u){const D=u.match(/^(\d+|\*)\.(\d+|\*)\.(\d+|\*)(?:-([a-zA-Z0-9-.]+))?$/);if(!D)throw new Error("Invalid version string");const[,F,e,t,r]=D,s=u=>"*"===u?"*":parseInt(u,10);return{major:s(F),minor:s(e),patch:s(t),prerelease:r||null}},exports.pick=function(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)&&(F[e]=u[e]),F)),{})},exports.random=F,exports.randomByWeight=function(u,D){let e=0;for(const D in u)e+=u[D];const t=F(0,e,D);let r=0;for(const D in u)if(r+=u[D],t<r)return D;const s=Object.keys(u);return s[F(0,s.length-1,D)]},exports.retry=function(u,D,F){return new Promise(((e,t)=>{const r=D=>{u().then(e).catch((u=>{0===D?t(u):(console.log(`Retrying... attempts left: ${D}`),setTimeout((()=>r(D-1)),F))}))};r(D)}))},exports.shuffle=(u,D)=>{for(let e=u.length-1;e>0;e--){const t=F(0,e,D);[u[e],u[t]]=[u[t],u[e]]}return u},exports.sleep=async u=>await new Promise((D=>setTimeout(D,u))),exports.textParserUrl=(u,D)=>{const F=D?.onToken??E,e=D?.requireProtocol??!1,t=D?.regex??e?i:C,r=[];let s=u+" ",n=t.exec(s);for(;n;){const u=n[0].trim(),D=n.index;D>0&&(r.push(F({type:"raw",value:s.substring(0,D)})),s=s.substring(D)),r.push(F({type:"url",value:u})),s=s.substring(u.length),n=t.exec(s)}return s.length>0&&r.push(F({type:"raw",value:s})),r},exports.timeAgo=u=>{if(!u)return"только что";const F=new Date(u),e=Math.floor((Date.now()-F.getTime())/1e3),t=()=>new Intl.DateTimeFormat("RU-ru",{day:"numeric",month:"short"}).format(F).replace(".",""),r=()=>F.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),s=(u,F,e)=>Array.isArray(u)?`${e} ${D(e,u)} ${F}`:`${u} ${F}`;switch(!0){case e<0:return"скоро";case e<60:return s(["секунду","секунды","секунд"],"назад",e);case e<3600:return s(["минуту","минуты","минут"],"назад",Math.floor(e/60));case e<7200:return s("час","назад",Math.floor(e/3600));case e<10800:return s("два часа","назад",Math.floor(e/3600));case e<14400:return s("три часа","назад",Math.floor(e/3600));case e<86400:return s(`сегодня в ${r()}`,"",Math.floor(e/3600));case e<172800:return s(`вчера в ${r()}`,"",Math.floor(e/86400));case e<259200:return s("два дня","назад",Math.floor(e/86400));case e<345600:return s("три дня","назад",Math.floor(e/86400));case e<31536e3:return s(`${t()} в ${r()}`,"",Math.floor(e/86400));case e>=31536e3:return s(`${t()} ${F.getFullYear()} г.`,"",Math.floor(e/31536e3))}return"только что"},exports.toShort=(u,D,F=1)=>{const e=D||["","k","M","G","T","P"],t=u<0,r=Math.abs(u),s=Math.log10(r)/3|0,n=r/10**(3*s);return parseFloat(`${t?"-":""}${n%1?(Math.floor(10*n)/10).toFixed(F):n}`)+e[s]},exports.unique=B,exports.unlink=s,exports.updateCurrent=f;
package/index.mjs CHANGED
@@ -1 +1 @@
1
- import{Mutex as u}from"@minsize/mutex";const D=(u,D,F)=>u>D?u<F?u:F:D,F=(u,D)=>D[u%10==1&&u%100!=11?0:u%10>=2&&u%10<=4&&(u%100<10||u%100>=20)?1:2];function e(u,D){return u<=0?D:u+(D-u%D)%D}const t=(u,D,F=1)=>{const e=D||["","k","M","G","T","P"],t=u<0,r=Math.abs(u),n=Math.log10(r)/3|0,s=r/10**(3*n);return parseFloat(`${t?"-":""}${s%1?(Math.floor(10*s)/10).toFixed(F):s}`)+e[n]},r=u=>{if(!u)return"только что";const D=new Date(u),e=Math.floor((Date.now()-D.getTime())/1e3),t=()=>new Intl.DateTimeFormat("RU-ru",{day:"numeric",month:"short"}).format(D).replace(".",""),r=()=>D.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),n=(u,D,e)=>Array.isArray(u)?`${e} ${F(e,u)} ${D}`:`${u} ${D}`;switch(!0){case e<0:return"скоро";case e<60:return n(["секунду","секунды","секунд"],"назад",e);case e<3600:return n(["минуту","минуты","минут"],"назад",Math.floor(e/60));case e<7200:return n("час","назад",Math.floor(e/3600));case e<10800:return n("два часа","назад",Math.floor(e/3600));case e<14400:return n("три часа","назад",Math.floor(e/3600));case e<86400:return n(`сегодня в ${r()}`,"",Math.floor(e/3600));case e<172800:return n(`вчера в ${r()}`,"",Math.floor(e/86400));case e<259200:return n("два дня","назад",Math.floor(e/86400));case e<345600:return n("три дня","назад",Math.floor(e/86400));case e<31536e3:return n(`${t()} в ${r()}`,"",Math.floor(e/86400));case e>=31536e3:return n(`${t()} ${D.getFullYear()} г.`,"",Math.floor(e/31536e3))}return"только что"},n=u=>(u||0).toString().replace(/\B(?=(\d{3})+(?!\d))/g,".");function s(u,D,F){if(!F){const u=new Date;F=u.getDate()*u.getFullYear()*(u.getHours()??1)*u.getMilliseconds()}const e=function(u){const D=2**32;let F=u;return function(){var u;return F=(1664525*F+1013904223)%D,u=F,u^=u>>>21,F=(u^=u<<35)^u>>>4,(F>>>0)/D}}(F);return function(u,D,F){if(D>F)throw new Error("Минимальная граница не может быть больше максимальной.");return Math.floor(u()*(F-D+1))+D}(e,u,D)}function C(u,D){let F=0;for(const D in u)F+=u[D];const e=s(0,F,D);let t=0;for(const D in u)if(t+=u[D],e<t)return D;const r=Object.keys(u);return r[s(0,r.length-1,D)]}function E(u,D){var F=Object.prototype.toString.call(u).replace("[object ","").replace("]","").toLowerCase();try{"number"===F?isNaN(u)&&(F="nan"):u instanceof Buffer&&(F="buffer")}catch{}return void 0!==D?F===D:F}function i(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)||(F[e]=u[e]),F)),{})}function a(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)&&(F[e]=u[e]),F)),{})}const o=async u=>await new Promise((D=>setTimeout(D,u))),c=u=>{if(u){try{navigator.clipboard?.writeText(u)}catch{}try{var D=document.createElement("input");D.value=u,document.body.appendChild(D),D.select(),document.execCommand("copy"),document.body.removeChild(D)}catch{}}},l=(u,D)=>{const F=[],e=/{{([^}]+):([^}]+)}}/g;let t,r=0;for(;null!==(t=e.exec(u));)F.push(u.substring(r,t.index)),r=t.index+t[0].length,F.push({key:t[1],text:t[2]});return F.push(u.substring(r)),F.map((u=>"string"==typeof u?u:D(u.key,u.text)))},h=(u,D)=>{switch(E(u)){case"array":if(!function(u,D,F){if(!B(u,D,"array",F))return!1;if(u.length!==D.length)return!1;for(var e=0;e<u.length;e++)if(!h(u[e],D[e]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"object":if(!function(u,D,F){if(!B(u,D,"object",F))return!1;const e=Object.keys(u),t=Object.keys(D);if(e.length!==t.length)return!1;for(var r of e){if(!D.hasOwnProperty(r))return!1;if(!h(u[r],D[r]))return!1}return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"function":if(!function(u,D,F){return!!B(u,D,"function",F)&&u===D}(u,D,{skipCheckPrev:!0}))return!1;break;case"date":if(!function(u,D,F){return!!B(u,D,"date",F)&&u.getTime()===D.getTime()}(u,D,{skipCheckPrev:!0}))return!1;break;case"map":if(!function(u,D,F){if(!B(u,D,"map",F))return!1;if(u.size!==D.size)return!1;for(const[F,e]of u)if(!h(e,D.get(F)))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"set":if(!function(u,D,F){if(!B(u,D,"set",F))return!1;if(u.size!==D.size)return!1;const e=Array.from(u.keys()),t=Array.from(D.keys());for(var r=0;r<e.length;r++)if(!h(e[r],t[r]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;default:if(u!==D)return!1}return!0};function B(u,D,F,e){return!(!e?.skipCheckPrev&&!E(u,F)||!E(D,F))}const f=u=>{const D=u=>{if("string"==typeof u||"number"==typeof u||"boolean"==typeof u||null===u)return JSON.stringify(u);if(Array.isArray(u))return"["+u.map(D).join(",")+"]";if("object"==typeof u){const F=Object.keys(u).sort();let e="{";for(let t=0;t<F.length;t++){const r=F[t];e+=JSON.stringify(r)+":"+D(u[r]),t<F.length-1&&(e+=",")}return e+="}",e}return String(u)},F=u=>{let D=0;if(0===u.length)return D;for(let F=0;F<u.length;F++){D=(D<<5)-D+u.charCodeAt(F),D|=0}return D};try{const e=D(u);return F(e).toString(16)}catch(D){return console.warn(`Object could not be fully stringified. Using a simple string conversion. Error: ${D}`),F(String(u)).toString(16)}},g=u=>{switch(E(u)){case"array":return m(u);case"object":return A(u);case"number":return Number(String(u));case"string":return String(u);case"bigint":return BigInt(String(u));case"map":return new Map(u);case"set":return new Set(u);default:return u}},m=u=>{const D=[];for(const F of u)D.push(g(F));return D},A=u=>{const D={};for(const F in u)D[F]=g(u[F]);return D},p=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),d=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),b=u=>u,y=(u,D)=>{const F=D?.onToken??b,e=D?.requireProtocol??!1,t=D?.regex??e?d:p,r=[];let n=u+" ",s=t.exec(n);for(;s;){const u=s[0].trim(),D=s.index;D>0&&(r.push(F({type:"raw",value:n.substring(0,D)})),n=n.substring(D)),r.push(F({type:"url",value:u})),n=n.substring(u.length),s=t.exec(n)}return n.length>0&&r.push(F({type:"raw",value:n})),r},k=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),v=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),w=/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g,j=u=>u,z=(u,D)=>{const{onToken:F=j,requireProtocol:e=!1,regex:t}=D||{},r=[];if(!u)return r;let n=u;const s=u=>{if(!u)return;const D=[...u.matchAll(w)];if(0===D.length)return void r.push(F({type:"raw",value:u}));let e=0;for(const t of D){const D=t[0],n=t.index;if(n>e){const D=u.substring(e,n);r.push(F({type:"raw",value:D}))}r.push(F({type:"emoji",value:D})),e=n+D.length}if(e<u.length){const D=u.substring(e);r.push(F({type:"raw",value:D}))}};let C,E=0;const i=new RegExp((t||(e?v:k)).source,"g");for(;null!==(C=i.exec(n));){const u=C[0],D=C.index;if(D>E){s(n.substring(E,D))}r.push(F({type:"url",value:u})),E=D+u.length}if(E<n.length){s(n.substring(E))}return r};function $(u){const D=new Map;return function(...F){const e=JSON.stringify(F);if(D.has(e))return D.get(e);const t=u(...F);return D.set(e,t),t}}function x(u,D,F){return new Promise(((e,t)=>{const r=D=>{u().then(e).catch((u=>{0===D?t(u):(console.log(`Retrying... attempts left: ${D}`),setTimeout((()=>r(D-1)),F))}))};r(D)}))}function P(u){const D={},F=(u.startsWith("?")?u.slice(1):u).split("&");for(const u of F){const[F,e]=u.split("=");if(F){const u=decodeURIComponent(F),t=e?decodeURIComponent(e):"";D[u]=t}}return D}function M(u){const D=u.match(/^(\d+|\*)\.(\d+|\*)\.(\d+|\*)(?:-([a-zA-Z0-9-.]+))?$/);if(!D)throw new Error("Invalid version string");const[,F,e,t,r]=D,n=u=>"*"===u?"*":parseInt(u,10);return{major:n(F),minor:n(e),patch:n(t),prerelease:r||null}}const O=(u,D,F,e={})=>{const{threshold:t=50,resistance:r=.2}=e;if(u<D){const F=D-u;return D-t*(1-Math.exp(-F*r/t))}if(u>F){const D=u-F;return F+t*(1-Math.exp(-D*r/t))}return u};function R(u){return Array.from(new Set(u))}function S(u,D){switch(E(u)){case"object":return function(u,D){const F={},e=Object.keys(u),t=Object.keys(D),r=R([...e,...t]);for(const e of r)F[e]=S(u[e],D[e]);return F}(u,D);case"array":return function(u,D){const F=[];for(var e=0;e<u.length;e++)F.push(S(u?.[e],D?.[e]));for(e=u.length;e<D.length;e++)F.push(S(u?.[e],D?.[e]));return F}(u,D);default:return u??D}}function q(u,D){switch(E(u)){case"object":return function(u,D){const F={};var e=!1;for(const t in D)if(u.hasOwnProperty(t)){const r=q(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}else F[t]=D[t],e=!0;for(const t in u)t in D||(F[t]=void 0,e=!0);return e?F:void 0}(u,D);case"array":return function(u,D){const F=[];for(var e=!1,t=0;t<u.length;t++){const r=q(u?.[t],D?.[t]);void 0===r&&void 0!==D?.[t]||(F[t]=r,e=!0)}for(t=0;t<D.length;t++){const r=q(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}return e?F:void 0}(u,D);default:if(u!==D)return D}}const I=(u,D)=>{const F=[];for(let e=0;e<D.length;e+=u)F.push(D.slice(e,e+u));return F},N=(u,D)=>{for(let F=u.length-1;F>0;F--){const e=s(0,F,D);[u[F],u[e]]=[u[e],u[F]]}return u};function L(u,D){return u.reduce(((u,F)=>{const e=D(F);return u[e]||(u[e]=[]),u[e].push(F),u}),{})}function T(u,D){return D.split(".").reduce(((u,D)=>u?u[D]:void 0),u)}function U(u,D){const F=Object.keys(D);return u.slice().sort(((u,e)=>{for(const t of F){const F="desc"===D[t]?-1:1,r=T(u,t),n=T(e,t);if(r<n)return-F;if(r>n)return F}return 0}))}const V=(u,D,F)=>{var e,t,r,n,s,C,E,i;switch(C=F*(1-D),E=F*(1-(s=6*u-(n=Math.floor(6*u)))*D),i=F*(1-(1-s)*D),n%6){case 0:e=F,t=i,r=C;break;case 1:e=E,t=F,r=C;break;case 2:e=C,t=F,r=i;break;case 3:e=C,t=E,r=F;break;case 4:e=i,t=C,r=F;break;case 5:e=F,t=C,r=E}return[Math.round(255*e),Math.round(255*t),Math.round(255*r)]},Z=u=>{const D=u.toString(16);return 1==D.length?"0"+D:D},H=(u,D,F)=>"#"+Z(u)+Z(D)+Z(F),W=(u,D,F)=>{var e=Math.max(u,D,F),t=Math.min(u,D,F),r=e-t,n=0,s=0===e?0:r/e,C=e/255;switch(e){case t:n=0;break;case u:n=D-F+r*(D<F?6:0),n/=6*r;break;case D:n=F-u+2*r,n/=6*r;break;case F:n=u-D+4*r,n/=6*r}return[n,s,C]},Y=u=>{if(3===(u=u.replace("#","")).length&&(u=u[0]+u[0]+u[1]+u[1]+u[2]+u[2]),6!==u.length)return[0,0,0];const D=parseInt(u.substring(0,2),16),F=parseInt(u.substring(2,4),16),e=parseInt(u.substring(4,6),16);return isNaN(D)||isNaN(F)||isNaN(e)||D<0||D>255||F<0||F>255||e<0||e>255?[0,0,0]:[D,F,e]};var _=Object.defineProperty,J=(u,D,F)=>(((u,D,F)=>{D in u?_(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class K{constructor(){J(this,"e",{})}on(u,D){return this.e[u]||(this.e[u]=[]),this.e[u].push(D),()=>this.off(u,D)}off(u,D){if(!this.e[u])return;const F=this.e[u].findIndex((u=>u===D));-1!==F&&(this.e[u].splice(F,1),0===this.e[u].length&&delete this.e[u])}emit(u,...D){if(!this.e[u])return;const F=this.e[u].slice();for(const e of F)try{e(...D)}catch(D){console.error(`Ошибка в обработчике события ${u}:`,D)}}once(u,D){const F=(...e)=>{this.off(u,F),D(...e)};return this.on(u,F)}clear(u){u?delete this.e[u]:this.e={}}}var G=Object.defineProperty,Q=(u,D,F)=>(((u,D,F)=>{D in u?G(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class X{constructor(u,D){Q(this,"cb"),Q(this,"o"),Q(this,"tId",null),Q(this,"s"),this.cb=u,this.o=D,this.s=[]}execute(...u){if(this.cancel(),"[object Function]"===Object.prototype.toString.call(u[0]))this.s=u[0](...this.s);else for(let D=0;D<this.cb.length;D++)this.s[D]=u[D];this.tId=setTimeout(this.executeImmediately.bind(this),this.o.delay)}executeImmediately(){this.cancel(),this.cb(...this.s),this.s=[]}cancel(){this.tId&&(clearTimeout(this.tId),this.tId=null)}}var uu=Object.defineProperty,Du=(u,D,F)=>(((u,D,F)=>{D in u?uu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class Fu{constructor(u){Du(this,"initValue"),Du(this,"currentValue"),this.initValue=g(u),this.currentValue=u}setter(u){this.currentValue=u(this.currentValue)}reset(u){this.initValue=g(u),this.currentValue=u}isModified(){return!h(this.initValue,this.currentValue)}get updateValues(){return q(this.initValue,this.currentValue)}}var eu=Object.defineProperty,tu=(u,D,F)=>(((u,D,F)=>{D in u?eu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class ru{constructor(){tu(this,"requests",new Set),tu(this,"emitter",new K),tu(this,"mutex",u({globalLimit:999999}))}async fetch(u,D){const F=await this.mutex.wait({key:u,limit:1});return this.requests.has(u)?(F(),new Promise(((D,F)=>{this.emitter.once(u,(u=>{u.error?F(u.error):D([u.result,{duplicated:!0}])}))}))):(this.requests.add(u),F(),new Promise(((F,e)=>{D().then((D=>{F([D,{duplicated:!1}]),this.emitter.emit(u,{result:D}),this.requests.delete(u)})).catch((D=>{e(D),this.emitter.emit(u,{error:D}),this.requests.delete(u)}))})))}}var nu=Object.defineProperty,su=(u,D,F)=>(((u,D,F)=>{D in u?nu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F),Cu=(u=>(u[u.ALLOW=1]="ALLOW",u[u.DENY=2]="DENY",u))(Cu||{});class Eu{constructor(u=[],D=!0){su(this,"rules"),su(this,"cache"),su(this,"cacheEnabled"),this.rules=[...u].sort(((u,D)=>(u.priority||50)-(D.priority||50))),this.cache=new Map,this.cacheEnabled=D,this.validateConfig()}isAllowed(u){try{const D="string"==typeof u?new URL(u):u;if(this.isObfuscatedUrl(D))return!1;const F=this.getCacheKey(D);if(this.cacheEnabled&&this.cache.has(F))return this.cache.get(F);const e=this.evaluateRules(D);return this.cacheEnabled&&this.cache.set(F,e),this.logAccess(D,e),e}catch(D){return console.error("Invalid URL:",u,D),!1}}evaluateRules(u){let D=null,F=null;for(const e of this.rules)this.ruleMatches(u,e)&&(null===D&&(D=1===e.action,F=e.id||null),console.debug(`Rule "${e.id}" matched for ${u.href}`));return null===D?(console.warn(`No rules matched for ${u.href}, defaulting to deny`),!1):(console.debug(`Final decision for ${u.href}: ${D} (rule: ${F})`),D)}ruleMatches(u,D){return this.checkHost(D,u)&&this.checkPaths(D,u)&&this.checkHash(D,u)&&this.checkParams(D,u)}checkHost(u,D){return u.hosts.some((u=>"string"==typeof u?"*"===u||D.host===u:u.test(D.host)))}checkPaths(u,D){return!u.paths||0===u.paths.length||u.paths.some((u=>"string"==typeof u?D.pathname===u||D.pathname.startsWith(u+"/"):u.test(D.pathname)))}checkHash(u,D){if(!u.hash||0===u.hash.length)return!0;const F=D.hash;return u.hash.some((u=>"string"==typeof u?F===u:u.test(F)))}checkParams(u,D){if(!u.allowedParams&&!u.ignoreParams)return!0;const F=new URL(D.toString());if(u.ignoreParams&&u.ignoreParams.forEach((u=>{F.searchParams.delete(u)})),u.allowedParams&&F.searchParams.size>0)for(const[D]of F.searchParams)if(!u.allowedParams.includes(D))return!1;return!0}isObfuscatedUrl(u){return[/@/,/\\/,/^\d+\.\d+\.\d+\.\d+$/,/\[.*\]/,/localhost/].some((D=>D.test(u.hostname)||D.test(u.href)))}getCacheKey(u){const D=new URL(u.toString());return D.searchParams.sort(),`${D.host}${D.pathname}${D.search}${D.hash}`}logAccess(u,D){console[D?"info":"warn"](`URL ${D?"allowed":"blocked"}: ${u.href}`)}validateConfig(){const u=[];this.rules.forEach(((D,F)=>{D.hosts&&Array.isArray(D.hosts)&&0!==D.hosts.length||u.push(`Rule ${F}: missing or invalid 'hosts' array`),void 0!==D.priority&&(D.priority<1||D.priority>100)&&u.push(`Rule ${F}: priority must be between 1 and 100`),D.action&&![1,2].includes(D.action)&&u.push(`Rule ${F}: action must be 'allow' or 'deny'`)})),u.length>0&&console.warn("URL security config validation errors:",u)}findMatchingRule(u){try{const D="string"==typeof u?new URL(u):u;for(const u of this.rules)if(this.ruleMatches(D,u))return u;return null}catch(u){return null}}clearCache(){this.cache.clear()}setCacheEnabled(u){this.cacheEnabled=u,u||this.clearCache()}getCacheSize(){return this.cache.size}}export{Fu as DataKeeper,X as DebouncedFunction,K as EventEmitter,Y as HEXtoRGB,V as HSVtoRGB,H as RGBtoHEX,W as RGBtoHSV,ru as RequestDeduplicator,Cu as UrlAction,Eu as UrlSecurityManager,e as alignTo,I as chunks,D as clamp,h as comparison,c as copyText,l as createLinksFromText,F as decWord,O as elasticClamp,n as formatNumber,f as generateUniqueKey,q as getChangedData,L as groupBy,E as isType,$ as memoize,i as omit,U as orderBy,P as parseQueryString,z as parseTextTokens,M as parseVersionString,a as pick,s as random,C as randomByWeight,x as retry,N as shuffle,o as sleep,y as textParserUrl,r as timeAgo,t as toShort,R as unique,g as unlink,S as updateCurrent};
1
+ import{Mutex as u}from"@minsize/mutex";const D=(u,D,F)=>u>D?u<F?u:F:D,F=(u,D)=>D[u%10==1&&u%100!=11?0:u%10>=2&&u%10<=4&&(u%100<10||u%100>=20)?1:2];function e(u,D){return u<=0?D:u+(D-u%D)%D}const t=(u,D,F=1)=>{const e=D||["","k","M","G","T","P"],t=u<0,r=Math.abs(u),n=Math.log10(r)/3|0,s=r/10**(3*n);return parseFloat(`${t?"-":""}${s%1?(Math.floor(10*s)/10).toFixed(F):s}`)+e[n]},r=u=>(u||0).toString().replace(/\B(?=(\d{3})+(?!\d))/g,".");function n(u,D,F){if(!F){const u=new Date;F=u.getDate()*u.getFullYear()*(u.getHours()??1)*u.getMilliseconds()}const e=function(u){const D=2**32;let F=u;return function(){var u;return F=(1664525*F+1013904223)%D,u=F,u^=u>>>21,F=(u^=u<<35)^u>>>4,(F>>>0)/D}}(F);return function(u,D,F){if(D>F)throw new Error("Минимальная граница не может быть больше максимальной.");return Math.floor(u()*(F-D+1))+D}(e,u,D)}function s(u,D){let F=0;for(const D in u)F+=u[D];const e=n(0,F,D);let t=0;for(const D in u)if(t+=u[D],e<t)return D;const r=Object.keys(u);return r[n(0,r.length-1,D)]}function C(u,D){var F=Object.prototype.toString.call(u).replace("[object ","").replace("]","").toLowerCase();try{"number"===F?isNaN(u)&&(F="nan"):u instanceof Buffer&&(F="buffer")}catch{}return void 0!==D?F===D:F}function E(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)||(F[e]=u[e]),F)),{})}function i(u,D){return Object.keys(u).reduce(((F,e)=>(D.includes(e)&&(F[e]=u[e]),F)),{})}const o=async u=>await new Promise((D=>setTimeout(D,u))),a=u=>{if(u){try{navigator.clipboard?.writeText(u)}catch{}try{var D=document.createElement("input");D.value=u,document.body.appendChild(D),D.select(),document.execCommand("copy"),document.body.removeChild(D)}catch{}}},c=(u,D)=>{const F=[],e=/{{([^}]+):([^}]+)}}/g;let t,r=0;for(;null!==(t=e.exec(u));)F.push(u.substring(r,t.index)),r=t.index+t[0].length,F.push({key:t[1],text:t[2]});return F.push(u.substring(r)),F.map((u=>"string"==typeof u?u:D(u.key,u.text)))},l=(u,D)=>{switch(C(u)){case"array":if(!function(u,D,F){if(!h(u,D,"array",F))return!1;if(u.length!==D.length)return!1;for(var e=0;e<u.length;e++)if(!l(u[e],D[e]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"object":if(!function(u,D,F){if(!h(u,D,"object",F))return!1;const e=Object.keys(u),t=Object.keys(D);if(e.length!==t.length)return!1;for(var r of e){if(!D.hasOwnProperty(r))return!1;if(!l(u[r],D[r]))return!1}return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"function":if(!function(u,D,F){return!!h(u,D,"function",F)&&u===D}(u,D,{skipCheckPrev:!0}))return!1;break;case"date":if(!function(u,D,F){return!!h(u,D,"date",F)&&u.getTime()===D.getTime()}(u,D,{skipCheckPrev:!0}))return!1;break;case"map":if(!function(u,D,F){if(!h(u,D,"map",F))return!1;if(u.size!==D.size)return!1;for(const[F,e]of u)if(!l(e,D.get(F)))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;case"set":if(!function(u,D,F){if(!h(u,D,"set",F))return!1;if(u.size!==D.size)return!1;const e=Array.from(u.keys()),t=Array.from(D.keys());for(var r=0;r<e.length;r++)if(!l(e[r],t[r]))return!1;return!0}(u,D,{skipCheckPrev:!0}))return!1;break;default:if(u!==D)return!1}return!0};function h(u,D,F,e){return!(!e?.skipCheckPrev&&!C(u,F)||!C(D,F))}const B=u=>{const D=u=>{if("string"==typeof u||"number"==typeof u||"boolean"==typeof u||null===u)return JSON.stringify(u);if(Array.isArray(u))return"["+u.map(D).join(",")+"]";if("object"==typeof u){const F=Object.keys(u).sort();let e="{";for(let t=0;t<F.length;t++){const r=F[t];e+=JSON.stringify(r)+":"+D(u[r]),t<F.length-1&&(e+=",")}return e+="}",e}return String(u)},F=u=>{let D=0;if(0===u.length)return D;for(let F=0;F<u.length;F++){D=(D<<5)-D+u.charCodeAt(F),D|=0}return D};try{const e=D(u);return F(e).toString(16)}catch(D){return console.warn(`Object could not be fully stringified. Using a simple string conversion. Error: ${D}`),F(String(u)).toString(16)}},f=u=>{switch(C(u)){case"array":return m(u);case"object":return g(u);case"number":return Number(String(u));case"string":return String(u);case"bigint":return BigInt(String(u));case"map":return new Map(u);case"set":return new Set(u);default:return u}},m=u=>{const D=[];for(const F of u)D.push(f(F));return D},g=u=>{const D={};for(const F in u)D[F]=f(u[F]);return D},d=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),A=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?:\s)/),p=u=>u,b=(u,D)=>{const F=D?.onToken??p,e=D?.requireProtocol??!1,t=D?.regex??e?A:d,r=[];let n=u+" ",s=t.exec(n);for(;s;){const u=s[0].trim(),D=s.index;D>0&&(r.push(F({type:"raw",value:n.substring(0,D)})),n=n.substring(D)),r.push(F({type:"url",value:u})),n=n.substring(u.length),s=t.exec(n)}return n.length>0&&r.push(F({type:"raw",value:n})),r},y=new RegExp(/(?:https?:\/\/)?(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),k=new RegExp(/(?:https?:\/\/)(?:www\.)?([А-Яа-яa-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(?:ru|com|org|net|me|su|рф|biz|info|co|uk|de|fr|jp|cn|es|it|ca|au|nl|se|no|dk|fi|pl|at|ch|be|cz|ie|pt|ro|hu|gr|sk|bg|hr|si|lt|lv|ee|is|mt|lu|li|mc|sm|va|ad|al|ba|mk|me|rs|tr|ua|by|kz|uz|am|ge|az|tm|kg|tj|md|kg|tj|af|dz|bh|eg|iq|ir|jo|kw|lb|ly|ma|om|ps|qa|sa|sd|sy|tn|ae|ye|ar|bo|br|cl|co|ec|gf|gy|pe|py|sr|uy|ve|ag|ai|aw|bb|bm|bs|bz|ca|cr|cu|dm|do|gd|gp|gt|hn|ht|jm|kn|ky|lc|ms|mx|ni|pa|pr|sv|tc|tt|vc|vg|vi|an|aq|as|fj|fm|gu|hm|id|ki|mh|mp|nc|nf|nr|nu|pf|pg|pw|sb|tk|to|tv|vu|wf|ws)(?:\/[a-zA-Z0-9._~:\/?#[\]@!$&'()*+,;=-]*)?)(?=\s|$)/g),v=/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g,w=u=>u,j=(u,D)=>{const{onToken:F=w,requireProtocol:e=!1,regex:t}=D||{},r=[];if(!u)return r;let n=u;const s=u=>{if(!u)return;const D=[...u.matchAll(v)];if(0===D.length)return void r.push(F({type:"raw",value:u}));let e=0;for(const t of D){const D=t[0],n=t.index;if(n>e){const D=u.substring(e,n);r.push(F({type:"raw",value:D}))}r.push(F({type:"emoji",value:D})),e=n+D.length}if(e<u.length){const D=u.substring(e);r.push(F({type:"raw",value:D}))}};let C,E=0;const i=new RegExp((t||(e?k:y)).source,"g");for(;null!==(C=i.exec(n));){const u=C[0],D=C.index;if(D>E){s(n.substring(E,D))}r.push(F({type:"url",value:u})),E=D+u.length}if(E<n.length){s(n.substring(E))}return r};function z(u){const D=new Map;return function(...F){const e=JSON.stringify(F);if(D.has(e))return D.get(e);const t=u(...F);return D.set(e,t),t}}function x(u,D,F){return new Promise(((e,t)=>{const r=D=>{u().then(e).catch((u=>{0===D?t(u):(console.log(`Retrying... attempts left: ${D}`),setTimeout((()=>r(D-1)),F))}))};r(D)}))}function $(u){const D={},F=(u.startsWith("?")?u.slice(1):u).split("&");for(const u of F){const[F,e]=u.split("=");if(F){const u=decodeURIComponent(F),t=e?decodeURIComponent(e):"";D[u]=t}}return D}function P(u){const D=u.match(/^(\d+|\*)\.(\d+|\*)\.(\d+|\*)(?:-([a-zA-Z0-9-.]+))?$/);if(!D)throw new Error("Invalid version string");const[,F,e,t,r]=D,n=u=>"*"===u?"*":parseInt(u,10);return{major:n(F),minor:n(e),patch:n(t),prerelease:r||null}}const M=(u,D,F,e={})=>{const{threshold:t=50,resistance:r=.2}=e;if(u<D){const F=D-u;return D-t*(1-Math.exp(-F*r/t))}if(u>F){const D=u-F;return F+t*(1-Math.exp(-D*r/t))}return u};function O(u){return Array.from(new Set(u))}function R(u,D){switch(C(u)){case"object":return function(u,D){const F={},e=Object.keys(u),t=Object.keys(D),r=O([...e,...t]);for(const e of r)F[e]=R(u[e],D[e]);return F}(u,D);case"array":return function(u,D){const F=[];for(var e=0;e<u.length;e++)F.push(R(u?.[e],D?.[e]));for(e=u.length;e<D.length;e++)F.push(R(u?.[e],D?.[e]));return F}(u,D);default:return u??D}}function I(u,D){switch(C(u)){case"object":return function(u,D){const F={};var e=!1;for(const t in D)if(u.hasOwnProperty(t)){const r=I(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}else F[t]=D[t],e=!0;for(const t in u)t in D||(F[t]=void 0,e=!0);return e?F:void 0}(u,D);case"array":return function(u,D){const F=[];for(var e=!1,t=0;t<u.length;t++){const r=I(u?.[t],D?.[t]);void 0===r&&void 0!==D?.[t]||(F[t]=r,e=!0)}for(t=0;t<D.length;t++){const r=I(u?.[t],D?.[t]);void 0!==r&&(F[t]=r,e=!0)}return e?F:void 0}(u,D);default:if(u!==D)return D}}const S=(u,D)=>{const F=[];for(let e=0;e<D.length;e+=u)F.push(D.slice(e,e+u));return F},q=(u,D)=>{for(let F=u.length-1;F>0;F--){const e=n(0,F,D);[u[F],u[e]]=[u[e],u[F]]}return u};function T(u,D){return u.reduce(((u,F)=>{const e=D(F);return u[e]||(u[e]=[]),u[e].push(F),u}),{})}function L(u,D){return D.split(".").reduce(((u,D)=>u?u[D]:void 0),u)}function U(u,D){const F=Object.keys(D);return u.slice().sort(((u,e)=>{for(const t of F){const F="desc"===D[t]?-1:1,r=L(u,t),n=L(e,t);if(r<n)return-F;if(r>n)return F}return 0}))}const N=(u,D,F)=>{var e,t,r,n,s,C,E,i;switch(C=F*(1-D),E=F*(1-(s=6*u-(n=Math.floor(6*u)))*D),i=F*(1-(1-s)*D),n%6){case 0:e=F,t=i,r=C;break;case 1:e=E,t=F,r=C;break;case 2:e=C,t=F,r=i;break;case 3:e=C,t=E,r=F;break;case 4:e=i,t=C,r=F;break;case 5:e=F,t=C,r=E}return[Math.round(255*e),Math.round(255*t),Math.round(255*r)]},V=u=>{const D=u.toString(16);return 1==D.length?"0"+D:D},Z=(u,D,F)=>"#"+V(u)+V(D)+V(F),H=(u,D,F)=>{var e=Math.max(u,D,F),t=Math.min(u,D,F),r=e-t,n=0,s=0===e?0:r/e,C=e/255;switch(e){case t:n=0;break;case u:n=D-F+r*(D<F?6:0),n/=6*r;break;case D:n=F-u+2*r,n/=6*r;break;case F:n=u-D+4*r,n/=6*r}return[n,s,C]},W=u=>{if(3===(u=u.replace("#","")).length&&(u=u[0]+u[0]+u[1]+u[1]+u[2]+u[2]),6!==u.length)return[0,0,0];const D=parseInt(u.substring(0,2),16),F=parseInt(u.substring(2,4),16),e=parseInt(u.substring(4,6),16);return isNaN(D)||isNaN(F)||isNaN(e)||D<0||D>255||F<0||F>255||e<0||e>255?[0,0,0]:[D,F,e]},Y=u=>{if(!u)return"только что";const D=new Date(u),e=Math.floor((Date.now()-D.getTime())/1e3),t=()=>new Intl.DateTimeFormat("RU-ru",{day:"numeric",month:"short"}).format(D).replace(".",""),r=()=>D.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),n=(u,D,e)=>Array.isArray(u)?`${e} ${F(e,u)} ${D}`:`${u} ${D}`;switch(!0){case e<0:return"скоро";case e<60:return n(["секунду","секунды","секунд"],"назад",e);case e<3600:return n(["минуту","минуты","минут"],"назад",Math.floor(e/60));case e<7200:return n("час","назад",Math.floor(e/3600));case e<10800:return n("два часа","назад",Math.floor(e/3600));case e<14400:return n("три часа","назад",Math.floor(e/3600));case e<86400:return n(`сегодня в ${r()}`,"",Math.floor(e/3600));case e<172800:return n(`вчера в ${r()}`,"",Math.floor(e/86400));case e<259200:return n("два дня","назад",Math.floor(e/86400));case e<345600:return n("три дня","назад",Math.floor(e/86400));case e<31536e3:return n(`${t()} в ${r()}`,"",Math.floor(e/86400));case e>=31536e3:return n(`${t()} ${D.getFullYear()} г.`,"",Math.floor(e/31536e3))}return"только что"};var _=Object.defineProperty,J=(u,D,F)=>(((u,D,F)=>{D in u?_(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class K{constructor(){J(this,"e",{})}on(u,D){return this.e[u]||(this.e[u]=[]),this.e[u].push(D),()=>this.off(u,D)}off(u,D){if(!this.e[u])return;const F=this.e[u].findIndex((u=>u===D));-1!==F&&(this.e[u].splice(F,1),0===this.e[u].length&&delete this.e[u])}emit(u,...D){if(!this.e[u])return;const F=this.e[u].slice();for(const e of F)try{e(...D)}catch(D){console.error(`Ошибка в обработчике события ${u}:`,D)}}once(u,D){const F=(...e)=>{this.off(u,F),D(...e)};return this.on(u,F)}clear(u){u?delete this.e[u]:this.e={}}}var G=Object.defineProperty,Q=(u,D,F)=>(((u,D,F)=>{D in u?G(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class X{constructor(u,D){Q(this,"cb"),Q(this,"o"),Q(this,"tId",null),Q(this,"s"),this.cb=u,this.o=D,this.s=[]}execute(...u){if(this.cancel(),"[object Function]"===Object.prototype.toString.call(u[0]))this.s=u[0](...this.s);else for(let D=0;D<this.cb.length;D++)this.s[D]=u[D];this.tId=setTimeout(this.executeImmediately.bind(this),this.o.delay)}executeImmediately(){this.cancel(),this.cb(...this.s),this.s=[]}cancel(){this.tId&&(clearTimeout(this.tId),this.tId=null)}}var uu=Object.defineProperty,Du=(u,D,F)=>(((u,D,F)=>{D in u?uu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class Fu{constructor(u){Du(this,"initValue"),Du(this,"currentValue"),this.initValue=f(u),this.currentValue=u}setter(u){this.currentValue=u(this.currentValue)}reset(u){this.initValue=f(u),this.currentValue=u}isModified(){return!l(this.initValue,this.currentValue)}get updateValues(){return I(this.initValue,this.currentValue)}}var eu=Object.defineProperty,tu=(u,D,F)=>(((u,D,F)=>{D in u?eu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class ru{constructor(){tu(this,"requests",new Set),tu(this,"emitter",new K),tu(this,"mutex",u({globalLimit:999999}))}async fetch(u,D){const F=await this.mutex.wait({key:u,limit:1});return this.requests.has(u)?(F(),new Promise(((D,F)=>{this.emitter.once(u,(u=>{u.error?F(u.error):D([u.result,{duplicated:!0}])}))}))):(this.requests.add(u),F(),new Promise(((F,e)=>{D().then((D=>{F([D,{duplicated:!1}]),this.emitter.emit(u,{result:D}),this.requests.delete(u)})).catch((D=>{e(D),this.emitter.emit(u,{error:D}),this.requests.delete(u)}))})))}}var nu=Object.defineProperty,su=(u,D,F)=>(((u,D,F)=>{D in u?nu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F),Cu=(u=>(u[u.ALLOW=1]="ALLOW",u[u.DENY=2]="DENY",u))(Cu||{});class Eu{constructor(u=[],D=!0){su(this,"rules"),su(this,"cache"),su(this,"cacheEnabled"),this.rules=[...u].sort(((u,D)=>(u.priority||50)-(D.priority||50))),this.cache=new Map,this.cacheEnabled=D,this.validateConfig()}isAllowed(u){try{const D="string"==typeof u?new URL(u):u;if(this.isObfuscatedUrl(D))return!1;const F=this.getCacheKey(D);if(this.cacheEnabled&&this.cache.has(F))return this.cache.get(F);const e=this.evaluateRules(D);return this.cacheEnabled&&this.cache.set(F,e),this.logAccess(D,e),e}catch(D){return console.error("Invalid URL:",u,D),!1}}evaluateRules(u){let D=null,F=null;for(const e of this.rules)this.ruleMatches(u,e)&&(null===D&&(D=1===e.action,F=e.id||null),console.debug(`Rule "${e.id}" matched for ${u.href}`));return null===D?(console.warn(`No rules matched for ${u.href}, defaulting to deny`),!1):(console.debug(`Final decision for ${u.href}: ${D} (rule: ${F})`),D)}ruleMatches(u,D){return this.checkHost(D,u)&&this.checkPaths(D,u)&&this.checkHash(D,u)&&this.checkParams(D,u)}checkHost(u,D){return u.hosts.some((u=>"string"==typeof u?"*"===u||D.host===u:u.test(D.host)))}checkPaths(u,D){return!u.paths||0===u.paths.length||u.paths.some((u=>"string"==typeof u?D.pathname===u||D.pathname.startsWith(u+"/"):u.test(D.pathname)))}checkHash(u,D){if(!u.hash||0===u.hash.length)return!0;const F=D.hash;return u.hash.some((u=>"string"==typeof u?F===u:u.test(F)))}checkParams(u,D){if(!u.allowedParams&&!u.ignoreParams)return!0;const F=new URL(D.toString());if(u.ignoreParams&&u.ignoreParams.forEach((u=>{F.searchParams.delete(u)})),u.allowedParams&&F.searchParams.size>0)for(const[D]of F.searchParams)if(!u.allowedParams.includes(D))return!1;return!0}isObfuscatedUrl(u){return[/@/,/\\/,/^\d+\.\d+\.\d+\.\d+$/,/\[.*\]/,/localhost/].some((D=>D.test(u.hostname)||D.test(u.href)))}getCacheKey(u){const D=new URL(u.toString());return D.searchParams.sort(),`${D.host}${D.pathname}${D.search}${D.hash}`}logAccess(u,D){console[D?"info":"warn"](`URL ${D?"allowed":"blocked"}: ${u.href}`)}validateConfig(){const u=[];this.rules.forEach(((D,F)=>{D.hosts&&Array.isArray(D.hosts)&&0!==D.hosts.length||u.push(`Rule ${F}: missing or invalid 'hosts' array`),void 0!==D.priority&&(D.priority<1||D.priority>100)&&u.push(`Rule ${F}: priority must be between 1 and 100`),D.action&&![1,2].includes(D.action)&&u.push(`Rule ${F}: action must be 'allow' or 'deny'`)})),u.length>0&&console.warn("URL security config validation errors:",u)}findMatchingRule(u){try{const D="string"==typeof u?new URL(u):u;for(const u of this.rules)if(this.ruleMatches(D,u))return u;return null}catch(u){return null}}clearCache(){this.cache.clear()}setCacheEnabled(u){this.cacheEnabled=u,u||this.clearCache()}getCacheSize(){return this.cache.size}}var iu=Object.defineProperty,ou=(u,D,F)=>(((u,D,F)=>{D in u?iu(u,D,{enumerable:!0,configurable:!0,writable:!0,value:F}):u[D]=F})(u,"symbol"!=typeof D?D+"":D,F),F);class au{constructor(){ou(this,"urls",new Map)}create(u,D,F){const e=URL.createObjectURL(D),t=new Date;return this.urls.set(u,{url:e,ttl:F,createdAt:t,updatedAt:t}),e}access(u){const D=this.urls.get(u);return!!D&&(D.updatedAt=new Date,D.timeoutId&&(clearTimeout(D.timeoutId),D.timeoutId=setTimeout((()=>{this.urls.has(u)&&this.isExpired(u)&&this.revoke(u)}),D.ttl)),!0)}revoke(u){const D=this.urls.get(u);return!!D&&(D.timeoutId&&clearTimeout(D.timeoutId),URL.revokeObjectURL(D.url),this.urls.delete(u),!0)}cleanup(){let u=0;for(const[D,F]of this.urls.entries()){const e=F.updatedAt.getTime()+F.ttl;Date.now()>e&&(this.revoke(D),u++)}return u}createWithAutoRevoke(u,D,F){const e=this.create(u,D,F),t=this.urls.get(u);return t&&(t.timeoutId=setTimeout((()=>{this.urls.has(u)&&this.isExpired(u)&&this.revoke(u)}),t.ttl)),e}isExpired(u){const D=this.urls.get(u);if(!D)return!0;const F=D.updatedAt.getTime()+D.ttl;return Date.now()>F}}export{Fu as DataKeeper,X as DebouncedFunction,K as EventEmitter,W as HEXtoRGB,N as HSVtoRGB,au as ObjectURLManager,Z as RGBtoHEX,H as RGBtoHSV,ru as RequestDeduplicator,Cu as UrlAction,Eu as UrlSecurityManager,e as alignTo,S as chunks,D as clamp,l as comparison,a as copyText,c as createLinksFromText,F as decWord,M as elasticClamp,r as formatNumber,B as generateUniqueKey,I as getChangedData,T as groupBy,C as isType,z as memoize,E as omit,U as orderBy,$ as parseQueryString,j as parseTextTokens,P as parseVersionString,i as pick,n as random,s as randomByWeight,x as retry,q as shuffle,o as sleep,b as textParserUrl,Y as timeAgo,t as toShort,O as unique,f as unlink,R as updateCurrent};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minsize/utils",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "Frequently used utilities",
5
5
  "license": "MIT",
6
6
  "types": "index.ts",